我是VBA的新手,很抱歉如果问题对于更有经验的用户来说是显而易见的。我试着阅读类似问题的答案,并解决了问题,但仍面临同样的问题。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
我明白,这最好不要在我的代码中使用选择方法。但这不是我第一次遇到这个错误,我只想了解VBA的逻辑。据我了解Excel只是不明白我指的是哪张表,但我不明白为什么 - 因为我激活了我需要的工作簿(我打开了几本工作簿)并使用了明确的引用。如果你能详细解释为什么会出现这个错误(即Excel在哪个时间点混淆),我将非常感激!
感谢大家提前的帮助!
只是一个提示 - Excel有一些称为实例(如果您使用Excel 2007以上)。我想你的情况你已经开了两个excel的东西。要修复它,关闭所有excel文件,然后用代码打开文件,用XXX打开文件,只需单击鼠标按钮即可。 – Vityata
此错误很可能发生,因为在您激活工作簿时,您还需要激活工作表,然后才能在该工作表上使用.select方法。所以:'工作表(“XXX”)。activate'我知道你已经说过了,但请记住,使用select语句几乎总是有更好的方法。 – Jason
您不能选择活动工作表之外的其他任何东西。最好的做法是重构代码,以便它不会使用*** Active *或全局对象。获取对象的引用并使用它们。 – Comintern