[[20180308182151]] 『Nameを設定しようとすると75エラーを吐く』(名無しさん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Nameを設定しようとすると75エラーを吐く』(名無しさん)

vbcomponentsを使ってuserformのnameを変更しようとすると75エラーを吐きます。
詳細:
指定されたオブジェクトが見つかりません。
[F5を押す]
パス名が無効です。
どうすればいいのですか?
コード(sub抜き):
Dim frm As Object,add_control As Control

    Set frm = ActiveWorkbook.VBProject.VBComponents.Add(3)
    frm.Name = "Pswd_Form"
    frm.codemodule.addfromstring _
"Private Sub Cancel_Click()" & vbCrLf & "    UserForm_QueryClose False, 0" & vbCrLf & "End Sub" & vbCrLf & "Private Sub PswdView_Click()" & vbCrLf & "    If PswdView.Value Then" & vbCrLf & "        Pswd.PasswordChar = """"" & vbCrLf & "    Else" & vbCrLf & "        Pswd.PasswordChar = ""*""" & vbCrLf & "    End If" & vbCrLf & "End Sub" & vbCrLf & "Private Sub Sumbit_Click()" & vbCrLf & "    Me.MousePointer = fmMousePointerHourGlass" & vbCrLf & "    If Pswd.Value = ""asdf1225"" Then" & vbCrLf & "        MsgBox ""認証に成功しました。"", vbInformation" & vbCrLf & "        Unload Me" & vbCrLf & "    Else" & vbCrLf & "        MsgBox ""認証に失敗しました。"", vbCritical" & vbCrLf & "    End If" & vbCrLf & "    Me.MousePointer = fmMousePointerDefault" & vbCrLf & "End Sub" & vbCrLf & "Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)" & vbCrLf & "    If CloseMode = 1 Then Exit Sub" & vbCrLf & "    If MsgBox(""このまま認証のフォームを閉じるとワークブックが閉じます。"" & vbCrLf & """ & _
"本当によろしいですか?"", vbExclamation + vbOKCancel + vbDefaultButton2, ""確認"") = vbCancel Then" & vbCrLf & "        Cancel = True" & vbCrLf & "        Exit Sub" & vbCrLf & "    End If" & vbCrLf & "    Application.DisplayAlerts = False" & vbCrLf & "    Workbooks.Close" & vbCrLf & "    Application.DisplayAlerts = True" & vbCrLf & "End Sub"
    With myNewForm
       .Properties("Height") = 74.25
       .Properties("Width") = 222
       .Properties("Caption") = "認証"
    End With
    Set add_control = frm.Designer.Controls.Add("Forms.TextBox.1")
    With add_control
        .Left = 6
        .Top = 6
        .Height = 18
        .Width = 126
        .PasswordChar = "*"
    End With
    Set add_control = frm.Designer.Controls.Add("Forms.checkBox.1")
    With add_control
        .Left = 6
        .Top = 30
        .Height = 18
        .Width = 108
        .Caption = "パスワードを表示する"
    End With
    Set add_control = frm.Designer.Controls.Add("Forms.commandbutton.1")
    With add_control
        .Left = 138
        .Top = 6
        .Caption = "認証"
        .Height = 18
        .Width = 72
    End With
    Set add_control = frm.Designer.Controls.Add("Forms.commandbutton.1")
    With add_control
        .Left = 138
        .Top = 30
        .Caption = "キャンセル"
        .Height = 18
        .Width = 72
    End With

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 こちらでやってみると・・

 初回の名前設定は通りましたけど、
 2回目以降は何をやっても通してくれませんでした。

 新規ブックでやるとまた通るようになります。

 VBE側で、過去の名前を憶えていて、ダブり判定になるんじゃないですか?
 (現時点で同じ名前があるかどうかは見ていない)

(半平太) 2018/03/08(木) 19:52


 Set frm = nothing
 とか後処理しているんでしょうか?
 俗に言う幽霊ブックと同じじゃないかと。
 それでもダメなら

 for each ff in ActiveWorkbook.VBProject.VBComponents
 next

 とかで、VBComponentsの中を空回りさせてみるとか。
 スペルおよび構文、合っているのか未確認。
(BJ) 2018/03/08(木) 21:46

 下の様な単純なやつで追試したら、前に作ったUserformの名前を手動で変えて置けば
 Set Nothing の有無にかかわらずノートラブルでした。ご報告まで。

 Sub test()
     Dim frm As Object
     Set frm = ActiveWorkbook.VBProject.VBComponents.Add(3)
     frm.Name = "Pswd_Form"
     frm.codemodule.addfromstring "Sub test1()" & vbCrLf & "End Sub"
 End Sub

(半平太) 2018/03/08(木) 23:04


すいません、ブックをセーブしたら治りました。
ありがとうございました。
(名無しさん) 2018/03/09(金) 21:03

注:指定されたオブジェクトが見つかりません は最初のWithの引数のせいです。
(名無しさん) 2018/03/10(土) 12:23

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.