プロが教えるわが家の防犯対策術!

VBAでコンボボックスで選択した月のシートが
アクティブ状態(選択された)にしたいです。

例えばプルダウンで「10」を選んだら「10」のシートが選択された状態になるようにしたいです。

※後々やりたいこととしては、10月のシートのそれぞれのセルに、ユーザーフォームのテキストボックスで登録かけた10月の勤怠時間が入る。
その逆も同様で、画像のユーザーフォームで10月を選んだら10月の勤怠情報がそれぞれのテキストボックスに表示されるようにしたいと考えています。

Private Sub UserForm_Initialize()

'年を設定
cmbYear.AddItem "2021"
cmbYear.AddItem "2022"
cmbYear.AddItem "2024"
cmbYear.AddItem "2028"

'当年を初期設定←とりあえず先頭
cmbYear.ListIndex = 0


'月を設定
cmbMonth.AddItem "1"
cmbMonth.AddItem "2"
cmbMonth.AddItem "3"
cmbMonth.AddItem "4"
cmbMonth.AddItem "5"
cmbMonth.AddItem "6"
cmbMonth.AddItem "7"
cmbMonth.AddItem "8"
cmbMonth.AddItem "9"
cmbMonth.AddItem "10"
cmbMonth.AddItem "11"
cmbMonth.AddItem "12"

End Sub

「コンボボックスとエクセルシートの連携 (」の質問画像

A 回答 (2件)

こんばんは



すみませんが、直接の回答ではありません。

>後々やりたいこととしては、~~
失礼ながら、それってシートと同じものをフォームに移し替えようとしているだけのように思えますけれど・・・
(若干の操作の違いがあるかもですが)
「労多くして功少なし」になっていませんか?

将来、ちょっとした変更や修正が必要になった時のことも考えると・・・


はた目からの感覚で勝手なことを言って、大変申し訳ないですが、
同じ、VBAを利用するにしても、例えば、ブックを開いたらその日の(その月の)シートを自動で開くようにしておけば、ほぼなんとかなりそうな気がしますけれど・・
    • good
    • 3
この回答へのお礼

確かに立ち上がり時に月判定してそのシートが開くように
出来るのが理想ではありますね・・!
アドバイスありがとうございます!

お礼日時:2021/10/12 22:24

こんばんは


ユーザーフォームを使用する目的も色々あると思いますので良いのですが
目的を果たすためにはExcelを非表示にしたりするのでしょうか、、、
まだ、先が長そうですが、、とりあえず ご質問の回答を、、

実行ボタンを押した時にすべてを処理する場合、余計な処理時間が必要になりますので先に取得できる事や処理は済ませた方が良いと思います。

ComboBoxには色々なイベントトリガーがあります。
参考サイト MyRecord 業務の効率化に役立つ情報
https://kosapi.com/post-4111/

この場合は、Change とか Exit になるかな?

Exitの例
Private Sub cmbMonth_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Worksheets(cmbMonth.Text).Select
End Sub

Changeの例
Private Sub cmbMonth_Change()
On Error Resume Next
Worksheets(cmbMonth.Text).Select
End Sub
.Select をやめ オブジェクトにSet するとかでもいいかな

以下はご質問に無い部分ですが、、 
'月を設定 (シート名が半角数字の場合)
Dim i As Integer
For i = 1 To 12
cmbMonth.AddItem i
Next

こんな感じで出来るかと、、、多くのコントロール(TextBoxなど)を使う場合のテクニックも必要になると思います。頑張って

これも関係ないかも知れませんが、ユーザーフォームを使用せず
運用者に余計な操作をさせない方法は、リボンをカスタマイズ(既存のものを排除)してオリジナルのボタン、コンボボックスなどを作成しシートを制限すれば出来ます。とっつき悪く情報も少ないですが、なれるとユーザーフォームを作るより簡単かもしれません。(ただし、バージョン問題が付きまといますが)
    • good
    • 1
この回答へのお礼

ありがとうございます・・!!
理想の動きになりました・・!!

今回の課題は解決しましたがご回答の本文にありましたので一応補足すると、エクセルシートはApplication.Visible = Falseで非表示になる設定にしています!
勤怠登録する際には基本的にシートが見えないようにしています。

お礼日時:2021/10/12 22:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!