VBA .AddPicture 后期绑定错误 424

VBA .AddPicture with late binding Error 424

使用下面的代码,我在 .AddPicure 行上收到 424 错误 "Object Required",如图所示。我不确定为什么 pic 被标注为对象,而 .addpicture 命令看起来完全引用了我。

抱歉代码太长,我认为最好保留所有变量。

我正在使用来自 MS Visio 16 的 Excel 13,后期绑定是必要的。

**编辑:抱歉,问题实际上是添加文本框行,我已经更新了下面的代码...

Sub testexcel()

Dim pic As Object
Dim rng As Object
Dim tWidth As Long, tHeight As Long

Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set xlWb = xlApp.workbooks.Open("C:\Users\tom\Desktop\Book1.xlsx")
Set xlWs = xlWb.sheets("Sheet1")

xlApp.ScreenUpdating = False
Set rng = xlWs.Range("B18")
Set rng2 = xlWs.Range("A1", rng.Offset(-1, -1))

picture1 = "C:\Users\tom\Desktop\PX001.bmp"

pHeight = 145
pWidth = 200
tHeight = 10
tWidth = 200
posX = 10
posY = 10


'On Error GoTo ErrMsg
With xlWs.Range("A1", rng.Offset(-1, -1))
'*******Problem on next line*******
    Set txtBx = xlWs.Shapes.AddTextbox(msoTextOrientationHorizontal, 
txtPosX, txtPosY, tWidth, tHeight).TextFrame.Characters.Text = "FooBar"
End With
'Some other code here...
End Sub

尝试拆分

Set txtBx = xlWs.Shapes.AddTextbox(msoTextOrientationHorizontal, txtPosX, txtPosY, tWidth, tHeight)
txtBx.TextFrame.Characters.Text = "FooBar"

我认为这是正在发生的事情:

xlWs.Shapes.AddTextbox(msoTextOrientationHorizontal, txtPosX, txtPosY, tWidth, tHeight).TextFrame.Characters.Text = "FooBar"

这会返回 false,因为第二个 = 被解释为比较。那么你基本上是在做 Set txtBx = False 这会导致错误。

也可能是 vba 试图将字符串 Text 属性 分配给 txtBx.

编辑:我还建议使用 Option Explicit。如果 VBA 知道 txtBx 应该是一个形状,它会告诉你它有一个类型不匹配。在这种情况下,你很幸运,因为 Set 告诉它期待一个对象并因此抛出错误。例如,如果你想分配一个字符串,你会在后面的一行得到错误(或者根本没有错误),因为你有 False 你期望的字符串会使调试更加复杂。