VBA Excel не запускается из-за ошибки компиляции: несоответствие типов - PullRequest
0 голосов
/ 14 января 2019

Когда я запускаю код VBA, он выдает ошибку «Ошибка компиляции: несоответствие типов». Он не выдает код ошибки, как это было раньше.

Он используется для работы с этими данными. Данные слева - это таблица, в которой я работаю со значениями в строке J и присваиваю идентификатор в строке M

[Изображение из Excel] [1]
Sub Cat()
    Dim i As String
    Dim x As String

    For i = 1 To 113
        For x = 1 To 13
            If Sheet1.Cells("B", i).Value = Sheet1.Cells("J", x) Then
                Sheet1.Cells("A", i).Value = Sheet1.Cells("M", x)
            End If
        Next
    Next
End Sub

Я ожидаю, что будут вставлены идентификаторы строки A, где B и M равны согласно циклам for

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Помимо очевидного i As String, незаконно используемого в качестве целочисленного значения для подсчета циклов (должно быть объявлено As Long), вы инвертируете аргументы RowIndex и ColumnIndex неявного вызова Range.[_Default] члена :

enter image description here

Sheet1.Cells("B", i).Value

"B" недопустимо RowIndex значение.

Правило большого пальца, избегайте Range.Cells, когда у вас есть строка для столбца; используйте его, когда у вас есть строка index и столбец index , то есть числовые значения для строки и столбца.

Если у вас есть строка заголовка столбца, такая как "B", используйте свойство Range и объедините адрес ячейки, например, Sheet1.Range("B" & i).

0 голосов
/ 14 января 2019

Несоответствие нескольких типов

Помните: вы можете использовать, например, Cells(i, "B") или Range("B" & i) для диапазона из одной ячейки.

Код

Option Explicit

Sub Cat()
    Dim i As Long
    Dim x As Long

    For i = 1 To 113
        For x = 1 To 13
            If Sheet1.Cells(i, "B").Value = Sheet1.Cells(x, "J") Then
                Sheet1.Cells(i, "A").Value = Sheet1.Cells(x, "M")
            End If
        Next
    Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...