Excel 매크로에서 지정된 시간에 대화 상자를 표시해 봅니다.
소개
전회의 어드벤트 캘린더(크리스마스 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
Msgbox ("さぁでるかな")
Application.OnTime EarliestTime:=TimeValue("17:45:55"), Procedure:="Breaktime"
'繰り返し処理開始
For i = 2 To 8
'セルの値の時間になったら"Breaktime(i, nowdate)"メソッドを実行する
Application.OnTime EarliestTime:=shMane.Cells(i, 3).Value, Procedure:="'Breaktime " & i & "," & nowDate & "'"
Next i
'ダイアログを出す(メッセージ & (改行して) & 共通質問, ボタンの種類, タイトル)
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
'休憩回数を記録するための処理
Dim nowDate As Integer
nowDate = Day(Date) + 1
'今日の日付の回数に0を設定する
shReco.Cells(2, nowDate).Value = 0
'はいボタン 今休憩とる
If ans = 6 Then
shReco.Cells(2, nowDate).Value = shReco.Cells(2, nowDate).Value + 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
결론
매크로를 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
Reference
이 문제에 관하여(Excel 매크로에서 지정된 시간에 대화 상자를 표시해 봅니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/co33mu/items/dd91b2d11e0cfe4e1209
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
'このメソッドを実行する
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
'"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
Reference
이 문제에 관하여(Excel 매크로에서 지정된 시간에 대화 상자를 표시해 봅니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/co33mu/items/dd91b2d11e0cfe4e1209텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)