Vba 将工作表设置为范围而不激活/选择它

Vba 将工作表设置为范围而不激活/选择它,vba,excel,Vba,Excel,在以下代码中,如果在运行宏时选择了与我要设置的工作表不同的工作表,是否可以去掉.Activate行而不获取“运行时错误1004” Sub PDFbyMarket() Dim wb1 as Workbook Dim OBPBudgetByMarket As Range Set wb1 = Workbooks("PDF") wb1.Worksheets("OBP_Market_Structure").Activate Set OBPBudgetByMarket = wb1.Worksheets

在以下代码中,如果在运行宏时选择了与我要设置的工作表不同的工作表,是否可以去掉
.Activate
行而不获取“运行时错误1004”

Sub PDFbyMarket()
Dim wb1 as Workbook
Dim OBPBudgetByMarket As Range

Set wb1 = Workbooks("PDF")


wb1.Worksheets("OBP_Market_Structure").Activate
Set OBPBudgetByMarket = wb1.Worksheets("OBP_Market_Structure").Range("P9", Range("P9").End(xlDown)

End Sub

是的,您需要正确确认所有范围呼叫:

With wb1.Worksheets("OBP_Market_Structure")
   Set OBPBudgetByMarket = .Range("P9", .Range("P9").End(xlDown))
End With

请注意两次范围调用之前的句号。

您没有完全限定第二次
范围,因此为1004

您可以使用:

Set OBPBudgetByMarket = wb1.Worksheets("OBP_Market_Structure").Range("P9", wb1.Worksheets("OBP_Market_Structure").Range("P9").End(xlDown))
或者更好:

With wb1.Worksheets("OBP_Market_Structure")
    Set OBPBudgetByMarket = .Range("P9", .Range("P9").End(xlDown))
End With