Remkomplekty.ru

IT Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba ошибка 13

Vba ошибка 13

Никак не могу понять почему вылазит ошибка error 13 type mismatch в макросе
ошибку выдает на строку с

200?’200px’:»+(this.scrollHeight+5)+’px’);»> For Ii# = 3 To TransWbMaxRow

Public Mwb As Workbook
Public Mwb1 As Workbook
Public Asheet As Worksheet
Public Bsheet As Worksheet

Public TransWbMaxRow As Variant
Public TransWbMaxCol As Variant
Public GetMaxRow() As Variant

Public Arr_Art_Main(500000) As Variant
Public Arr_Art_Sub(500000) As Variant
Public Arr_Stock_Main(500000) As Variant

Public Arr_Art1(500000) As Variant
Public Arr_Art2(500000) As Variant
Public Arr_Art3(500000) As Variant
Public Arr_Art4(500000) As Variant
Public Arr_Art5(500000) As Variant
Public Arr_Art6(500000) As Variant
Public Arr_Art7(500000) As Variant
Public Arr_Art8(500000) As Variant
Public Arr_Art9(500000) As Variant
Public Arr_Art10(500000) As Variant
Public Arr_Art11(500000) As Variant
Public Arr_Art12(500000) As Variant
Public Arr_Priznak(500000) As Variant

Public Arr_Prod_name(500000) As Variant

Public Arr_Client_name_plan(500000) As Variant
Public Arr_Client_Prod_code_plan(500000) As Variant
Public Arr_Client_Prod_group_plan(500000) As Variant
Public Arr_Client_Prod_Qnt_plan(500000) As Variant
Public Arr_Client_Prod_Rub_plan(500000) As Variant
Public Arr_Client_Prod_Kg_plan(500000) As Variant
Public Arr_Client_Prod_Name_plan(500000) As Variant
Public Arr_Client_Prod_Weight(500000) As Variant
Public Arr_Client_Prod_Price(500000) As Variant
Public Arr_Client_Prod_OOS(500000) As Variant
Public Arr_Client_Prod_Group(500000) As Variant

Public Arr_Client_Prod_code_actual(500000) As Variant
Public Arr_Client_Name_actual(500000) As Variant
Public Arr_Client_Prod_Qnt_Sales(500000) As Variant
Public Arr_Client_Prod_Qnt_Transit(500000) As Variant
Public Arr_Client_Prod_Qnt_Order(500000) As Variant
Public Arr_Client_Region(500000) As Variant

Public Client_Cognos(500000) As Variant
Public Client_Cognos_Addr(500000) As Variant
Public Client_CisLink(500000) As Variant
Sub Download_plan_fact_client()
Set Mwb = ActiveWorkbook
Client$ = Range(«A1»).Value
If Len(Client$) = 0 Then
MsgBox «Íå âûáðàí êëèåíò!»
Range(«A1»).Activate
End
End If
aaa% = MsgBox(«Äîáàâèòü äàííûå ïî ïëàíó è ôàêòó äëÿ » & Client$ & «?», vbYesNo + vbInformation, «Âíèìàíèå.»)
If aaa% <> vbYes Then
End
End If
Application.ScreenUpdating = False

»’Âûãðóçèì òåêóùèå ïðîäàæè»’
Mwb.Sheets(«Details»).Activate
TransWbMaxRow = GetMaxRow()
cnt1# = 0
For Ii# = 3 To TransWbMaxRow
If Len(Trim(Cells(Ii#, 1).Value)) = 0 Then Exit For
If Trim(Cells(Ii#, 1).Value) = Client$ Then
cnt1# = cnt1# + 1
Arr_Client_Prod_code_actual(cnt1#) = Trim(Cells(Ii#, 3).Value)
Arr_Client_Prod_Qnt_Sales(cnt1#) = Val(Cells(Ii#, 12).Value) ‘ ïðîäàæè, çàêàçû, òðàíçèòû â øò
Arr_Client_Prod_Qnt_plan(cnt1#) = Val(Cells(Ii#, 6).Value) ‘ ïëàí, øò
Arr_Client_Prod_OOS(cnt1#) = Trim(Cells(Ii#, 26).Value)
Arr_Client_Prod_Group(cnt1#) = Trim(Cells(Ii#, 27).Value)
End If
Next Ii#

Mwb.Sheets(«Checking»).Activate
TransWbMaxRow = GetMaxRow()
»»’ Óäàëåíèå ñòàðûõ äàííûõ
For Ii# = 4 To TransWbMaxRow
If Len(Trim(Cells(Ii#, 1).Value)) = 0 Then Exit For
Cells(Ii#, 4).Value = «»
Cells(Ii#, 5).Value = 0
Cells(Ii#, 6).Value = 0
Cells(Ii#, 8).Value = 0
Next Ii#

For Ii# = 4 To TransWbMaxRow
If Len(Trim(Cells(Ii#, 1).Value)) = 0 Then Exit For
For j# = 1 To cnt1#
If Trim(Cells(Ii#, 2).Value) = Arr_Client_Prod_code_actual(j#) Then
Cells(Ii#, 4).Value = Arr_Client_Prod_Group(j#)
Cells(Ii#, 5).Value = Arr_Client_Prod_Qnt_plan(j#)
Cells(Ii#, 6).Value = Arr_Client_Prod_Qnt_Sales(j#)
If Arr_Client_Prod_OOS(j#) = «-» Then
Cells(Ii#, 3).Value = «Äà»
End If

Exit For
End If
Next j#
Next Ii#
End Sub

Разбор ошибки Type Mismatch Error

Объяснение Type Mismatch Error

Type Mismatch Error VBA возникает при попытке назначить значение между двумя различными типами переменных.

Ошибка отображается как:
run-time error 13 – Type mismatch

Например, если вы пытаетесь поместить текст в целочисленную переменную Long или пытаетесь поместить число в переменную Date.

Давайте посмотрим на конкретный пример. Представьте, что у нас есть переменная с именем Total, которая является длинным целым числом Long.

Если мы попытаемся поместить текст в переменную, мы получим Type Mismatch Error VBA (т.е. VBA Error 13).

Давайте посмотрим на другой пример. На этот раз у нас есть переменная ReportDate типа Date.

Если мы попытаемся поместить в эту переменную не дату, мы получим Type Mismatch Error VBA.

В целом, VBA часто прощает, когда вы назначаете неправильный тип значения переменной, например:

Тем не менее, есть некоторые преобразования, которые VBA не может сделать:

Простой способ объяснить Type Mismatch Error VBA состоит в том, что элементы по обе стороны от равных оценивают другой тип.

При возникновении Type Mismatch Error это часто не так просто, как в этих примерах. В этих более сложных случаях мы можем использовать средства отладки, чтобы помочь нам устранить ошибку.

Использование отладчика

В VBA есть несколько очень мощных инструментов для поиска ошибок. Инструменты отладки позволяют приостановить выполнение кода и проверить значения в текущих переменных.

Вы можете использовать следующие шаги, чтобы помочь вам устранить любую Type Mismatch Error VBA.

  1. Запустите код, чтобы появилась ошибка.
  2. Нажмите Debug в диалоговом окне ошибки. Это выделит строку с ошибкой.
  3. Выберите View-> Watch из меню, если окно просмотра не видно.
  4. Выделите переменную слева от equals и перетащите ее в окно Watch.
  5. Выделите все справа от равных и перетащите его в окно Watch.
  6. Проверьте значения и типы каждого.
  7. Вы можете сузить ошибку, изучив отдельные части правой стороны.

Следующее видео показывает, как это сделать.

На скриншоте ниже вы можете увидеть типы в окне просмотра.

Используя окно просмотра, вы можете проверить различные части строки кода с ошибкой. Затем вы можете легко увидеть, что это за типы переменных.

В следующих разделах показаны различные способы возникновения Type Mismatch Error VBA.

Присвоение строки числу

Как мы уже видели, попытка поместить текст в числовую переменную может привести к Type Mismatch Error VBA.

Ниже приведены некоторые примеры, которые могут вызвать ошибку:

Недействительная дата

VBA очень гибок в назначении даты переменной даты. Если вы поставите месяц в неправильном порядке или пропустите день, VBA все равно сделает все возможное, чтобы удовлетворить вас.

В следующих примерах кода показаны все допустимые способы назначения даты, за которыми следуют случаи, которые могут привести к Type Mismatch Error VBA.

Ошибка ячейки

Тонкая причина Type Mismatch Error VBA — это когда вы читаете из ячейки с ошибкой, например:

Если вы попытаетесь прочитать из этой ячейки, вы получите Type Mismatch Error.

Чтобы устранить эту ошибку, вы можете проверить ячейку с помощью IsError следующим образом.

Однако проверка всех ячеек на наличие ошибок невозможна и сделает ваш код громоздким. Лучший способ — сначала проверить лист на наличие ошибок, а если ошибки найдены, сообщить об этом пользователю.

Вы можете использовать следующую функцию, чтобы сделать это:

Ниже приведен пример использования этого кода.

Неверные данные ячейки

Как мы видели, размещение неверного типа значения в переменной вызывает Type Mismatch Error VBA. Очень распространенная причина — это когда значение в ячейке имеет неправильный тип.

Читать еще:  Коды ошибок c

Пользователь может поместить текст, такой как «Нет», в числовое поле, не осознавая, что это приведет к Type Mismatch Error в коде.

Если мы прочитаем эти данные в числовую переменную, то получим
Type Mismatch Error VBA.

Вы можете использовать следующую функцию, чтобы проверить наличие нечисловых ячеек, прежде чем использовать данные.

Вы можете использовать это так:

Имя модуля

Если вы используете имя модуля в своем коде, это может привести к
Type Mismatch Error VBA. Однако в этом случае причина может быть не очевидной.

Например, допустим, у вас есть модуль с именем «Module1». Выполнение следующего кода приведет к о
Type Mismatch Error VBA.

Различные типы объектов

До сих пор мы рассматривали в основном переменные. Мы обычно называем переменные основными типами данных.

Они используются для хранения одного значения в памяти.

В VBA у нас также есть объекты, которые являются более сложными. Примерами являются объекты Workbook, Worksheet, Range и Chart.

Если мы назначаем один из этих типов, мы должны убедиться, что назначаемый элемент является объектом того же типа. Например:

Коллекция Sheets

В VBA объект рабочей книги имеет две коллекции — Sheets и Worksheets. Есть очень тонкая разница.

  1. Worksheets — сборник рабочих листов в Workbook
  2. Sheets — сборник рабочих листов и диаграммных листов в Workbook

Лист диаграммы создается, когда вы перемещаете диаграмму на собственный лист, щелкая правой кнопкой мыши на диаграмме и выбирая «Переместить».

Если вы читаете коллекцию Sheets с помощью переменной Worksheet, она будет работать нормально, если у вас нет рабочей таблицы.

Если у вас есть лист диаграммы, вы получите
Type Mismatch Error VBA.

В следующем коде Type Mismatch Error появится в строке «Next sh», если рабочая книга содержит лист с диаграммой.

Массивы и диапазоны

Вы можете назначить диапазон массиву и наоборот. На самом деле это очень быстрый способ чтения данных.

Проблема возникает, если ваш диапазон имеет только одну ячейку. В этом случае VBA не преобразует arr в массив.

Если вы попытаетесь использовать его как массив, вы получите
Type Mismatch Error .

В этом сценарии вы можете использовать функцию IsArray, чтобы проверить, является ли arr массивом.

Заключение

На этом мы завершаем статью об Type Mismatch Error VBA. Если у вас есть ошибка несоответствия, которая не раскрыта, пожалуйста, дайте мне знать в комментариях.

Типы ошибок в VBA

При выполнении макросов Excel могут возникнуть ошибки, которые в VBA делят на три категории:

Далее мы поговорим о каждом из трёх типов ошибок VBA подробно.

Ошибки компиляции

Компилятор VBA рассматривает ошибки компиляции как недопустимые и выделяет их в коде ещё до того, как дело дойдёт до запуска макроса.

Если при написании кода допущена синтаксическая ошибка, то редактор VBA сигнализирует об этом немедленно: либо при помощи окна с сообщением, либо выделяя ошибку красным цветом, в зависимости от статуса режима Auto Syntax Check.

Примечание: При включённом режиме Auto Syntax Check каждый раз, при появлении в редакторе Visual Basic во введённом коде синтаксической ошибки, будет показано соответствующее сообщение. Если же этот режим выключен, то редактор VBA продолжит сообщать о синтаксических ошибках, просто выделяя их красным цветом. Опцию Auto Syntax Check можно включить/выключить в меню Tools > Options редактора Visual Basic.

В некоторых случаях ошибка компиляции может быть обнаружена при выполнении компиляции кода, непосредственно перед тем, как макрос будет выполнен. Обычно ошибку компиляции несложно обнаружить и исправить, потому что компилятор VBA даёт информацию о характере и причине ошибки.

Например, сообщение “Compile error: Variable not defined” при попытке запустить выполнение кода VBA говорит о том, что происходит попытка использовать или обратиться к переменной, которая не была объявлена для текущей области (такая ошибка может возникнуть только если используется Option Explicit).

Ошибки выполнения

Ошибки выполнения возникают в процессе выполнения кода и приводят к остановке выполнения программы. Этот тип ошибок VBA, как правило, также не сложно обнаружить и исправить, так как сообщается информация о характере ошибки и место в коде, где произошла остановка.

Примером такой ошибки может служить попытка выполнить деление на ноль. В результате будет показано сообщение “Run-time error ’11’: Division by zero“.

В зависимости от структуры проекта VBA, может быть предложено выполнить отладку кода (как показано на рисунке ниже). В этом случае при нажатии на кнопку Debug (в окне сообщения о необходимости отладки) будет выделена цветом строка кода, которая стала причиной ошибки VBA.

Получив такое сообщение и видя выделенную строку кода, как в приведённом выше примере, обнаружить причину ошибки будет совсем не сложно.

В случае если код сложнее, чем в нашем примере, то, чтобы получить больше информации о причине возникновения ошибки VBA, можно проверить значения используемых переменных. В редакторе VBA для этого достаточно навести указатель мыши на имя переменной, или можно открыть окно отслеживания локальных переменных (в меню редактора View > Locals Window).

Коды различных ошибок выполнения расшифрованы на сайте Microsoft Support (на английском). Наиболее часто встречающиеся ошибки VBA перечислены в этой таблице:

Vba ошибка 13

What exactly is Run-time error ‘13’: Type mismatch? For starters, a Run-time error is the type of error occurring during the execution of the code. It simply causes the subroutine to stop dead in its tracks.
The Run-time Error ‘13’ occurs when you attempt to run VBA code that contains data types that are not matched correctly. Thus the ‘Type Mismatch’ error description.

The simplest example of this error is when you attempt to add a number to a string. Any such attempt defies the logic that requires data types to match and interrupts further execution of the code in your macro.

Actually, you cannot make any kind of calculation with non-numeric data types. For example, you cannot add, subtract, divide or multiply a string data value in relation to a numeric type like Integer, Single, Double, or Long. However, there is one particular and simple arithmetic operator that could trip you up.

Читать еще:  Стим выдает ошибку appname

The plus sign (‘+’) can actually be used to concatenate two string values, and not just to calculate the sum of number values. This can be the source of frustration and confusion within your code. We will look at some examples to point this out.

For more information about common errors involving string data, see this article.

EXAMPLE 1: DATA TYPES AND VARIABLES

But first, let’s look at a simple explanation of what types of operations will cause Run-time Error ‘13’: Type Mismatch. The most common operation that will throw this error is when you attempt to add a string value and a number.

In the following code, the macro is designed to find the last used row in a range. This is set to the variable, ‘myLastRow’. Then to find the next row after, we set the variable ‘x’ to a value of ‘1’ and add it to ‘myLastRow’. Also note that the variable ‘myLastRow’ has been dimensioned as an Integer data type.

But there is a slight problem with the variable ‘x’. It has been dimensioned as the string data type, and therefore, when we attempt to add ‘x’ to ‘myLastRow’ we get the Type Mismatch error.

‘Basic demonstration of how a Run-time Error ‘13’ Type mismatch is generated when the code attempts to add string (literal) data type to an Integer (numeric) datatype. Set ws = ThisWorkbook.Sheets(«Sheet1») ‘Finds the last row of myRange myLastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row ‘Sets the variable ‘x’ to integer value of 1 x = 1 ‘x enclosed in double quotes is a string and this is a mismatch for this calculation since it is not a number data type myNextRow = myLastRow + «x» MsgBox myNextRow End Sub

Notice that in debug mode, the source of our error is highlighted.

However, Excel is actually pretty savvy at dealing with this error. Even though we dimensioned ‘x’ as a string, if we remove the quotation marks from around ‘x’, Excel actually calculates the equation for the variable ‘myNextRow’ and completes the entire subroutine without error.

EXAMPLE 2: CHANGING VARIABLE DATA TYPES

To look at this from a bit of a different angle, let’s consider a subroutine where we have dimensioned a variable as an integer but later attempt to set it equal to a string value.

In this subroutine, note the variable declarations carefully. We have dimensioned ‘x’ and ‘y’ as string types while dimensioning ‘z’ as an integer. We have also set the variable ‘x’ to a string value (‘x’ in double quotes) to illustrate the other point that sometimes string values can be literal and sometimes a variable.

Ultimately, this macro is designed to output the value of another variable, ‘myVal’, in cell D1 of the worksheet. In the body of the code itself, everything looks like it should work just fine. The variable myVal should be the result of the statement ‘y + z’, and since the variables ‘y’ and ‘z’ are set to equal a cell value (both being the string value ‘x’), this should work, right?

But if we step through the code by pressing ‘F8’, we soon get the infamous Run-time Error ‘13’ pop-up:

If we click ‘Debug’, the visual basic editor highlights our problem line.

But you say to yourself, “how does this line throw an error when the line before it processed just fine?”. The error is in the line but it takes knowing what to look for to find it. Remember, we are dealing with variables here, so the causes of these errors need to be traced back to the origin of the variables themselves.

Knowing what we have already discussed, what could possibly be causing a type mismatch error when the values of the cells that we are setting the variables ‘y’ and ‘z’ are identical? It would have to be the data type that we dimensioned the variable as in the first place and sure enough, ‘z’ is the integer type when it should be string.

So the takeaway here is that the Type mismatch error gets its origin from the same problem, but it might take figuring our just where in the code that mismatch is happening. We have seen an example where it was obvious in a line of code. And now we have seen an example where it was not obvious in the line of code itself, but rather where the variable in the code was declared as the wrong data type for the operation.

EXAMPLE 3: MISMATCHED TYPES WITHIN AN OPERATION

Let’s take a look at another example of some VBA code that will throw Run-time Error ‘13’. The following looks similar to what we have been discussing, but can you find the problem?

If we run the macro, we get the error and by clicking on ‘Debug’ in the error message, Excel highlights the line that caused the error.

But why would ‘myVal = y + z’ throw a type mismatch error? It would seem that one of the variables in the right side of the statement is probably the wrong data type. But this is an interesting conundrum. In reality, until the code execution gets to the highlighted line throwing the error, everything is actually correct.

Note that ‘y’ has been dimensioned as the string data type and is is set equal to a string value of “x” in cell B1 of our worksheet. This is actually correct so far.

Also note that the variable ‘z’ is dimensioned as the integer data type and is set to equal the value of ‘x’ in cell C1 in our worksheet. Furthermore, since in our code we have also set the variable ‘x’ to a value of 3, everything is actually correct on the variable side of things in our code.

Читать еще:  Айфон 5s ошибка 3194

But the problem is that you cannot execute a mathematical operation involving a string data type. This is why the statement ‘myVal = y + z’ throws the error. It’s not because there is something wrong with the variables involved in the operation of that line of code, at least not explicitly. It’s simply because the operation that the line of code itself is designed to perform cannot be done involving a value that is non-numeric.

All that said, recall that the plus sign can actually be used to join two strings of text. So if we change the data type of the variable ‘z’ to string…

…look what happens when we output the value of ‘myVal’ to a message box.

So while you cannot add a string value to an integer data type, you actually can execute an operation involving the plus sign with string data types as long as the data types in the operation match. And this is the key to understanding ‘Run-time error ‘13’: Type mismatch’. You simple have to be aware and make sure your data types match when used in operations that require the match.

One of the best ways to further understand this error is to simply do what we have done in these examples. Create some simple subroutines and mismatch data types on purpose. Then fix them as you go along so the concept sinks in. The more you do this, the more equipped you will be to recognize where the problem is lurking within your own VBA code.

VBA Ошибка Выполнения 13 Несоответствие Типов

Я пытаюсь создать электронные письма в выбранной папке Outlook из макроса Excel.

В приведенном ниже коде ‘TestDraft1’ работает, генерируя email в папке, выбранной пользователем с помощью метода пользователя Namespace.PickFolder.

Однако, поскольку я хочу генерировать много писем в одной папке, мне нужно, чтобы пользователь мог выбрать папку только один раз. В ‘TestDraft2’ ниже я пытаюсь сохранить папку как объект, а затем передать ее в функцию перемещения. Это не удается с «Runtime Error 13, Type Mismatch». Переменная ‘folder’ дает тип «MAPIFolder».

Что я здесь упускаю? Как объект, который я назначаю ‘folder’, отличается от объекта, который я передаю ‘Mailitem.move’ ?

Обратите внимание, что я использую позднюю привязку , поэтому я определяю свои переменные как объекты. Я бы предпочел сохранить его таким образом, так как я хотел бы иметь возможность распространять его без специальной конфигурации. То, что я действительно хочу знать, — это то, почему первая версия преуспевает, а вторая версия терпит неудачу. Дополнительные сведения: мой работодатель использует Office 2007.

Edit 2 Проблема не имела ничего общего с тем, какой тип объекта возвращается PickFolder. Это было связано с моим неправильным использованием синтаксиса VBA. Я ответил на вопрос ниже, и я переименовываю его, чтобы лучше решить то, что я действительно спрашивал. Оригинальное название было: возвращение объекта папки Outlook в Excel VBA с помощью PickFolder

2 Ответа

Это показывает, насколько я новичок в синтаксисе VBA.

Это то, что я считаю, происходит: MailItem.Move не возвращает результата, поэтому он использует синтаксис без скобок.

Таким образом, (папка) интерпретируется как выражение и возвращает текстовое значение имени папки внутри скобок. Доказательства:

Таким образом, в то время как folder -это объект правильного типа, (folder) -это выражение, которое вычисляется в строку.

может быть, вы просто пропустите objmail.save, прежде чем переместить его.

и ваши определения — это проблема наверняка: Измените первые строки вашего Sub следующим образом (непроверенный):

это может помочь.

Похожие вопросы:

Я создал макрос для файла, и сначала он работал нормально, но сегодня я открывал и перезапускал файл и макрос сотни раз, и я всегда получаю следующую ошибку: Excel VBA ошибка выполнения ’13’.

Кто-нибудь может мне помочь? (Я новичок в VBA, и я также получил помощь в создании этого макроса) Я создал макрос для файла, и сначала он работал нормально, но сегодня я открывал и перезапускал файл.

Я получаю ошибку времени выполнения ’13’: несоответствие типа, когда я пытаюсь запустить код. Debug выделяет операторы ‘IF’ и ‘ElseIF’, но я не могу понять, где ошибка. Любая помощь будет оценена по.

Это мой первый раз кодирования с нуля и очень глупый вопрос действительно. Почему я продолжаю получать эту ошибку? Ошибка выполнения ’13’: несоответствие типов Мое значение в B1-это целое число.

Я пытаюсь скопировать значения из одной рабочей книги в текущую рабочую книгу, но получаю ошибку: Ошибка времени выполнения ’13’ несоответствие типов Я пробовал много, но не получить решение любой.

Что может быть причиной, что я получаю несоответствие типа ошибки времени выполнения ’13’ с этой строкой кода VBA: .Cells(1, 1) = CDate(Format(Now, dd.mm.yy hh:mm)) Проблема в том, что коллега не.

У меня есть программа VBA, которая позволяет пользователю вводить имена (integers/strings/etc.) в первую строку активного листа Excel для записи заголовков. После записи входов мне нужно записать.

Я создал микро-и пользовательскую форму на Excel VBA, когда я дважды щелкнул файл Excel и попытался запустить макрос, он дал мне ошибку: ошибка: Excel VBA Ошибка времени выполнения ’13’.

В настоящее время я учусь кодировать в excel VBA, и я написал следующий код, но когда я его запускаю, я получаю ошибку времени выполнения 13 несоответствие типа. любая идея Sub dennis().

Я не очень хорош в VBA, но внезапно, я начал получать эту ошибку. Пожалуйста, дайте мне знать, если вы можете найти, что ошибка. Я так зациклился на этом. Я искал везде и нашел много подобных.

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×