excel Visual Basic 438将字符串分配给单元格时出错

31moq8wy  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(143)

这段文字我是从郭国军的《Excel VBA编程入门》教材中抄来的:

Sub AccessObject()
Application.ActiveWorkbook.Sheets(1).Cells(1,2).Value = "A String"
End Sub

我得到了一个438错误。当我摆脱了Application.ActiveWorkbook.Sheets(1)前缀的代码运行。我不知道为什么这个前缀给出了438错误。这只是过时了还是我的设置错误?
谢谢!

omvjsjqw

omvjsjqw1#

**编辑:***见结尾处针对此评论的补充材料 *

工作簿中可能有一些工作表不是工作表,因此没有单元格。图表工作表就是一个例子。您可以通过将以下代码添加到代码中来检查Sheets(1)是哪种类型的工作表:

MsgBox Application.ActiveWorkbook.Sheets(1).Type

如果消息框中显示的值为-4167,则Sheets(1)为工作表。有关其他信息,请参阅xlSheetType的值
但更简单的解决方案是改为使用Worksheets(1),因为这样只会查看工作表。您也可以删除Application.ActiveWorkbook(**edit:**但请参阅下文),因为这是默认设置,这样您就可以:

Worksheets(1).Cells(1, 2).Value = "A String"

**edit:**正如这条注解所指出的,当代码在ThisWorkbook模块中时,Application.ActiveWorkbook不是默认值。所以,如果你想让宏影响当前活动的工作簿,可以指定ActiveWorkbook(但不需要指定Application):

ActiveWorkbook.Worksheets(1).Cells(1, 2).Value = "A String"

或者,如果希望宏影响宏代码所在的同一工作簿,请在普通模块中指定ThisWorkbook

ThisWorkbook.Worksheets(1).Cells(1, 2).Value = "A String"

或者将代码放在ThisWorkbook模块中,不指定任何有关工作簿的内容:

Worksheets(1).Cells(1, 2).Value = "A String"

或者,如果您希望代码影响特定工作簿,而该工作簿不包含宏,也不一定是活动工作簿,则在变量中捕获对该工作簿的引用,然后引用该工作簿。执行此操作的常用方法是在打开该工作簿时:

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

相关问题