Как использовать Поиск по нескольким книгам? - PullRequest
1 голос
/ 22 апреля 2020

Я работаю в Excel с VBA для приложений. Я пытаюсь получить ссылку на ячейку с указанными c данными в рабочей книге, чтобы построить do l l 1012 * на основе ссылки на ячейку. Я не могу понять, почему ссылка не загружается в переменную, которую я настроил для нее. Я использовал этот метод для данных, которые существуют в той же книге, поэтому я думаю, что это связано со ссылкой на другую книгу. Я получаю ту же ошибку (время выполнения 91), независимо от того, находится ли MsgBox до или после активации электронной таблицы консолидатора. В частности, переменные firstDataCell и lastDataCell не загружаются. Я пытался манипулировать кодом из этого поста, но ничего не получилось: Excel VBA -. Метод поиска между книгами

Вот мой (усеченный) код:

Dim wbConsolidator As Workbook              'Variable to store this workbook
Dim wbQ1Actuals As Workbook                 'Variable to store workbook with quarter 1 actuals
Dim wsExist As Boolean                      'Variable to store if the worksheet exists in the actuals workbook t/f
Dim searchRange As Range                    'Variable to store the range to search for budget data
Dim firstDataCell As Range                  'Variable to store first data cell
Dim lastDataCell As Range                   'Variable to store the last data cell
Dim tabName As String                       'Variable to store employee's tab name
Dim notIn414 As String                      'Variable to store employees the VB could not find in 414

Set wbConsolidator = Workbooks("Consolidator.xlsm")
                                        'Store consolidation workbook into variable
Set wbQ1Actuals = Workbooks("(the spreadsheet title")
                                        'Store worbook with Q1 actuals into variable

tabName = calculated based on the employee's name. This functions correctly and the correct tab activates

    If wsExist = True Then                     'Check if wsExist is false after all loops
          wbQ1Actuals.Worksheets(tabName).Activate
          Set searchRange = Range("A1", Range("A65536").End(xlUp))
          Set firstDataCell = searchRange.Find("Pay Date", LookIn:=xlValues, lookat:=xlWhole)
                                              'Find the first row with budget percentages
          Set lastDataCell = searchRange.Find("Total:", LookIn:=xlValues, lookat:=xlWhole)
                                              'Find the sum row to track last row with budget percentages

Else
    notIn414 = notIn414 & lastName & "," & firstName & ":"
                                            'Write the employee's name to the error log
End If                                      'End this test
wbConsolidator.Activate                         'Activate the main spreadsheet

If lastDataCell Is Nothing Then
      MsgBox "The variable is blank."
Else
      MsgBox lastDataCell.Row
End If

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

Заранее спасибо

1 Ответ

0 голосов
/ 22 апреля 2020

Что-то вроде этого должно быть более устойчивым:

Set wbConsolidator = Workbooks("Consolidator.xlsm")
Set wbQ1Actuals = Workbooks("(the spreadsheet title")

tabName = "someUserName"

If wsExist Then                   
    With wbQ1Actuals.Worksheets(tabName)
          'all range references are fully-qualified...
          Set searchRange = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
    End With
    Set firstDataCell = searchRange.Find("Pay Date", LookIn:=xlValues, lookat:=xlWhole)
    Set lastDataCell = searchRange.Find("Total:", LookIn:=xlValues, lookat:=xlWhole)
Else
    notIn414 = notIn414 & lastName & "," & firstName & ":"
End If                                      

If lastDataCell Is Nothing Then
      MsgBox "The variable is blank."
Else
      MsgBox lastDataCell.Row
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...