Excel VBA質問箱 IV

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

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


36310 / 76738 ←次へ | 前へ→

【45611】Re:名前ボックスの表示名とActiveXオブジェクトのオブジェクト名の不一致について
発言  ichinose  - 07/1/6(土) 16:49 -

引用なし
パスワード
   こんにちは。

>「-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
 
この箇所で発生していると思われます。
原因として考えられるのは、既に存在しているオブジェクト名を別の
コマンドボタンに命名しようとした事が起因しています。

このようなコードが本来のマンマさんコードでも行われていませんか??


解決策は、もっと仕様をお聞きしなくてははっきりしたこといえませんが、
既に投稿されているような「コントロールの動的な作成を行わない」は
他の問題のことも考えると良いことですね!!

後は。コマンドバー「フォーム」のボタンで代替する方法も考えられます。

この手の問題は、再現できないと意味が無い というのが
私の意見です。よって、解決後ですが、投稿しました。
4 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 発言

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