Как решить ошибку типа VBA при определении переменной?

avatar
Jesse Willems
8 августа 2021 в 18:30
62
0
0

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

r = Application.Match(row, ShEnter.Range("CH10:CH165"), 0) 

Что здесь происходит? Извините, я очень новичок в VBA. Заранее спасибо за любую помощь!

Полный код:

    Option Explicit
    Sub EnterData()
    
    'Dimension variables and declare data types
    Dim column1 As Long, column2 As String, column3 As Long, column4 As String, column5 As Long, column6 As Long, row As Long
    Dim c1 As Long, c2 As String, c3 As Long, c4 As String, c5 As Long, c6 As Long, r As Long
    
    'Stop macro if cells are empty
    If ActiveSheet.Range("D8,D9, D13, D14, D15, D16, D17, D18").Value = "" Then Exit Sub
     
    'Save values in entry cells to variable columns
    column1 = ActiveSheet.Range("D13").Value
    column2 = ActiveSheet.Range("D14").Value
    column3 = ActiveSheet.Range("D15").Value
    column4 = ActiveSheet.Range("D16").Value
    column5 = ActiveSheet.Range("D17").Value
    column6 = ActiveSheet.Range("D18").Value
     
    'Save value in cell D10 to variable row
    row = ActiveSheet.Range("D10").Value
    
    'Find relative position of value in cell C16 in cell range CH10:CH165 and save to variable r
    r = Application.Match(row, ShEnter.Range("CH10:CH165"), 0)
    
     
    'Find relative position of value in cell C15 in cell range B1:H1 and save to variable c
    c1 = Application.Match(column1, Worksheets("ShData").Range("A1:BW1"), 0)
     'Save value to table using coordinates
    Worksheets("ShData").Range("A1").Offset(r, c1).Value = Worksheets("ShEnter").Range("J17").Value

'Repeat for column2
c2 = Application.Match(column2, Worksheets("ShData").Range("A1:BW1"), 0)
Worksheets("ShData").Range("A1").Offset(r, c2).Value = Worksheets("ShEnter").Range("J18").Value

'Repeat for column3
c3 = Application.Match(column3, Worksheets("ShData").Range("A1:BW1"), 0)
Worksheets("ShData").Range("A1").Offset(r, c3).Value = Worksheets("ShEnter").Range("J19").Value

'Repeat for column4
c4 = Application.Match(column4, Worksheets("ShData").Range("A1:BW1"), 0)
Worksheets("ShData").Range("A1").Offset(r, c4).Value = Worksheets("ShEnter").Range("J20").Value

'Repeat for column5
c5 = Application.Match(column5, Worksheets("ShData").Range("A1:BW1"), 0)
Worksheets("ShData").Range("A1").Offset(r, c4).Value = Worksheets("ShEnter").Range("J20").Value

'Repeat for column6
c4 = Application.Match(column4, Worksheets("ShData").Range("A1:BW1"), 0)
Worksheets("ShData").Range("A1").Offset(r, c4).Value = Worksheets("ShEnter").Range("J20").Value
  
'Stop macro
End Sub
Источник
T.M.
8 августа 2021 в 18:41
4

r должен иметь вариантный тип, чтобы иметь возможность хранить также значения ошибок в случае отсутствия результатов (теперь результаты можно обнаружить с помощью If Not IsError(r) Then или If IsNumeric(r) Then)

Pᴇʜ
9 августа 2021 в 06:38
1

И странный факт, но согласно документации метод WorksheetFunction.Match возвращает Double, а не Long.

Darren Bartrup-Cook
9 августа 2021 в 08:25
1

Учитывая голосование только за то, что Option Explicit вверху, особенно в сочетании с , я очень новичок в VBA. :)

Ответы (0)