|
はじめまして。マンマと申します。
VBAを使って顧客の売上管理が出来るシステムを作っているのですが。
コーディングしている際にどうしても理解出来ない疑問点が出てきまして、
もし分かる方いらっしゃればご教授願います。
売上一覧の行毎に削除ボタンを置いておりまして、画面上のデータを更新する度に
「削除ボタンを全部削除」→「削除ボタンを再作成」という処理を
行っています。
ボタン作成の流れは以下のようになります。
OLEObjects.Addメソッドを利用してオブジェクトを作成し、作成したオブジェクト
をOLEObjectクラスの変数に代入し、OLEObjectのNAMEプロパティを変更し、その後OLEObjectをCommandButtonクラスの変数に代入し、CommandButtonのNAMEプロパティを変更する。
作成処理は以下のFunctionを利用しています。
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 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("売上情報").OLEObjects.Add( _
ClassType:="Forms.CommandButton.1", _
Link:=True, _
DisplayAsIcon:=False, _
left:=left, _
top:=top, _
width:=width, _
height:=height)
' ボタン名を設定
obj.Name = btnName
Set btn = obj.Object
' 削除ボタンの属性を設定
btn.Name = btnName
btn.Caption = "削除"
btn.Font = 5
End Function
削除処理は以下のFunctionで行っています。
Function DeleteDeleteButton(btnNo As Integer)
' 削除ボタンを削除
' btnNo : 削除ボタンの番号
Worksheets("売上情報").OLEObjects("btnDelete" & btnNo).Delete
End Function
これらのボタンの作成、削除処理を繰り返すと、
「-2147319764:'Name'メソッドは失敗しました:'ICommandButton'オブジェクト」
というエラーが出てしまいます。またエラーが出ずに処理が行えた場合でも、
名前ボックスの表示名は指定したボタン名になっているが、コントロールのオブジェクト
名はCommandButton1(デフォルト)のままであったりといった不具合が起こっています。
ネットで色々調べていたのですが、OLEオブジェクトのADDオブジェクトを使う際は、
変数がクリアされる、名前ボックスの表示名とコントロールのオブジェクト名
(ソースコード名?)が一致しない等色々な問題が載っていました。
しかし、自分ではどの不具合に当たるの分かりません。
EXCELは2003を使っています。ご教授を宜しくお願いします。
|
|