VBA对象所需的错误取决于代码安排

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开始,那么这个练习就完美了。 如果我之后/之外立即放置它,它不会。 你能帮我理解为什么吗?

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

我感到困惑。 非常感谢!

tabD_WB被引用到IF语句的外部时,为什么你会期望它工作?

除非你有更多的代码没有显示给我们,否则你只能在IF语句中设置tabD_WB ,这意味着如果r <> "H" ,那么这个对象是空的,而且你不能访问空对象的范围。

你可以写你的代码

 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 

我希望你已经在你的代码中声明了uRange作为一个Range ? 另外,如果IF条件不成立,那么将不会有工作簿对象?