Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2016)
コードでユーザーフォームを作成して名前を付けるときにエラー
投稿日時: 20/03/07 09:46:59
投稿者: nooooboooo

お世話になります。
色々調べてみましたが解決できず、質問を投稿させていただきます。
 
下記のコードでフォームを作成する際に、エクセルファイルを起動して初回はフォームの名前の設定までうまくいくのですが、作成したフォーム("テストフォーム1")を解放したあとに同様のコードで再度フォーム作成しようとすると、
『.name = "テストフォーム1"』の行で、
『実行時エラー '75':指定されたオブジェクトは見つかりません』
とエラーが出てしまい、フォーム名のname設定が上手くいきません。
 
『.name = "テストフォーム1"』を『.name = "テストフォーム2"』などに変更すると名前設定までうまくいきますので、フォームを解放してもフォーム名の何らかの情報が残っているからエラーがでるのか、などと愚考しておりますが、これ以上分からず悩んでおります。
 
どなたかお詳しい方がおられましたら、ご教示賜れませんでしょうか。
よろしくお願いいたします。
 
Sub フォーム作成()
    Dim myNewForm
    Set myNewForm = ActiveWorkbook.VBProject.VBComponents.Add(ComponentType:=3)
    With myNewForm
      .name = "テストフォーム1"
       .Properties("Height") = 500
       .Properties("Width") = 900
       .Properties("Caption") = "テストフォーム1"
    End With
End Sub

回答
投稿日時: 20/03/07 10:21:48
投稿者: simple

UserFormNとNをカウントアップして別々のオブジェクトを自動生成しているのに、
異なるオブジェクトに、同一のオブジェクト名をつけようとしているからでしょう。

回答
投稿日時: 20/03/07 12:51:49
投稿者: MMYS

nooooboooo さんの引用:
作成したフォーム("テストフォーム1")を解放したあとに同様のコードで再度フォーム作成しようとすると、

simple さんの引用:
UserFormNとNをカウントアップして別々のオブジェクトを自動生成しているのに、
異なるオブジェクトに、同一のオブジェクト名をつけようとしているからでしょう。

オブジェクトを解放したあとなら、同一のオブジェクト名は関係ないはずかと。
 
 
当方でもためして見たところエラー内容は違いますが、出来ません。
コードではなく、手作業でも同様です。
 
手作業でユーザーフォームを挿入
オブジェクト名を「テストフォーム1」に手作業で変更
「テストフォーム1」を手作業で開放
開放後、再度上記を行うとエラーで出来ません。
 
ただし、当方の環境だとエラー内容が
「パスが無効です。」
となります。なので上書き保存すると出来るようになります。
 
 

投稿日時: 20/03/07 16:04:22
投稿者: nooooboooo

simple様、MMYS様 ご回答ありがとうございます。
 
気付いておりませんでしたが、MMYS様にご指摘いただいた通り、手作業でも解放したフォームと同一名のフォームは命名できず、一度上書き保存すると命名できるようになるようですね。
そういう仕様としてあきらめるべきなのかもしれませんが、もし原因をご存じの方がいれば引き続きご教示いただけますと幸いです。

投稿日時: 20/03/10 00:40:16
投稿者: nooooboooo

ご回答ありがとうございました。