Я пытаюсь собрать некоторый код, который вставляет функцию соответствия в столбец «B», которая ссылается на ту же строку в соседнем столбце «A», используя список в столбце «A» на другом листе в качестве поискового массива. Рабочий лист, на котором все это происходит, — это ws0, а лист, в котором находится поисковый массив, — это ws2.
Код срабатывает на последней строке (ПРОПУСТИТЕ К НИЖНЕЙ ЧАСТИ МОЕГО КОДА) в скобках «С»:
Cells(i, 2).Value = "=MATCH(A" & i & "," & ws2.Name & "!$A$9:$A$" & lRow1 & ", 0)""",
давая мне
Ошибка выполнения 1004. Ошибка, определяемая приложением или объектом.
Я не могу понять, что вызывает это. У меня есть ощущение, что мои кавычки могут быть неверными, или одна из моих переменных lRow1, fRow, ws2 может быть проблемой, но я возился с ними всеми, сколько мог, но безрезультатно. Любые мысли будут оценены! Обратите внимание, что закомментированная строка над той, которая выдает ошибку, демонстрирует, как должен выглядеть результат формулы.
Dim wb0 As Workbook 'this workbook (the log) '''''''''''''''''''''''
Dim wb1 As Workbook 'the opened T12 sheet
Dim rng0 As Range 'the range of cells in this workbook's 2nd sheet to be copied to
Dim rng1 As Range 'the range of cells from the opened workbook to be copied from
Dim rng2 As Range 'the range of the cells copied into ws0 from ws1
Dim fRow As Integer 'the first row of the range used in wb0, ws0
Dim lRow0 As Integer 'the last row of the range used in wb0, ws0
Dim lRow1 As Integer 'the last row of the range of accounts in ws2
Dim usedRng As Range 'the full range of cells used in wb0, ws0
Set ws0 = ActiveSheet
Set wb0 = ActiveWorkbook '''''''''''''''
Set rng0 = ws0.Range("A9:A159")
'Find the desired T12 workbook filepath
'only allow the user to select one file
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
'make the file dialog visible to the user
fileChoice = Application.FileDialog(msoFileDialogOpen).Show
'determine what choice the user made
If fileChoice <> 0 Then
'get the file path selected by the user
filePath = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
End If
'Set variables using the newly-opened workbook
Set wb1 = Workbooks.Open(filePath)
Set ws1 = ActiveSheet
Set rng1 = ws1.Range("B9:B159")
'copy wb1, ws1's into wb0, ws0
rng0.Value = rng1.Value
wb1.Close
'create variable to refer to the first tab of wb0
wb0.Worksheets("Sheet1").Activate
Set ws2 = ActiveSheet
With ws2
lRow1 = Cells(.Rows.Count, "A").End(xlUp).Row 'Last row
End With
'switch back to ws0
ws0.Activate
'identify the range used in ws0 of wb0
Set rng2 = ActiveSheet.UsedRange
fRow = rng2(1).Row 'First row
With ws0
lRow0 = Cells(.Rows.Count, "A").End(xlUp).Row 'Last row
End With
Dim i As Integer
For i = fRow To lRow0
With ws0
'Cells(i, 2).Value = "=MATCH(A9,Sheet2!A9:A100,0)"
Cells(i, 2).Value = "=MATCH(A" & i & "," & ws2.Name & "!$A$9:$A$" & lRow1 & ", 0)"""
End With
Next i
End Sub
Я получаю ту же ошибку с Cells.Formula... и с Range.Formula... Я получаю другую ошибку времени выполнения 1004: "Метод 'Range' объекта _ Global не удалось". Мы ценим любые предложения! Я включил полный фрагмент своего макроса для справки... хотя соответствующая часть находится внизу. Заранее спасибо!
ws2
, в нем есть пробелы? все ли используемые переменные заполнены правильно? Что говорит непосредственное окно, если выdebug.? <formula>
проверяете, что оценивает ваш код? Я думаю, это ваше)"""
, вам нужно только 1 закрытие - person Nathan_Sav   schedule 08.03.2018