선택을 통해 시트의 여러 셀에 3가지 다른 매크로 구현

선택을 통해 시트의 여러 셀에 3가지 다른 매크로 구현

저는 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
    종료 조건
서브 끝

여러 셀에서 타이머를 동시에 실행하려면 훨씬 더 복잡해집니다.다른 질문.

관련 정보