VBA - 写入参数时的错误处理

VBA - Error handling with writing the arguments

你好友好的人。我会尽可能具体。问题如下:

为什么第一行在 VBE 立即数 window 中起作用,而第二行却不起作用? 我怎样才能使第二行工作?

err.Raise 999,,"EA"
err.Raise err.Number:= 999,err.Description:= "EA"

不要在你的调用中引用 err.X,只需设置 X:=...:

err.Raise Number:=999, Description:= "EA"

err 是实际错误 object,对于 .Raise 方法,您正在提供参数。这个错误与它在直接 window 中无关 - 它也不会在模块中工作,因为语法错误。

如果您按预期顺序提供所有参数 - 则无需指定参数的 header 信息:

例如Workbook.SaveAs() 方法

.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)

你可以这样写:

wb.SaveAs "myFile.xlsx", xlOpenXMLWorkbook, "Password123", "Passsword123", True,,,,,,,,

但是如果你想跳过中间的一些内容而不是到处都是逗号(这样可以提高可读性),你可以这样做:

wb.SaveAs FileName:="myFile.xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False, Local:=True

继续此示例,您所做的是 re-reference object 并尝试访问尚不存在的 属性:

wb.SaveAs wb.FileName:="myFile.xlsx", wb.FileFormat:=xlOpenXMLWorkbook

如果您正在访问 object 的 属性,则您正在 阅读写作 to/from 那 属性.

  • myVariable = wb.Name(阅读)
  • wb.Name = myVariable(写入)

这两个操作都使用 = 运算符。

在您编写 err.Number:=999 的地方,编译器期望使用 = 运算符进行 read/write 操作,这就是导致错误的原因。

希望解释得更详细一点。