Excel VBA의 OnClick
"VBA" "VBA" "VBA" "VBA" "VBA" "VBA" "VBA" "VBA"?저는 이 문제를 언급하는 것이 아닙니다.Worksheet_SelectionChange
이벤트(셀을 여러 번 클릭해도 여러 번 트리거되지 않습니다). BeforeDoubleClick
사용자에게 더블클릭을 자주 시키고 싶지 않기 때문에 문제는 해결되지 않습니다.
사용하고 있는 은 the the the the the the the the 에서 동작하고 .SelectionChange
이벤트. 단, 글로벌 변수 및 기타 차선의 코딩 방법을 사용해야 하는 것으로 보입니다. 에러가 것 같습니다.
확실히 완벽한 답은 없다.단, 사용자가 다음 작업을 수행할 수 있도록 허용하려면
- 특정 세포를 선택하다
- 세포들을 바꾸게 하고
- 한 번 클릭할 때마다 같은 세포에서 반복 클릭을 해도
가장 쉬운 방법은 선택한 셀에서 포커스를 이동하여 클릭하면 Select 이벤트가 트리거되도록 하는 것입니다.
한 가지 옵션은 위에서 제안한 대로 포커스를 이동하는 것이지만, 셀 편집을 방해합니다.다른 옵션은 셀을 한 개(왼쪽/오른쪽/위/아래쪽)만 연장하는 것입니다. 이렇게 하면 원래 셀을 편집할 수 있지만 셀이 단독으로 다시 클릭되면 Select 이벤트가 트리거됩니다.
셀의 단일 열 선택만 트랩하려면 오른쪽에 숨겨진 열을 삽입하고 사용자가 클릭할 때 숨겨진 셀을 포함하도록 선택 영역을 확장하면 클릭할 때마다 트랩할 수 있는 편집 가능한 셀이 제공됩니다.코드는 다음과 같습니다.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'prevent Select event triggering again when we extend the selection below
Application.EnableEvents = False
Target.Resize(1, 2).Select
Application.EnableEvents = True
End Sub
같은 셀에서 반복 클릭을 트랩하려면 포커스를 다른 셀로 이동해야 합니다.따라서 클릭할 때마다 실제로 선택 영역을 이동해야 합니다.
아래 코드는 셀을 클릭하면 화면에 표시되는 왼쪽 상단 셀을 선택합니다.왼쪽 위 셀을 클릭하는 것만으로 트랩할 수 없다는 단점이 있는 것은 분명하지만, 이 단점은 관리할 수 있습니다(예를 들어 액티브 셀이 왼쪽 위일 경우 오른쪽 위 셀을 선택하는 것).
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'put your code here to process the selection, then..
ActiveWindow.VisibleRange.Cells(1, 1).Select
End Sub
Selection Change는 이를 위해 Excel 객체 모델에 내장된 이벤트입니다.원하는 대로 작동하며 사용자가 아무 곳이나 클릭할 때마다 부팅됩니다.
글로벌 변수에 대한 당신의 반대 의견을 이해할 수 있을지 모르겠습니다.어플리케이션을 사용하는 경우 1개만 필요합니다.Selection Change 이벤트.그러나 워크북 뒤에 있는 워크북 클래스 코드를 활용하면(워크북을 함정에 빠뜨리는 데) 아무것도 필요하지 않습니다.SelectionChange 이벤트) 또는 워크시트 클래스 코드 뒤에 있는(워크시트를 트랩합니다).Selection Change) 이벤트(VBA의 "글로벌 변수 리셋" 문제가 아닌 한 해결 방법은 모든 곳에서 오류 처리뿐입니다.처리되지 않은 오류는 허용하지 말고 로그 기록하거나 사용자에게 메시지 상자로 오류를 "소프트 리포트"하십시오.)
워크시트를 고정해야 할 수도 있습니다.Activate() 및 워크시트.이벤트(또는 워크북클래스의 동등한 이벤트) 및/또는 워크북을 비활성화합니다.활성화 및 워크북.사용자가 워크시트나 워크북을 전환한 시기를 알 수 있도록 이벤트를 비활성화()합니다.Window 활성화 및 비활성화 이벤트를 통해 이 접근 방식이 완료되어야 합니다.모두 같은 순서를 호출할 수 있지만, 모두 같은 것을 나타냅니다.사용자가 「포커스」를 변경했습니다.
VBA가 마음에 들지 않으면 VB를 사용하여 동일한 작업을 수행할 수 있습니다.NET 또는 C#.
[편집: Dbb는 Selection Change 이벤트가 사용자가 현재 선택한 셀 내에서 클릭할 때 클릭하지 않는 것을 매우 잘 지적합니다.그것을 선택할 필요가 있는 경우는, 서브 분류를 사용할 필요가 있습니다.]
난 그렇게 생각 안 해.단, 쉐이프 오브젝트(또는 wordart 또는 유사한 것)를 작성할 수 있습니다.이벤트를 클릭하여 지정된 셀의 위치에 오브젝트를 배치합니다.
이건 나한테 효과가 있었어...
Private Sub Worksheet_Change(ByVal Target As Range)
If Mid(Target.Address, 3, 1) = "$" And Mid(Target.Address, 2, 1) < "E" Then
' The logic in the if condition will filter for a specific cell or block of cells
Application.ScreenUpdating = False
'MsgBox "You just changed " & Target.Address
'all conditions are true .... DO THE FUNCTION NEEDED
Application.ScreenUpdating = True
End If
' if clicked cell is not in the range then do nothing (if condttion is not run)
End Sub
메모: 이 함수는 사용자가 A4 ~ D500의 데이터 범위에서 항목을 추가할 경우 피벗 테이블을 재계산합니다.시트에 보호된 섹션과 보호되지 않은 섹션이 있으므로 클릭 시 실제로 확인할 수 있는 것은 열이 "E"보다 작은지 여부입니다. 로직은 원하는 수의 영역을 포함하거나 제외할 수 있습니다.
block1 = row > 3 and row < 5 and column column >"b" and < "d"
block2 = row > 7 and row < 12 and column column >"b" and < "d"
block3 = row > 10 and row < 15 and column column >"e" and < "g"
If block1 or block2 or block 3 then
do function .....
end if
비슷한 문제가 발생하여 매크로 "onTime"을 실행하고 사용자가 클릭을 멈춘 후에만 실행하는 일부 글로벌 변수를 사용하여 수정했습니다.
Public macroIsOnQueue As Boolean
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
macroIsOnQueue = False
Application.OnTime (Now() + TimeValue("00:00:02")), "addBordersOnRow"
macroIsOnQueue = True
End sub
Sub addBordersOnRow()
If macroIsOnQueue Then
macroIsOnQueue = False
' add code here
End if
End sub
따라서 사용자가 2초 이내에 선택을 변경할 때마다 macroIsOnQueue 변수는 false로 설정되지만 마지막 선택 내용이 변경되고 macroIsOnQueue가 true로 설정되며 매크로가 실행됩니다.
이것이 도움이 되기를 바랍니다, VBA와 즐거운 시간 보내세요!!
dbb가 수락한 답변에 대한 후속 조치: 선택 항목에 오른쪽에 있는 셀을 바로 추가하는 것이 아니라 작업 범위(사용자가 필요로 하지 않는다는 것을 알고 있는 더미 셀)을 선택하는 것이 좋습니다.다음 코드 셀에서ZZ1
더미 셀입니다
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
Union(Target, Me.Range("ZZ1")).Select
Application.EnableEvents = True
' Respond to click/selection-change here
End Sub
언급URL : https://stackoverflow.com/questions/178738/onclick-in-excel-vba
'it-source' 카테고리의 다른 글
Mac OS X(iTerm)에서 zsh를 로그인 셸로 실행하는 방법 (0) | 2023.04.16 |
---|---|
SQL 서버를 사용하여 문자열을 잘라내는 방법 (0) | 2023.04.16 |
개별 스레드에 WPF 창을 만들고 표시하려면 어떻게 해야 합니까? (0) | 2023.04.16 |
WPF GUI 애플리케이션을 닫는 올바른 방법:Get Current Process().Kill() , Environment.exit(0) 또는 this.셧다운() (0) | 2023.04.16 |
탭을 클릭하면 셸 초기화 문제가 발생합니다.getcwd의 문제점은 무엇입니까? (0) | 2023.04.16 |