|
こんにちは。
>「-2147319764:'Name'メソッドは失敗しました:'ICommandButton'オブジェクト」
>というエラーが出てしまいます。
これは、以下の手順で再現できます。
新規ブック(Sheet1という名前のシートが存在するブック)
の標準モジュールに
'========================================================
Option Explicit
'========================================================
Sub test()
Call CreateDeleteButtun(1, "btnDelete" & 1)
Call CreateDeleteButtun(2, "btnDelete" & 1)
Call DeleteDeleteButton(1)
End Sub
'========================================================
Function CreateDeleteButtun(rowNum As Integer, btnName As String)
' 削除ボタンを取得
' rowNum : 行番号
' btnName : ボタン名
Dim height As Double
Dim width As Double
Dim top As Double
Dim left As Double
Dim obj As OLEObject
Dim btn As MSForms.commandButton
height = Range("T" & (rowNum) & ":" & "U" & (rowNum)).height
width = Range("T" & (rowNum) & ":" & "U" & (rowNum)).width
top = Range("T" & (rowNum) & ":" & "U" & (rowNum)).top
left = Range("T" & (rowNum) & ":" & "U" & (rowNum)).left
' ボタンを作成
Set obj = Worksheets("sheet1").OLEObjects.Add( _
ClassType:="Forms.CommandButton.1") ' ボタン名を設定
With obj
.left = left
.top = top
.width = width
.height = height
.Name = btnName
End With
Set btn = obj.Object
' 削除ボタンの属性を設定
btn.Name = btnName
btn.Caption = "削除"
btn.Font = 5
End Function
'========================================================
Function DeleteDeleteButton(btnNo As Integer)
' 削除ボタンを削除
' btnNo : 削除ボタンの番号
Worksheets("sheet1").OLEObjects("btnDelete" & btnNo).Delete
End Function
というコードで再現できます。
尚、「ツール」---「参照設定」で「Microsoft Forms 2.0 Object Library」
にチェックを入れて下さい。
これらの準備を行った後、
1.プロシジャーtestを実行してください。
Sheet1の2行目のT列〜U列にかけて、コマンドボタンが作成されます。
2.再度、プロシジャーtestを実行してください。
「-2147319764:'Name'メソッドは失敗しました:'ICommandButton'オブジェクト」 というエラーが発生し、プログラムは中断してしまいます。
(尚、デバッグ不可です)。
上記の操作で問題のエラーが再現できます。
エラーは、
CreateDeleteButtunファンクションプロシジャーの
btn.Name = btnName
この箇所で発生していると思われます。
原因として考えられるのは、既に存在しているオブジェクト名を別の
コマンドボタンに命名しようとした事が起因しています。
このようなコードが本来のマンマさんコードでも行われていませんか??
解決策は、もっと仕様をお聞きしなくてははっきりしたこといえませんが、
既に投稿されているような「コントロールの動的な作成を行わない」は
他の問題のことも考えると良いことですね!!
後は。コマンドバー「フォーム」のボタンで代替する方法も考えられます。
この手の問題は、再現できないと意味が無い というのが
私の意見です。よって、解決後ですが、投稿しました。
|
|