|
タイマーの件ありがとうございました、上級者の皆さんの言っていることがレベルが高すぎてなかなか理解が難しいですが、徐々に見た目が整ってきました。
現在までに完了しているところ、
・今日の日付の自動取得、または任意に変更可能
・コンボボックスで名前の取得、デフォルト設定済み
・操作のオプションボタン、出勤、退勤、休憩入、休憩出。デフォルト設定済み
・タイマーのリアルタイム表示
・実行ボタンの設置(テストでテキスト出力に設定してある)→最終的にオプションボタンの内容に応じてデータをセルにセットできるようにする。
次にやりことを書いてみます。
出勤時刻等のラベル貼りまで完了したので、コンボボックスで名前を選択すると、それぞれのラベルにその日に打刻したデータが表示されるプログラム。
例えばコンボボックスでAさんを選択すると、
出勤打刻されていればフォーム上のラベルのその時間をシートAさんのセルから引っ張ってきて表示する。
ここをVlookupで解決しようとしましたが訳がわからなくなってしまいました。
そもそもInitialize上で全てやろうとしているのがよくないのかも知れません。
アドバイスお願いします。
Private Sub CommandButton1_Click()
Dim sousa As String
Dim i As Integer
For i = 1 To 4
If Me.Controls("OptionButton" & i).Value = True Then
sousa = Me.Controls("optionbutton" & i).Caption
End If
Next i
MsgBox sousa
End Sub
Private Sub UserForm_Initialize()
OptionButton1.Value = True
DoLoop = True
Application.OnTime Now(), "今何時"
With ComboBox1
.AddItem "A"
.AddItem "B"
.AddItem "C"
.AddItem "D"
End With
Dim i As Long
'コンボボックスのドロップダウンリストの準備
'年:例えば1900年〜現在年まで選べるようにする。
For i = 1900 To Year(Now())
cmb年.AddItem i
Next i
'デフォルト値は現在年とする。
cmb年.ListIndex = Year(Now()) - 1900
'月:1〜12
For i = 1 To 12
cmb月.AddItem i
Next i
'デフォルト値は現在月とする。
cmb月.ListIndex = Month(Now()) - 1
'ここでもcmb月_Changeイベントが発生するので,
'そのイベント内でcmb日は年月によって準備されている。
'デフォルト値は現在日とする。
cmb日.ListIndex = Day(Now()) - 1
Dim newdate As String
'年・月・日から日付データを組み立て
newdate = Me!cmb年 & "/" & Me!cmb月 & "/" & Me!cmb日
ComboBox1.Text = ComboBox1.List(0)
'出勤時刻の検出'
Dim namae As String
namae = ComboBox1.Tex
On Error GoTo ErrHdl
With ActiveSheet
If namae = "A" Then
Label15 = _
Application.WorksheetFunction.VLookup(newdate, Range("data"), 2, False)
End If
End With
ErrHdl:
Label15 = ""
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
DoLoop = False
End Sub
Private Sub cmb月_Change()
Dim 年 As Integer
Dim 月 As Integer
Dim 日 As Integer
Dim 月末日 As Integer
Dim i As Integer
年 = cmb年.Value '選択されている年
月 = cmb月.Value '選択されている(変更された)月
日 = cmb日.ListIndex + 1 '選択されている日
Select Case 月 '選ばれた月によって日数を決定する
Case 1, 3, 5, 7, 8, 10, 12: 月末日 = 31 '大の月
Case 4, 6, 9, 11: 月末日 = 30 '小の月
Case 2 '2月のうるう年判定
If 年 Mod 400 = 0 Then '西暦が400で割り切れる年はうるう年である。
月末日 = 29
ElseIf 年 Mod 100 = 0 Then '西暦が400で割り切れない場合、
月末日 = 28 '100で割り切れる年はうるう年ではない。
ElseIf 年 Mod 4 = 0 Then '西暦が100で割り切れない場合、
月末日 = 29 '4で割り切れる年はうるう年である。
Else
月末日 = 28 '西暦が4で割り切れない場合、うるう年ではない。
End If
End Select
With cmb日 '日のコンボボックスの処理
.Clear 'いったんクリアする
For i = 1 To 月末日 '変更した月末までのリストを作る
.AddItem i
Next i
If 日 > 月末日 Then '前に選択していた日が変更した月末日を超える場合
.ListIndex = 月末日 - 1 '変更した月末に変更する
Else
.ListIndex = 日 - 1 '前に選択していた日に戻す
End If
End With
End Sub
Private Sub cmb年_Change()
If cmb月.Value = 2 Then '2月を選択していた場合
'年の変更により,うるう年で月末日が変わるか確認する
cmb月_Change '値は変えないが,Changeイベントを発生させる。
End If
End Sub
|
|