Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


36312 / 76732 ←次へ | 前へ→

【45603】名前ボックスの表示名とActiveXオブジェクトのオブジェクト名の不一致について
質問  マンマ  - 07/1/6(土) 10:16 -

引用なし
パスワード
   はじめまして。マンマと申します。

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を使っています。ご教授を宜しくお願いします。

0 hits

【45603】名前ボックスの表示名とActiveXオブジェクトのオブジェクト名の不一致につ... マンマ 07/1/6(土) 10:16 質問
【45608】Re:名前ボックスの表示名とActiveXオブジェ... yuu1 07/1/6(土) 15:15 回答
【45609】Re:名前ボックスの表示名とActiveXオブジェ... マンマ 07/1/6(土) 15:22 お礼
【45611】Re:名前ボックスの表示名とActiveXオブジェ... ichinose 07/1/6(土) 16:49 発言

36312 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free