|    | 
     タイマーの件ありがとうございました、上級者の皆さんの言っていることがレベルが高すぎてなかなか理解が難しいですが、徐々に見た目が整ってきました。 
 
 
現在までに完了しているところ、 
・今日の日付の自動取得、または任意に変更可能 
・コンボボックスで名前の取得、デフォルト設定済み 
・操作のオプションボタン、出勤、退勤、休憩入、休憩出。デフォルト設定済み 
・タイマーのリアルタイム表示 
・実行ボタンの設置(テストでテキスト出力に設定してある)→最終的にオプションボタンの内容に応じてデータをセルにセットできるようにする。 
 
 
次にやりことを書いてみます。 
出勤時刻等のラベル貼りまで完了したので、コンボボックスで名前を選択すると、それぞれのラベルにその日に打刻したデータが表示されるプログラム。 
 
例えばコンボボックスで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 
 | 
     
    
   |