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
你期望的字符串会使调试更加复杂。
使用下面的代码,我在 .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
你期望的字符串会使调试更加复杂。