2016-06-24 8 views
0

次のコードを使用して、指定された.AddPicure行に "Object Required"という424エラーが表示されます。私はなぜ写真がオブジェクトとしてディメンション化され、.addpicture comandが私に完全に参照されるように見えるのかは分かりません。VBA .AddPicture late binding error 424

コードの長さについてお詫び申し上げます、私はすべての変数を残すことをお勧めします。

MS Visio 16からExcel 13を使用しています。レイトバインディングが必要です。

は**編集:申し訳ありませんが、それはInfactは、追加のテキストボックスのラインは私に問題を与えてthatsのですが、私は以下のコードを更新しました...

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 
+0

奇妙なことに、テキストフレームをwith句から移動すると、以下のようにうまく動作します。 txtBx.TextFrame.Characters.Text = "FooBar" – User632716

+0

「With」スコープの外に移動したのではなく、分割したからです。詳細は私の答えを見てください。 'With'スコープからコードを削除しましたか?コード内ではまったく使用しないからです。 – arcadeprecinct

答えて

1

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" 

=がintであるため、これが偽retunrs比較として解釈される。次に、あなたは基本的にエラーの原因となるSet txtBx = Falseを実行しています。

また、vbaは文字列であるTextプロパティをtxtBxに割り当てようとしている可能性があります。

編集:Option Explicitもお勧めします。 VBAがtxtBxがシェイプであるとわかっている場合は、タイプの不一致を示します。この場合、Setはオブジェクトに期待してエラーを投げたことを伝えているので、ラッキーです。たとえば、文字列を割り当てたい場合は、デバッグをより複雑にする文字列があると予想されるFalseがあるため、後の行にエラーが表示されます(またはエラーは全く発生しません)。