Найдите значение ячейки на другой вкладке книги и распечатайте данные - PullRequest
0 голосов
/ 08 мая 2020

У меня есть требование, где у меня есть набор данных, хранящихся в столбце A «Sheet1», как показано ниже

Cat
Dog
Mouse
Horse

И у меня есть еще одна книга - «Animaldetails.xlsx», где у меня есть несколько вкладок который содержит "Кот", "Собака", "Мышь", "Лошадь", а также несколько других имен

Мне нужно найти все значения из моего "листа1" на вкладках "Animaldetails.xlsx" и скопировать все данные, представленные на каждой вкладке, на отдельном листе - "sheet2"

Переходя к тому, что я сделал, я попробовал метод .Find, но мне удалось сделать только для одной ячейки, а не для нескольких значений. Я могу искать на листе, но я хочу искать на вкладках книги

Я знаю, что этого можно достичь с помощью функции INDIRECT, но я хочу сделать это из VBA

1 Ответ

1 голос
/ 08 мая 2020

Чтобы найти лист с именем, содержащим Cat, вам нужно l oop по всем листам и сравнить их имя с Cat.

Пример:

Dim Wb As Workbook
Set Wb = Application.Workbooks("Animaldetails.xlsx")  'or set any other workbook

Dim Ws As Worksheet
For Each Ws In Wb.Worksheets 'loop through all worksheets
    If Ws.Name Like "*Cat*" Then  'note the asterisks as placeholder
        'the worksheet Ws has `Cat` in its name
    End If
Next Ws

Чтобы не только проверить Cat, но и все остальные, вам понадобится еще l oop, чтобы проверить каждую W для всех имен в списке:

Dim Wb As Workbook
Set Wb = Application.Workbooks("Animaldetails.xlsx")  'or set any other workbook

Dim TestNameList() As Variant
TestNameList = ThisWorkbook.Worksheets("Sheet1").Range("A1:A10").Value 'adjust range to your data

Dim Ws As Worksheet
For Each Ws In Wb.Worksheets 'loop through all worksheets
    Dim TestName As Variant
    For Each TestName in TestNameList
        If Ws.Name Like "*" & TestName & "*" Then
            'the worksheet Ws has TestName in its name
            Debug.Print Ws.Name & " has " & TestName & " in its name."
            'your copy actions here
            'Ws.Range("A1").Copy Destination:=ThisWorkbook.Worksheets("Sheet2").Range("A1") 'adjust to your needs

            'if every sheetname can only match one of the names then you can exit for here to fasten the code
            Exit For
        End If
    Next TestName
Next Ws

Если имена ваших рабочих листов это точно Cat и Dog, тогда нам намного проще использовать их напрямую:

Dim Wb As Workbook
Set Wb = Application.Workbooks("Animaldetails.xlsx")  'or set any other workbook

Dim TestNameList() As Variant
TestNameList = ThisWorkbook.Worksheets("Sheet1").Range("A1:A10").Value 'adjust range to your data

Dim TestName As Variant
For Each TestName in TestNameList
    Dim Ws As Worksheet
    Set Ws = Nothing
    On Error Resume Next  'next line throws error if sheet name does not exist
    Set Ws = Wb.Worksheets(TestName)
    On Error Goto 0  're-enable error reporting

    If Not Ws Is Nothing Then
        'Ws is now your worksheet with `TestName`

        'your copy actions here
        'Ws.Range("A1").Copy Destination:=ThisWorkbook.Worksheets("Sheet2").Range("A1") 'adjust to your needs
    Else
        MsgBox "Worksheet '" & TestName & "' not found."
    End If
Next TestName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...