将工作表设置为Range而不激活/选择它

时间:2018-01-12 14:27:46

标签: excel vba excel-vba

在下面的代码中,是否有可能摆脱.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

2 个答案:

答案 0 :(得分:1)

是的,您需要正确限定所有Range调用:

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

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

答案 1 :(得分:0)

你没有完全限定第二个Range,因此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