Получение данных с разных листов с помощью .Select - PullRequest
0 голосов
/ 12 июня 2019

Я должен переключаться между различными листами Excel, чтобы получить данные для моего VBA, чтобы вывести то, что я хочу. Я использовал Sheets («имя»). Выберите функцию для перехода между листами. Иногда это работает и позволяет мне запустить программу, но иногда я получаю ошибку во время выполнения. Я хочу, чтобы это работало 100% времени каждый раз, и всегда приходил в уныние всякий раз, когда это терпело неудачу из-за функции выбора. Если у кого-то есть какие-либо советы или рекомендации, я бы с удовольствием поделился ими! Любая помощь будет принята с благодарностью.

Sheets("Test").Select

Ошибка времени выполнения «1004»: не удалось выбрать метод класса рабочего листа

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Не используйте Select (или Activate в этом отношении), это плохая практика и довольно быстро приводит к ошибкам.

Этот поток является большой помощью впочему и как вы должны избегать его использования.

Нет необходимости выбирать лист перед получением данных с него.Например:

Sub test()
'''
'Bad practise:
'''
Sheets("Sheet1").Select
i = Range("A1")

'''
'Good practise
'''
i = Workbooks("Book1").Sheets("Sheet1").Range("A1").Value

'''
'Better practise
'''
Dim wb As Workbook
Dim sht As Worksheet
Dim i As String

Set wb = Workbooks("Book1")
Set sht = wb.Sheets("Sheet1")

With sht
    i = .Range("A1").Value
End With

End Sub
0 голосов
/ 12 июня 2019

с заявлением:

Option Explicit

Sub test()

    'Create a witrh statement with the Sheet name you want
    With ThisWorkbook.Worksheets("Sheet1")
        'Refer to cell A1 (don t forget the "." before Range)
        .Range("A1").Value = ""
        'Refer to cell A1 (don t forget the "." before Cells)
        .Cells(1, 1).Value = ""
    End With

End Sub

Рабочие таблицы Loop:

Option Explicit

Sub test()

    Dim ws As Worksheet

    'Loop Sheets
    For Each ws In ThisWorkbook.Worksheets

        With ws
            'If sheet name is Sheet1 or Sheet3
            If .Name = "Sheet1" Or .Name = "Sheet3" Then

                'Refer to cell A1 (don t forget the "." before Range)
                .Range("A1").Value = 2
                'Refer to cell A1 (don t forget the "." before Cells)
                .Cells(1, 1).Value = 10
            ElseIf .Name = "Sheet2" Then
                'Refer to cell A1 (don t forget the "." before Range)
                .Range("A1").Value = 5
                'Refer to cell A1 (don t forget the "." before Cells)
                .Cells(1, 1).Value = 20

            End If

        End With

    Next ws

End Sub

Установить рабочую таблицу в переменную

Option Explicit

Sub test()

    Dim ws1 As Worksheet, ws2 As Worksheet

    With ThisWorkbook
        Set ws1 = .Worksheets("Sheet1")
        Set ws2 = .Worksheets("Sheet2")
    End With

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