VBA – select方法失败

对于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“:select范围类失败的方法”在底部的第三行。 我试图通过添加这一行来解决它(即激活工作簿,我想先处理):

 Workbooks("XXX.xls").Activate 

此外,我在我的代码中使用明确的引用,如:

 Workbooks("XXX.xls").Worksheets("XXX").Range("A1:C1").Select 

我明白,最好不要在我的代码中使用.Select方法。 但这不是我第一次得到这个错误,我只是想了解VBA的逻辑。 据我了解Excel只是不明白我指的是哪张表,但我不明白为什么 – 因为我已经激活了工作簿,我需要(我有几个工作簿打开),并使用明确的引用。 如果你可以请详细解释为什么会发生这个错误(即Excel在哪个时间点混淆),我将不胜感激!

感谢大家提前的帮助!

关于这个问题的意见已经充分描述了1004错误的性质,你似乎对此有足够的理解。

看到这个伟大的讨论更多的细节:

如何避免在Excel VBAmacros中使用select

这里是你的代码重构,以避免Select方法。

 Dim wb as Workbook Dim ws as Worksheet Dim newWS as Worksheet Dim rngCopy as Range Set wb = Workbooks("XXX.xls") Set ws = wb.Worksheets("XXX") With ws ' Setting column width .Cells.ColumnWidth = 10 ' Filtering XXX funds .Rows(1).AutoFilter Field:=3, Criteria1:="=*XXX*" Set rngCopy = .Range(.Range("A1:C1"), .Range("A1:C1").End(xlDown)) End With ' Add new sheet and rename it With wb Set newWS = .Sheets.Add(After:=.Worksheets(.Worksheets.Count)) End With newWS.Name = "XXX_F" ' Paste data in to the new worksheet rngCopy Destination:=newWS.Cells(1,1)