Поиск VBA относится к первому листу в книге, а не к «Листу 1». - PullRequest
0 голосов
/ 22 мая 2018

Как бы я изменил приведенный ниже поиск, чтобы он ссылался на первый лист рабочей книги, а не на «Лист 1»?

.Range("I15:I" & lastRow).FormulaR1C1 = _
                       "=IF(VLOOKUP(RC[-8],[" & combinedWorkbook.Name & "]Sheet1!C1:C2,1,TRUE)=RC[-8],VLOOKUP(RC[-8],[" & combinedWorkbook.Name & "]Sheet1!C1:C2,2,TRUE),NA())"

Спасибо

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

если вы собираетесь использовать его повторно, я бы объявил:

Dim first_sheet As String
first_sheet = combinedWorkbook.Sheets(1).Name

и затем использовал бы его в своем коде так:

.Range("I15:I" & lastRow).FormulaR1C1 = _
                       "=IF(VLOOKUP(RC[-8],[" & combinedWorkbook.Name & "] & first_sheet & !C1:C2,1,TRUE)=RC[-8],VLOOKUP(RC[-8],[" & combinedWorkbook.Name & "] & first_sheet  & !C1:C2,2,TRUE),NA())"
0 голосов
/ 22 мая 2018

Вы уже объединяете имя книги в формулу.Точно так же вы можете объединить имя первого листа.Первый лист - это первый лист в коллекции Worksheets книги.

Так что combinedWorkbook.Worksheets(1).Name будет именем первого листа в книге combinedWorkbook.

Но имена могут содержать такие пробелы, как«Имя моего рабочего листа».Тогда сама ссылка должна быть в одинарных кавычках, таких как 'My Worksheet Name'!A1.

Так что все вместе:

.Range("I15:I" & lastRow).FormulaR1C1 = _
                       "=IF(VLOOKUP(RC[-8],'[" & combinedWorkbook.Name & "]" & combinedWorkbook.Worksheets(1).Name & "'!C1:C2,1,TRUE)=RC[-8],VLOOKUP(RC[-8],'[" & combinedWorkbook.Name & "]" & combinedWorkbook.Worksheets(1).Name & "'!C1:C2,2,TRUE),NA())"
0 голосов
/ 22 мая 2018

Это действительно небольшой пример того, как обратиться к первому рабочему листу.

  1. Возьмите имя первого рабочего листа и сохраните его как переменную, используя свойство .Name.

  2. Объединить переменную в формуле:


Public Sub TestMe()

    Dim wks1 As String
    wks1 = Worksheets(1).Name
    'worksheets should not contains spaces! :) left and right
    Worksheets(1).Name = Trim(wks1)
    Range("I15:I20").FormulaR1C1 = "=" & wks1 & "!R1C1"

End Sub
...