Excel 매크로에서 지정된 시간에 대화 상자를 표시해 봅니다.

9733 단어 VBAExcelmacro

소개



전회의 어드벤트 캘린더(크리스마스 ver.)때는, 참가해 보고 싶지만 "기술"그렇게 자세하지 않고…라고 참가를 보냈습니다. 그렇지만 완성한 책자를 보고 「좋다-멋지다」라고 생각했으므로, 이번은 과감히 참가해 보았습니다. 생각해 보니 의외로 안이 떠올랐습니다. 휴식을 촉구하는 알람을 만든다(Excel의 매크로로 지정 시간에 다이얼로그를 표시시켜 본다)의 테마로 기사를 써 갑니다.

사양



【하고 싶은 것】



휴식을 촉구하는 알람 만들기



+실장의 공부(도중부터 이쪽 메인)



【최소한】


  • 대화상자 표시
  • 지정된 시간에 대화상자 표시
  • 시간에 따라 다른 메시지 표시

  • 【+α】


  • 실행할 때 버튼 만들기
  • 누른 버튼으로 처리를 분리
  • 휴식 횟수를 기록



  • 이런 것을 만들었습니다. (실제로 만든 것)

    작업 기록



    대화상자 표시


     Msgbox ("さぁでるかな")
    

    지정된 시간에 대화상자 표시


     Application.OnTime EarliestTime:=TimeValue("17:45:55"), Procedure:="Breaktime"
    

    위의 설명에서 지정된 시간 (17:45:55)에 대화 상자를 표시하는 메서드 (Breaktime)를 실행하고 있습니다.

    시간에 따라 다른 메시지 표시





    Schejule(메소드 개시는 이쪽)
     '繰り返し処理開始
     For i = 2 To 8
      'セルの値の時間になったら"Breaktime(i, nowdate)"メソッドを実行する
      Application.OnTime EarliestTime:=shMane.Cells(i, 3).Value, Procedure:="'Breaktime " & i & "," & nowDate & "'"
     Next i
    

    Breaktime(인수는 생략)
     'ダイアログを出す(メッセージ & (改行して) & 共通質問, ボタンの種類, タイトル)
     MsgBox(shMane.Cells(i, 4) & vbNewLine & shMane.Cells(10, 4), vbYesNoCancel, shMane.Cells(i, 2))
    

    실행할 때 버튼 만들기



    (작업 절차)



    삽입 → 도형 → 좋아하는 도형을 선택 → 도형을 마우스 오른쪽 버튼으로 클릭 → 매크로 등록 → 연계시키는 방법을 선택합니다



    이런 버튼이 생긴다.

    누른 버튼으로 처리를 분리


     'はいボタン 今休憩とる
     If ans = 6 Then
      shReco.Cells(2, nowDate).Value = shReco.Cells(2, nowDate).Value + 1
    

    휴식 횟수(shReco.Cells(2, nowDate).Value)에 1을 더한다.
     'いいえボタン 今休憩とれない(再度ダイアログを表示する)
     ElseIf ans = 7 Then
      Application.OnTime Now() + TimeValue("00:10:00"), "'Breaktime " & i & "," & nowDate & "'"
    

    10분 후에 "Breaktime(i, nowdate)"메소드를 실행한다.
     'キャンセルボタン 休憩をパスする
     Else
      MsgBox shMane.Cells(12, 4), vbOKOnly, shMane.Cells(12, 2)
     End If
    

    휴식을 촉구하는 내용의 다이얼로그를 표시한다.



    휴식 횟수를 기록



    Schejule()
     '休憩回数を記録するための処理
     Dim nowDate As Integer
     nowDate = Day(Date) + 1
    
     '今日の日付の回数に0を設定する
     shReco.Cells(2, nowDate).Value = 0
    

    Breaktime()
     'はいボタン 今休憩とる
     If ans = 6 Then
      shReco.Cells(2, nowDate).Value = shReco.Cells(2, nowDate).Value + 1
    

    휴식 횟수를 0으로 설정하고,
    "예"버튼을 누르면 1을 더한다.



    계속



    월말이 되면 날짜와 횟수를 복사하여 기록에 붙여넣습니다.
    ※이력은 수동으로 붙여 넣는다.

    여기까지 대략은 완성입니다.

    집어 넣은 곳



    과제 1 메소드 호출로 인수를 건네준다


     Application.OnTime EarliestTime:=shMane.Cells(i, 3).Value, Procedure:="'Breaktime " & i & "," & nowDate & "'"
    
     Application.OnTime Now() + TimeValue("00:10:00"), "'Breaktime " & i & "," & nowDate & "'"
    

    Breaktime(i, nowdate) 라고 부르고 싶을 때는, "'Breaktime "& i & ","& nowDate & "'"라고 쓰면 좋은 것 같습니다.

    과제 2 액티브 북이 없어졌을 때를 위한 대처


     'シート名管理
     Dim shMane As Worksheet
     Set shMane = Worksheets("マクロ管理")
     'シート名管理
     Dim shReco As Worksheet
     Set shReco = Worksheets("記録")
    
     'ダイアログを出す(メッセージ+共通質問,ボタン種類,タイトル)
     ans = MsgBox(shMane.Cells(i, 4) & vbNewLine & shMane.Cells(10, 4), vbYesNoCancel, shMane.Cells(i, 2))
    

    매크로를 만들 때 문제가 없었지만,
    다른 작업을하는 동안 (매크로 움직이는 책이) 활성 책이 아니면,
    「그런 시트 없어」라고 에러가 되는 것 같습니다.
    그래서 책을 지정합니다.
     'book名管理(excelがアクティブシートじゃないときのための設定)
     Dim breakBook As Workbook
     Set breakBook = Workbooks("休憩取得効率アップツール.xlsm")
    
     'シート名管理
     Dim shMane As Worksheet
     Set shMane = breakBook.Worksheets("マクロ管理")
     'シート名管理
     Dim shReco As Worksheet
     Set shReco = breakBook.Worksheets("記録")
    
     'ここより下は変更なし
     'ダイアログを出す(メッセージ+共通質問,ボタン種類,タイトル)
     ans = MsgBox(shMane.Cells(i, 4) & vbNewLine & shMane.Cells(10, 4), vbYesNoCancel, shMane.Cells(i, 2))
    

    라고 다시 쓰면 무사히 움직였습니다. (아, 좋았다)
    완성이라고 생각해 실용하기 시작하면 이 에러가 일어나 초조했습니다(웃음)

    참고 URL


  • 대화 상자의 버튼 유형 htps //w w. 어쩌면 p. jp / 에 x 세 lv 바 / ぢ 아 g / 가 x2. HTML
  • 지정된 시간에 다이얼로그를 표시한다 htps //w w. 이미 g. t / t ch / e xv to / 0130013. HTML
  • 다이얼로그의 메세지를 개행한다 htps //w w. 오페세 p. jp / 에 x 세 lv 바 / ぢ 아 g / 가 x4. HTML
  • 지정 시간까지 매크로를 정지한다 (이번의 구현에서는 사용하고 있지 않습니다.) htps //w w. 이미 g. t / t ch / e xv to / 0130014. HTML
  • 지정 시간 후에 메소드를 실행한다 htps : // 에 x 세 l 우라. 이 m / 에 x 세 lv에 1 / 에 X 세 LV에 420. HTML
  • 북명을 설정한다 htps //w w. 어쩌면 p. jp / x vlv / boo k / x1. HTML

  • 결론



    매크로를 1부터 써보고, 조사하는 것도 포함해 즐거웠습니다.
    우선 엔트리 해 보는 것 소중하다고 생각했습니다.
    마지막으로 모든 코드를 넣어 둡니다.

    Schejule()
    'このメソッドを実行する
    Sub Schejule()
     '指定の時間にダイアログを出す(休憩を促す)
    
     '繰り返し処理のためのカウンター変数
     Dim i As Integer
    
     'シート名管理
     Dim shMane As Worksheet
     Set shMane = Worksheets("マクロ管理")
     'シート名管理
     Dim shReco As Worksheet
     Set shReco = Worksheets("記録")
    
     '休憩回数を記録するための処理
     Dim nowDate As Integer
     nowDate = Day(Date) + 1
    
     '今日の日付の回数に0を設定する
     shReco.Cells(2, nowDate).Value = 0
    
     '繰り返し処理開始
     For i = 2 To 8
      'セルの値の時間になったら"Breaktime(i, nowdate)"メソッドを実行する
      Application.OnTime EarliestTime:=shMane.Cells(i, 3).Value, Procedure:="'Breaktime " & i & "," & nowDate & "'"
     Next i
    
    End Sub
    

    Breaktime(인수는 생략)
    '"Schejule"メソッドから呼び出される
    Sub Breaktime(i As Integer, nowDate As Integer)
     'ダイアログを表示して、押したボタンによって別の処理を行う
    
     'ダイアログのどのボタンを押したかを判別するための変数
     Dim ans As Integer
    
     'book名管理(excelがアクティブシートじゃないときのための設定)
     Dim breakBook As Workbook
     Set breakBook = Workbooks("休憩取得効率アップツール.xlsm")
    
     'シート名管理
     Dim shMane As Worksheet
     Set shMane = breakBook.Worksheets("マクロ管理")
     'シート名管理
     Dim shReco As Worksheet
     Set shReco = breakBook.Worksheets("記録")
    
     'ダイアログを出す(メッセージ+共通質問,ボタン種類,タイトル)
     ans = MsgBox(shMane.Cells(i, 4) & vbNewLine & shMane.Cells(10, 4), vbYesNoCancel, shMane.Cells(i, 2))
    
     'ボタン毎の処理
     'はいボタン 今休憩とる
     If ans = 6 Then
      shReco.Cells(2, nowDate).Value = shReco.Cells(2, nowDate).Value + 1
    
     'いいえボタン 今休憩とれない(再度ダイアログを表示する)
     ElseIf ans = 7 Then
      Application.OnTime Now() + TimeValue("00:10:00"), "'Breaktime " & i & "," & nowDate & "'"
    
     'キャンセルボタン 休憩をパスする
     Else
      MsgBox shMane.Cells(12, 4), vbOKOnly, shMane.Cells(12, 2)
     End If
    
    End Sub
    

    좋은 웹페이지 즐겨찾기