- 締切済み
エクセルVBAのユーザーフォームのコンボボックス
エクセルVBAのユーザーフォームのコンボボックスの入力と ファイルの保存で質問です。 エクセルVBAで ユーザーフォームのコンボボックスを使用して 1月から12月までを選択してもらい、 選択した月を コマンドボタン押した際に、 セルにその値を入力するような マクロを作成しようとしています。 またコンボボックスは標準で6月が表示されるようにしたいと思います。 ユーザーフォームのコードの一部です。 Private Sub UserForm_Initialize() Dim m As Integer For m = 1 To 12 UserForm1.ComboBox1.AddItem m Next ComboBox1.ListIndex = 6 Private Sub CommandButton1_Click() 'ユーザーフォームを閉じる Unload UserForm1 mold '↑フォームを閉じた後に実行される標準モジュールのマクロ名です End Sub 標準モジュールのコード 名称 「mold」 Sub mold() ActiveWorkbook.SaveAs _ Filename:="C:\_" & UserForm1.ComboBox1.Text & "月", _ FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close ThisWorkbook.Activate ' End Sub の様に作成して実行してみたのですが、 コンボボックスで11月を選択しても 6月のままのファイルになってしまいます。 どのようにしたら、 コンボボックスで選択した値を ファイル名として保存できるでしょうか? 全部のコードを記載しますと 長くなってしまうと思い、 関連するコードを記載して質問しました。 分かりづらい所もあるかと思いますが よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- kkkkkm
- ベストアンサー率66% (1719/2589)
標準モジュールのコード 名称 「mold」 Sub mold() でのコードを分けずに Unload UserForm1 ActiveWorkbook.Close にしたものを Private Sub CommandButton1_Click() の中に入れてしまえばいいとも思います。 別にする必要性がないような気もしますし。
- HohoPapa
- ベストアンサー率65% (455/693)
もしUnLoadを提示されたタイミングで実行する必要があるのであれば、 私だったら、後記のようなコードにします。 Private Sub CommandButton1_Click() Dim Tuki As String Tuki = UserForm1.ComboBox1.Text Unload UserForm1 mold Tuki End Sub Sub mold(Tuki As String) Workbooks.Add ActiveWorkbook.SaveAs _ Filename:="C:\work\" & Tuki & "月", _ FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close ThisWorkbook.Activate ' End Sub
- kkkkkm
- ベストアンサー率66% (1719/2589)
No.2の追加です。 Sub mold() に ActiveWorkbook.Close があったのを見逃してました ここは.Closeの前にUnloadを入れて Unload UserForm1 ActiveWorkbook.Close として こちらは Private Sub CommandButton1_Click() mold End Sub のほうが気持ちがいいですね。
- HohoPapa
- ベストアンサー率65% (455/693)
Unload UserForm1 このコードが実行された後で、 ActiveWorkbook.SaveAs _ Filename:="C:\_" & UserForm1.ComboBox1.Text & "月", _ FileFormat:=xlOpenXMLWorkbook このコードが実行されることが原因と思います。 UserForm1をUnloadすることで メモリー空間からUserForm1が消滅し、 その後 ActiveWorkbook.SaveAs _ Filename:="C:\_" & UserForm1.ComboBox1.Text & "月", _ FileFormat:=xlOpenXMLWorkbook が実行される。つまり、UserForm1が呼び出されるので、 UserForm1が改めて創成され Private Sub UserForm_Initialize() これ以下が実行される。 という動作。 言い換えれば ・UserForm1を削除して ・UserForm1を呼び出すので ・UserForm1が創成され ・UserForm_Initializeのイベントが起き ・ComboBox1.ListIndex = 6 が実行される。 ということと思います。 私だったら Unload UserForm1 ではなく、 UserForm1.Hide を使います。 これなら、UserForm1が非表示になるだけで 消滅しませんから。
- kkkkkm
- ベストアンサー率66% (1719/2589)
No1の追加です。 Unload UserForm1 mold フォームを閉じた後にフォームを参照しているので この順番を逆にした方がいいと思います。 mold Unload UserForm1
- kkkkkm
- ベストアンサー率66% (1719/2589)
> セルにその値を入力するような Sheet1のA1に入力する場合として Private Sub CommandButton1_Click() '↓ここを追加です。 Sheets("Sheet1").Range("A1").Value = Me.ComboBox1.Value 'ユーザーフォームを閉じる Unload UserForm1 mold '↑フォームを閉じた後に実行される標準モジュールのマクロ名です End Sub