我是VBA的新手,很抱歉,如果有经验的用户有明显的问题。我尝试阅读类似问题的几个答案,并解决问题,但仍面临同样的问题。
我的代码是:
Workbooks("XXX.xls").Activate
' Setting column width
Workbooks("XXX.xls").Worksheets("XXX").Cells.Select
Selection.ColumnWidth = 10
' Filtering XXX funds
Workbooks("XXX.xls").Worksheets("XXX").Rows("1:1").Select
Selection.AutoFilter Field:=3, Criteria1:="=*XXX*"
' Add new sheet and rename it
Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "XXX_F"
'Copying needed information
Workbooks("XXX.xls").Worksheets("XXX").Range("A1:C1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
我得到的错误是“运行时错误'1004':从底部第三行选择范围类失败的方法”。我试图通过添加这一行来修复它(即激活我想要首先使用的工作簿):
Workbooks("XXX.xls").Activate
我在代码中也使用了显式引用,例如:
Workbooks("XXX.xls").Worksheets("XXX").Range("A1:C1").Select
我知道最好不要在我的代码中使用.Select方法。但这不是我第一次收到这个错误,我只是想了解VBA的逻辑。据我所知Excel只是不明白我所指的是哪张,但我不明白为什么 - 因为我已经激活了我需要的工作簿(我打开了几本工作簿)并使用了显式引用。如果你能详细解释为什么会出现这种错误(即Excel混淆的时间点),我将非常感激!
感谢大家提前帮助!
答案 0 :(得分:1)
对该问题的评论充分描述了sys.__stdout__
错误的性质,您似乎对此有了足够的了解。
有关详细信息,请参阅此讨论:
How to avoid using Select in Excel VBA macros
以下是为避免1004
方法而重构的代码。
Select