VBA - 选择方法失败

时间:2016-09-07 12:46:15

标签: excel vba select runtime-error

我是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混淆的时间点),我将非常感激!

感谢大家提前帮助!

1 个答案:

答案 0 :(得分:1)

对该问题的评论充分描述了sys.__stdout__错误的性质,您似乎对此有了足够的了解。

有关详细信息,请参阅此讨论:

How to avoid using Select in Excel VBA macros

以下是为避免1004方法而重构的代码。

Select