• 締切済み

エクセル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月のままのファイルになってしまいます。 どのようにしたら、 コンボボックスで選択した値を ファイル名として保存できるでしょうか? 全部のコードを記載しますと 長くなってしまうと思い、 関連するコードを記載して質問しました。 分かりづらい所もあるかと思いますが よろしくお願いします。

みんなの回答

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.6

標準モジュールのコード 名称 「mold」 Sub mold() でのコードを分けずに Unload UserForm1 ActiveWorkbook.Close にしたものを Private Sub CommandButton1_Click() の中に入れてしまえばいいとも思います。 別にする必要性がないような気もしますし。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.5

もし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.4

No.2の追加です。 Sub mold() に ActiveWorkbook.Close があったのを見逃してました ここは.Closeの前にUnloadを入れて Unload UserForm1 ActiveWorkbook.Close として こちらは Private Sub CommandButton1_Click() mold  End Sub のほうが気持ちがいいですね。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.3

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)
回答No.2

No1の追加です。 Unload UserForm1 mold  フォームを閉じた後にフォームを参照しているので この順番を逆にした方がいいと思います。 mold  Unload UserForm1

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

> セルにその値を入力するような Sheet1のA1に入力する場合として Private Sub CommandButton1_Click() '↓ここを追加です。 Sheets("Sheet1").Range("A1").Value = Me.ComboBox1.Value 'ユーザーフォームを閉じる Unload UserForm1 mold  '↑フォームを閉じた後に実行される標準モジュールのマクロ名です End Sub

関連するQ&A