这段文字我是从郭国军的《Excel VBA编程入门》教材中抄来的:
Sub AccessObject() Application.ActiveWorkbook.Sheets(1).Cells(1,2).Value = "A String" End Sub
我得到了一个438错误。当我摆脱了Application.ActiveWorkbook.Sheets(1)前缀的代码运行。我不知道为什么这个前缀给出了438错误。这只是过时了还是我的设置错误?谢谢!
omvjsjqw1#
**编辑:***见结尾处针对此评论的补充材料 *
工作簿中可能有一些工作表不是工作表,因此没有单元格。图表工作表就是一个例子。您可以通过将以下代码添加到代码中来检查Sheets(1)是哪种类型的工作表:
Sheets(1)
MsgBox Application.ActiveWorkbook.Sheets(1).Type
如果消息框中显示的值为-4167,则Sheets(1)为工作表。有关其他信息,请参阅xlSheetType的值但更简单的解决方案是改为使用Worksheets(1),因为这样只会查看工作表。您也可以删除Application.ActiveWorkbook(**edit:**但请参阅下文),因为这是默认设置,这样您就可以:
Worksheets(1)
Application.ActiveWorkbook
Worksheets(1).Cells(1, 2).Value = "A String"
**edit:**正如这条注解所指出的,当代码在ThisWorkbook模块中时,Application.ActiveWorkbook不是默认值。所以,如果你想让宏影响当前活动的工作簿,可以指定ActiveWorkbook(但不需要指定Application):
ThisWorkbook
ActiveWorkbook
ActiveWorkbook.Worksheets(1).Cells(1, 2).Value = "A String"
或者,如果希望宏影响宏代码所在的同一工作簿,请在普通模块中指定ThisWorkbook:
ThisWorkbook.Worksheets(1).Cells(1, 2).Value = "A String"
或者将代码放在ThisWorkbook模块中,不指定任何有关工作簿的内容:
或者,如果您希望代码影响特定工作簿,而该工作簿不包含宏,也不一定是活动工作簿,则在变量中捕获对该工作簿的引用,然后引用该工作簿。执行此操作的常用方法是在打开该工作簿时:
Dim wb As Workbook Set wb = Workbooks.Open("filename goes here") ' do stuff wb.Sheets(1).Cells(1, 2).Value = "A String" ' do other stuff - including potentially saving the workbook wb.Close Set wb = Nothing
1条答案
按热度按时间omvjsjqw1#
**编辑:***见结尾处针对此评论的补充材料 *
工作簿中可能有一些工作表不是工作表,因此没有单元格。图表工作表就是一个例子。您可以通过将以下代码添加到代码中来检查
Sheets(1)
是哪种类型的工作表:如果消息框中显示的值为-4167,则Sheets(1)为工作表。有关其他信息,请参阅xlSheetType的值
但更简单的解决方案是改为使用
Worksheets(1)
,因为这样只会查看工作表。您也可以删除Application.ActiveWorkbook
(**edit:**但请参阅下文),因为这是默认设置,这样您就可以:**edit:**正如这条注解所指出的,当代码在
ThisWorkbook
模块中时,Application.ActiveWorkbook
不是默认值。所以,如果你想让宏影响当前活动的工作簿,可以指定ActiveWorkbook
(但不需要指定Application):或者,如果希望宏影响宏代码所在的同一工作簿,请在普通模块中指定
ThisWorkbook
:或者将代码放在
ThisWorkbook
模块中,不指定任何有关工作簿的内容:或者,如果您希望代码影响特定工作簿,而该工作簿不包含宏,也不一定是活动工作簿,则在变量中捕获对该工作簿的引用,然后引用该工作簿。执行此操作的常用方法是在打开该工作簿时: