Excel 使用从不同的工作表中获取数据。选择

Excel 使用从不同的工作表中获取数据。选择,excel,vba,Excel,Vba,我必须在不同的excel工作表之间跳转以获取数据,以便VBA输出所需的内容。我一直在使用工作表(“名称”)。选择函数可在工作表之间跳转。有时它可以工作并让我运行程序,但有时会出现运行时错误。我希望它每次都能100%正常工作,每当由于选择功能而失败时,我总是感到沮丧。如果有人有任何提示或建议,我很乐意与你分享!任何帮助都将不胜感激 Sheets("Test").Select 运行时错误“1004”:工作表类的选择方法失败不要使用Select(或Activate),这是一种不好的做法,会很快导致错

我必须在不同的excel工作表之间跳转以获取数据,以便VBA输出所需的内容。我一直在使用工作表(“名称”)。选择函数可在工作表之间跳转。有时它可以工作并让我运行程序,但有时会出现运行时错误。我希望它每次都能100%正常工作,每当由于选择功能而失败时,我总是感到沮丧。如果有人有任何提示或建议,我很乐意与你分享!任何帮助都将不胜感激

Sheets("Test").Select

运行时错误“1004”:工作表类的选择方法失败

不要使用
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
声明如下:

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
循环工作表:

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

如果我这样做了,我是否仍然能够以同样的方式调用数据,或者我是否必须改变获取数据的方式?单元格(3,2)。该工作表上该单元格中的值。如果要获取位于不同工作表中相同单元格中的数据,则必须循环工作表并获取数据。不同工作表中的不同单元格。我可以用这个工作簿吗?工作表(“Sheet1”)。范围(“A1”)。值以这个工作簿结尾。工作表(“Sheet2”)。范围(“A2”)。值以从两个不同工作表中的两个不同单元格获取数据?您的问题完全不清楚。有很多方法可以避免
。选择
。很多人试图帮助你和你否决所有答案?谢谢你,我用你的例子来修复我的代码。啊,我没有意识到选择和激活在这个社区是如此不受欢迎。我想我最终会不得不重写一些东西。非常感谢。这个社区并不是很不喜欢它,它只是很容易出错,降低了代码的速度,而且通常是不必要的。没有它你会过得更好!如果我的答案对你有帮助,请不要忘记点击下一票下的复选图标接受我的答案,但这可能是重复的