VBA对象需要错误,具体取决于代码排列

时间:2012-10-02 20:57:25

标签: excel vba excel-vba excel-2007

r = mainWS.Cells(count, 1).Value
paths = mainWS.Cells(i, 2).Value
pathd = mainWS.Cells(i, 6).Value

.....

If (r = "H") Then

    Application.Workbooks.Open (pathd & "\" & filed)
    Set dWB = Application.Workbooks(filed)
    Set tabD_WB = dWB.Sheets(tabd & "")

    Application.Workbooks.Open (paths & "\" & files)
    Set sWB = Application.Workbooks(files)
    Set tabS_WB = sWB.Sheets(tabs & "")

End If

Set uRange = tabD_WB.Range(Cells(1, 1), Cells(5, tabD_WB.UsedRange.Columns.count))

因此,如果我将最后一行以Set uRange 开头放在IF块中,那么练习效果很好。如果我在事后/外面立即放置它,它不会。你能帮我理解为什么吗?

我得到的错误(如果它在外面)是Object required。这是Excel内部运作的一些错误吗?

我很困惑。非常感谢!

2 个答案:

答案 0 :(得分:3)

为什么在tabD_WB声明之外引用IF时,您希望它能够正常工作?

除非您有更多代码未向我们展示,否则您只需在tabD_WB语句中设置IF,这意味着如果r <> "H"该对象为空,则您不能访问空对象的范围。

答案 1 :(得分:1)

您可以编写代码

Application.Workbooks.Open (pathd & "\" & filed)
Set dWB = Application.Workbooks(filed)
Set tabD_WB = dWB.Sheets(tabd & "")

作为

Set dWB = Application.Workbooks.Open(pathd & "\" & filed)
Set tabD_WB = dWB.Sheets(tabd)

现在关于你的错误,你没有完全限定你的Cells()对象。试试这个

With tabD_WB
    Set uRange = .Range(.Cells(1, 1), .Cells(5, .UsedRange.Columns.Count))
End With

我希望您在代码中的某个位置声明uRangeRange?另外,如果IF条件不正确,那么就没有工作簿对象?