[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザーフォームで動的にコマンドを追加した後の保持方法』(マナ)
ユーザーフォームでユーザーが動的に作成したコマンドをユーザーフォームを閉じた後も保持したいです。
ユーザーフォーム上には(追加)(削除)(編集)(実行)という4つのラベルがあり、(追加)のラベルを押すとインプットボックスが現れ、そのインプットボックスの入力したcaptionのcheckboxがユーザーフォーム上に追加される仕様になっています。
現在checkboxの追加をするコードは作成出来ているのですが、一度ユーザーフォームを閉じると、追加したコマンドがすべて消えてしまう状態です。
某質問掲示板なども参考にしましたが答えに至らず、ここに書かせていただきました。お時間ありましたらなにかアドバイスのほどよろしくお願いいたします。
現在のコード↓(フォーム)
Private Sub Label追加_Click()
Dim dt As Integer
kakutyoushi = ""
addkm = InputBox("追加するファイル名を入力してOKを押して下さい。", "ファイル名の末尾には拡張子も入力してください(例:ファイル名.xls)")
If Right(addkm, 4) = ".xls" Then kakutyoushi = ".xls"
ElseIf Right(addkm, 5) = ".xlsx" Then kakutyoushi = ".xlsx"
Else kakutyoushi = ""
End If
If kakutyoushi <> "" Then
dt = MsgBox(addkm & "を" & vbLf & "リストに追加しますか?", vbOKCancel, "追加項目の確認")
Else
MsgBox ("拡張子を含めた正しいファイル名を入力してください。")
GoTo shut1
End If
Select Case dt
Case vbOK
Call fileの追加
Case vbCancel
GoTo shut1
End Select
shut1:
End Sub
Private Sub fileの追加()
Static myCollection As New Collection Dim myChkBtn As MSForms.CheckBox Dim myClass As Class1 Dim myCnt Set myChkBtn = Controls.Add("Forms.CheckBox.1") myCnt = myCollection.Count With myChkBtn .Left = 18 + (myCnt \ 5) * 72 .Top = 18 + (myCnt Mod 5) * 24 .Caption = addkm End With Set myClass = New Class1 Set myClass.Btn = myChkBtn myCollection.Add myClass myCnt = myCnt + 1
End Sub
現在のコード↓(クラス)
Option Explicit
Private WithEvents myBtn As MSForms.CheckBox
Public Property Set Btn(ByVal myNewBtn As MSForms.CheckBox)
Set myBtn = myNewBtn End Property
< 使用 Excel:Excel2019、使用 OS:Windows10 >
Type myType Caption As String Value As Boolean End Type
Public ChB() As myType
'Userform1
Dim CheckBoxes() As MSForms.CheckBox
Private Sub CommandButton1_Click() Dim msg As String Dim cnt As Long Dim buf As Boolean On Error Resume Next cnt = UBound(CheckBoxes) If Err.Number = 0 Then buf = True On Error GoTo 0 If buf Then ReDim Preserve CheckBoxes(cnt + 1) ReDim Preserve ChB(cnt + 1) Else ReDim CheckBoxes(0) ReDim ChB(0) End If On Error GoTo 0 Set CheckBoxes(UBound(CheckBoxes)) = Me.Controls.Add("Forms.CheckBox.1") With CheckBoxes(UBound(CheckBoxes)) .Left = 18 + (UBound(CheckBoxes) \ 5) * 72 .Top = 18 + (UBound(CheckBoxes) Mod 5) * 24 .Caption = UBound(CheckBoxes) + 1 ChB(UBound(ChB)).Caption = .Caption End With End Sub
Private Sub UserForm_Initialize() Dim buf As Boolean Dim i As Long On Error Resume Next ReDim CheckBoxes(LBound(ChB) To UBound(ChB)) If Err.Number = 0 Then buf = True On Error GoTo 0 If buf Then For i = LBound(ChB) To UBound(ChB) Set CheckBoxes(i) = Me.Controls.Add("Forms.CheckBox.1") With CheckBoxes(i) .Left = 18 + (i \ 5) * 72 .Top = 18 + (i Mod 5) * 24 .Caption = ChB(i).Caption .Value = ChB(i).Value End With Next End If End Sub
Private Sub UserForm_Terminate() Dim i As Long On Error Resume Next For i = LBound(ChB) To UBound(ChB) ChB(i).Value = CheckBoxes(i).Value Next End Sub
ラフな試作ですが、Module1にコントロールそのものではなくコントロールに含まれる情報を保管する案です。
(めざめるパワー) 2021/09/08(水) 15:32
ユーザーフォームをいったん閉じても、再度開いたら再現する → Unloadしない ブックををいったん閉じても、再度開いたら再現する → 情報を非表示シートに保存する のかな?と思いますが、どっちでしょうか (´・ω・`) 2021/09/08(水) 17:01
余談になります。 >なにか至らない点がありましたでしょうか、、、 回答者として有名なマナさんという方がいるのでもしやと思った次第です。 回答者の方投稿者の質問内容だけ見てニックネーム見ていませんね。 ニックネーム変更した方がいいかと。 名無し () 2021/09/08(水) 22:01
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.