
저는 Excel과 Vba 모두에 능숙하며 StartBtn, StopBtn 및 ResetBtn 세 개의 버튼을 클릭할 때 발생하는 타이머와 셀 색상 변경을 제공할 수 있는 코드를 만들려고 노력하고 있습니다. 지금은 단일 셀 B3에서 작동하는 코드를 얻었지만 클릭한 시트의 모든 셀에서 작동하려면 버튼이 필요합니다. 저는 아래에 코드를 붙여넣고 있습니다. 여러분이 친절하게도 코드를 살펴보고 이 혼란스러운 멍청한 놈을 저장해 주기를 바랍니다.
암호:
Dim StopTimer As Boolean
Dim SchdTime As Date
Dim Etime As Date
Const OneSec As Date = 1 / 86400#
Private Sub StartBtn_Click()
Range("B3").Interior.ColorIndex = 6
StopTimer = False
SchdTime = Now()
[B3].Value = Format(Etime, "hh:mm:ss")
Application.OnTime SchdTime + OneSec, "Sheet1.NextTick"
End Sub
Private Sub ResetBtn_Click()
Range("B3").Interior.ColorIndex = -4142
StopTimer = True
Etime = 0
[B3].Value = "00:00:00"
End Sub
Private Sub StopBtn_Click()
Range("B3").Interior.ColorIndex = 4
StopTimer = True
Beep
End Sub
Sub NextTick()
If StopTimer Then
'Don't reschedule update
Else
[B3].Value = Format(Etime, "hh:mm:ss")
SchdTime = SchdTime + OneSec
Application.OnTime SchdTime, "Sheet1.NextTick"
Etime = Etime + OneSec
End If
End Sub
답변1
Excel에서는 다음을 사용할 수 있습니다.선택워크시트에서 선택되었거나 활성화된 항목을 처리하는 속성입니다.
selection
그러나 코드가 더 복잡해지고 다음을 사용 하면 나중에 문제가 발생할 수 있습니다.대개최선의 방법은 아닙니다.
답변2
Selection
전체 코드에서 사용하는 대신 Selection
를 호출할 때 현재 선택된 셀을 식별하고 StartBtn
해당 위치를 저장한 다음 다른 루틴에서 사용하는 것이 좋습니다. 예:
Dim StopTimer를 부울로 사용 Dim SchdTime을 날짜로 표시 날짜로 희미한 Etime Dim SavedLoc를 변형으로 사용 ' 여기 Const OneSec As Date = 1 / 86400# 비공개 구독 StartBtn_Click() Selection.Count <> 1인 경우 MsgBox "단일 셀을 선택해주세요." 하위 종료 종료 조건 SavedLoc = 선택.주소 ' 여기 범위(SavedLoc).Interior.ColorIndex = 6 ' 여기 StopTimer = 거짓 SchdTime = 지금() 범위(SavedLoc).Value = Format(Etime, "hh:mm:ss") ' 여기서 Application.OnTime SchdTime + OneSec, "NextTick" 서브 끝 비공개 구독 ResetBtn_Click() 범위(SavedLoc).Interior.ColorIndex = -4142 ' 여기 StopTimer = 참 시간 = 0 범위(SavedLoc).Value = "00:00:00" ' 여기 SavedLoc = 널 ' 여기 서브 끝 개인 정류장Btn_Click() 범위(SavedLoc).Interior.ColorIndex = 4 ' 여기 StopTimer = 참 SavedLoc = 널 ' 여기 삑 하는 소리 서브 끝 하위 NextTick() StopTimer라면 '업데이트 일정을 변경하지 마세요. 또 다른 범위(SavedLoc).Value = Format(Etime, "hh:mm:ss") ' 여기서 SchdTime = SchdTime + 1초 Application.OnTime SchdTime, "NextTick" Etime = Etime + 1Sec 종료 조건 서브 끝
여러 셀에서 타이머를 동시에 실행하려면 훨씬 더 복잡해집니다.다른 질문.