Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4377 / 76734 ←次へ | 前へ→

【77980】再び質問
質問  勤怠システムを自作したい  - 16/2/22(月) 14:34 -

引用なし
パスワード
   タイマーの件ありがとうございました、上級者の皆さんの言っていることがレベルが高すぎてなかなか理解が難しいですが、徐々に見た目が整ってきました。


現在までに完了しているところ、
・今日の日付の自動取得、または任意に変更可能
・コンボボックスで名前の取得、デフォルト設定済み
・操作のオプションボタン、出勤、退勤、休憩入、休憩出。デフォルト設定済み
・タイマーのリアルタイム表示
・実行ボタンの設置(テストでテキスト出力に設定してある)→最終的にオプションボタンの内容に応じてデータをセルにセットできるようにする。


次にやりことを書いてみます。
出勤時刻等のラベル貼りまで完了したので、コンボボックスで名前を選択すると、それぞれのラベルにその日に打刻したデータが表示されるプログラム。

例えばコンボボックスで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

4 hits

【77980】再び質問 勤怠システムを自作したい 16/2/22(月) 14:34 質問[未読]
【77983】Re:再び質問 ichinose 16/2/23(火) 8:28 発言[未読]
【77984】Re:再び質問 勤怠システムを自作したい 16/2/23(火) 12:06 発言[未読]
【77985】Re:再び質問 β 16/2/23(火) 19:24 発言[未読]
【77986】Re:再び質問 β 16/2/23(火) 19:52 発言[未読]
【77987】Re:再び質問 yuto 16/2/23(火) 20:16 発言[未読]
【77991】Re:再び質問 ichinose 16/2/24(水) 6:55 発言[未読]
【77992】Re:再び質問 β 16/2/24(水) 7:36 発言[未読]
【77993】Re:再び質問 勤怠システムを自作したい 16/2/24(水) 11:53 質問[未読]
【77994】Re:再び質問 ichinose 16/2/25(木) 2:11 発言[未読]
【78000】Re:再び質問 ichinose 16/2/28(日) 15:46 発言[未読]
【77999】Re:再び質問 β 16/2/27(土) 19:59 発言[未読]

4377 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free