Vlookup через именованный диапазон - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть рабочая тетрадь, в которой есть один основной лист и остальные листы.По сути, мой код выполняет циклический просмотр листов в книге, не называемой «Основным», и извлекает значения и помещает их в соответствующий столбец на Главном листе.IsError проверяет, существует ли уже имя листа в списке, а если нет - не добавляет значений.Макет листов довольно запутан, со многими объединенными ячейками - https://imgur.com/cayZXUA.

Так что на каждом листе (кроме основного) у меня есть блок, который содержит значения для "заработной платы", "консолидированного социального налога" и "разное"Расходы".Мне пришла в голову идея дать этим блокам на каждом листе название «Допущения», и я создал область действия для каждого листа, чтобы «Допущения» могли повторяться на всех листах, и я мог проходить через них.Вот изображение этого блока - https://imgur.com/nPYyLbM.

Код выполняется, но я получаю # ЗНАЧЕНИЕ!ошибки на моем основном листе - https://imgur.com/a/H2TOFmW Прошу прощения за ссылки, пока не имею разрешения публиковать изображения

Вот сам код:

Sub Sheets()
Dim wsheet As Worksheet

With ThisWorkbook.Sheets("Main")

  For Each wsheet In ThisWorkbook.Sheets

    If wsheet.Name <> "Main" Then
       Set nextEntry = .Cells(.Rows.Count, "G").End(xlUp).Offset(1, 0)
       Set nextEntry_payroll = .Cells(.Rows.Count, "AI").End(xlUp).Offset(1, 0)
       Set nextEntry_consolidated_social_tax = .Cells(.Rows.Count, "AJ").End(xlUp).Offset(1, 0)
       Set nextEntry_miscellaneous_expenditures = .Cells(.Rows.Count, "AK").End(xlUp).Offset(1, 0)

       If IsError(Application.Match(wsheet.Name, .Range("G:G"), 0)) Then
          nextEntry.Value = wsheet.Name
          nextEntry_payroll.Value = wsheet.Application.VLookup("payroll", "Assumptions", 3, 0)
          nextEntry_consolidated_social_tax.Value = wsheet.Application.VLookup("consolidated social tax", "Assumptions", 3, 0)
          nextEntry_miscellaneous_expenditures.Value = wsheet.Application.VLookup("miscellaneous expenditures", "Assumptions", 3, 0)
       End If
    End If
  Debug.Print wsheet.Name
  Next wsheet
End Sub

1 Ответ

0 голосов
/ 11 февраля 2019

Измените функцию VLookup с

wsheet.Application.VLookup("payroll", "Assumptions", 3, 0)

на

 Application.VLookup("payroll", wSheet.Range("Assumptions"), 3, 0)

и аналогично для двух других.

В качестве альтернативы, вы можете изменить ее, используя рабочий лист VLookupФункция вместо вычисления значения в VBA:

nextEntry_payroll.Formula = "=VLookup(""payroll"", " & wsheet.Name & "!Assumptions, 3, 0)"

и аналогично для двух других.Попробуйте, чтобы увидеть разницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...