Как определить значение ячейки как рабочий лист - PullRequest
0 голосов
/ 21 мая 2019

В настоящее время я использую фиксированное имя файла в своем коде, однако я хотел бы заменить это фиксированное имя значением определенной ячейки

Я много раз просматривал потоки, но безуспешно - я довольно новичок в кодировании, поэтому я обнаружил похожие проблемы, но ничего не могу применить к своему кодированию или адаптировать под свои нужды

Я пытался использовать

Set wbBook2 = Workbooks(wsSheet1_1.Range("O35").Value) 

и несколько других подобных шагов, но безрезультатно

Dim wbBook1 As Workbook
Dim wsSheet1_1 As Worksheet
Dim wsSheet1_2 As Worksheet

Dim wbBook2 As Workbook
Dim wsSheet2_1 As Worksheet

Set wbBook1 = Workbooks("Main File.xlsm")
Set wsSheet1_1 = wbBook1.Worksheets("Example1")
Set wsSheet1_2 = wbBook1.Worksheets("Example2")

Set wbBook2 = Workbooks("Look Up File.xlsm")
Set wsSheet2_1 = wbBook2.Worksheets("Example3")

Вышеприведенное позволяет мне использовать «wbBook2.Activate», чтобы переключиться на рабочую книгу, в которой находятся данные, и предпринять необходимые действия, однако я хотел бы иметь возможность перейти от использования «Look Up File.xlsm» к ячейке. O35 на wsSheet1_1.

В настоящее время я просто проверяю, что мой поисковый файл имеет то же имя, которое указано в коде, но это, очевидно, приведет к сбою, если его случайно переименуют или пользователь получит название этого файла LookUp (без пробела) например.

Обратите внимание, что wbBook2 уже будет открыт, когда этот код используется, и имя файла может измениться. Пользователь отдельно определяет полный путь и имя файла (включая .xlsm), который затем открывается в отдельном макросе, который должен оставаться отдельным

1 Ответ

0 голосов
/ 21 мая 2019

Безопаснее циклически просматривать рабочие книги и искать совпадения

Private Function set_wb(ByVal toName As String) As Workbook

    ' Function set_wb(<String>), returns Workbook Object on match.
    ' - if no match found, return Nothing
    ' - invokation example: Set wb1 = set_wb("Book1")

    Dim wb As Workbook
    For each wb in Application.Workbooks
       If wb.Name = toName Then
           Set set_wb = wb ' wb found
           Exit Function
       End If
    Next wb

    Set set_wb = Nothing ' wb not found
End Function

И в вашем случае вызывается следующим образом:

Set wbBook2 = set_wb(wsSheet1_1.Range("O35")) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...