클릭 후 VBA Excel 버튼 크기 조정(명령 버튼)
단추 크기 조정을 중지하려면 어떻게 해야 합니까?단추를 클릭할 때마다 단추 크기 또는 글꼴 크기가 변경됩니다.
참고: 매크로가 시트에 쓰기 때문에 시트를 잠글 수 없습니다.
자동 크기가 해제되었습니다.Windows 7(64비트)에서 Excel 2007을 실행합니다.
ListBox에는 다음을 사용합니다.버튼에도 동일한 원리가 적용됩니다. 필요에 따라 조정합니다.
Private Sub myButton_Click()
Dim lb As MSForms.ListBox
Set lb = Sheet1.myListBox
Dim oldSize As ListBoxSizeType
oldSize = GetListBoxSize(lb)
' Do stuff that makes listbox misbehave and change size.
' Now restore the original size:
SetListBoxSize lb, oldSize
End Sub
이는 다음 유형 및 절차를 사용합니다.
Type ListBoxSizeType
height As Single
width As Single
End Type
Function GetListBoxSize(lb As MSForms.ListBox) As ListBoxSizeType
GetListBoxSize.height = lb.height
GetListBoxSize.width = lb.width
End Function
Sub SetListBoxSize(lb As MSForms.ListBox, lbs As ListBoxSizeType)
lb.height = lbs.height
lb.width = lbs.width
End Sub
나는 몇 가지 코드를 끝에 추가했습니다.onClick
따라서:
CommandButton1.Width = 150
CommandButton1.Height = 33
CommandButton1.Font.Size = 11
효과가 있는 것 같습니다.
저는 그 문제를 약간 다른 방법으로 이해했습니다.기본 노트북 디스플레이에서 워크북을 연 다음 큰 모니터로 이동합니다.내가 생각하는 근본 원인과 같습니다.
이 문제는 Excel 2007, 2010 및 2013에서 확인되었습니다.
이 코드는 문제가 나타나지 않도록 방지합니다.활성 X 개체가 활성화될 때마다 코드가 실행되어야 합니다.
Sub Shared_ObjectReset()
Dim MyShapes As OLEObjects
Dim ObjectSelected As OLEObject
Dim ObjectSelected_Height As Double
Dim ObjectSelected_Top As Double
Dim ObjectSelected_Left As Double
Dim ObjectSelected_Width As Double
Dim ObjectSelected_FontSize As Single
ActiveWindow.Zoom = 100
'OLE Programmatic Identifiers for Commandbuttons = Forms.CommandButton.1
Set MyShapes = ActiveSheet.OLEObjects
For Each ObjectSelected In MyShapes
'Remove this line if fixing active object other than buttons
If ObjectSelected.progID = "Forms.CommandButton.1" Then
ObjectSelected_Height = ObjectSelected.Height
ObjectSelected_Top = ObjectSelected.Top
ObjectSelected_Left = ObjectSelected.Left
ObjectSelected_Width = ObjectSelected.Width
ObjectSelected_FontSize = ObjectSelected.Object.FontSize
ObjectSelected.Placement = 3
ObjectSelected.Height = ObjectSelected_Height + 1
ObjectSelected.Top = ObjectSelected_Top + 1
ObjectSelected.Left = ObjectSelected_Left + 1
ObjectSelected.Width = ObjectSelected_Width + 1
ObjectSelected.Object.FontSize = ObjectSelected_FontSize + 1
ObjectSelected.Height = ObjectSelected_Height
ObjectSelected.Top = ObjectSelected_Top
ObjectSelected.Left = ObjectSelected_Left
ObjectSelected.Width = ObjectSelected_Width
ObjectSelected.Object.FontSize = ObjectSelected_FontSize
End If
Next
End Sub
(Excel 2003)
제가 보기에는 두 가지 다른 문제가 있는 것 같습니다. 하나의 버튼을 클릭할 때 텍스트 크기를 조정하는 것(항상 그렇지는 않지만 이유를 알 수 없음)과 다른 해상도를 가진 디스플레이에서 워크북을 열 때 모든 버튼의 크기를 변경하는 것(초기 디스플레이로 돌아갈 때에도 유지됨).
개별 크기 조정 문제에 대해서는:저는 버튼의 한 차원을 수정하여 "부활"시키는 것으로 충분하다는 것을 알게 되었습니다.예:
myButton.Height = myButton.Height + 1
myButton.Height = myButton.Height - 1
각 버튼의 클릭 서브("myButton_Click")에 넣거나 "onClick" 이벤트에 대한 사용자 정의 클래스를 구현할 수 있습니다.
저는 ActiveX 버튼과 스핀이 엑셀 크기 조정과 이동에서 같은 문제를 경험했습니다.이것은 여러 PC의 노트북과 화면에서 사용되는 공유 스프레드시트였습니다.공유되었기 때문에 매크로를 사용하여 코드의 위치를 자동으로 변경하고 크기를 조정할 수 없었습니다.
결국 해결책을 찾고 가능한 모든 버튼 설정을 시도한 후에.저는 버튼을 그룹화하면 문제가 즉시 해결된다는 것을 알았습니다.컨트롤, 버튼, 스피너는 모두 제자리에 있습니다.저는 이것을 일주일 동안 테스트했지만 문제가 없었습니다.컨트롤을 선택하고 마우스 오른쪽 버튼을 클릭하여 그룹화하면 마법처럼 작동합니다.
ActiveX 대신 Forms 버튼을 사용합니다. ActiveX 컨트롤이 시트에서 임의로 잘못 작동합니다.
버튼 매크로에 선택 명령이 있습니까?
토글 버튼이 토글 기능 후 선택하는 셀을 포함하여 워크시트의 일부 셀 이름을 변경한 직후 글꼴 크기가 축소되었습니다.범위("...")를 확인하여 이 문제를 해결했습니다.좌표가 아닌 새 셀 이름을 포함하도록 선택합니다.
Excel을 연 후 화면 해상도/설정이 변경될 때 발생합니다.
예:
- 단추가 있는 워크북 열기
- 화면 크기가 다른 컴퓨터에서 원격 데스크톱으로 로그인
- 버튼 클릭 => 버튼 크기가 변경됩니다.
제가 찾은 유일한 해결책은 Excel을 닫고 새로운 화면 설정으로 다시 여는 것입니다.인터페이스 없이 다른 프로세스에 의해 실행되는 보이지 않는 인스턴스를 포함하여 Excel의 모든 인스턴스를 닫아야 합니다.
오래된 문제지만, 여전히 Excel 2007에 집착하는 사람들에게 문제가 되는 것 같습니다.ActiveX Listbox Object에서 동일한 문제가 발생하여 재계산할 때마다 크기를 확장했습니다.LinkCells 속성이 값에 대한 동적(오프셋) 범위를 찾고 있습니다.정상적인 범위로 보이도록 구조 조정하여 문제를 해결했습니다.
저는 엑셀 2013을 사용하면서 이 문제를 겪었습니다.오랫동안 잘 작동하다가 갑자기 버튼(액티브X)을 클릭하니 커짐과 동시에 폰트가 작아졌습니다.
파일을 저장하지 않고 컴퓨터를 다시 시작하고 동일한 Excel 파일을 다시 열면 모든 것이 정상입니다.
인쇄 및 확대/축소 변경 후 화면을 다시 그려서 수정한 후 크기 조정
ActiveWindow.Zoom = 100
ActiveWindow.Zoom = 75
Excel 2016에서 동일한 문제 발견 - 컨트롤 버튼의 높이를 변경하고 다시 변경한 다음 시트에서 셀을 선택하여 수정할 수 있었습니다.크기를 조정하는 것만으로는 일관되게 작동하지 않았습니다.명령 단추(cmdBALSCHED)에 대한 아래 예제
Public Sub cmdBALSCHED_Click()
Sheet3.cmdBALSCHED.Height = 21
Sheet3.cmdBALSCHED.Height = 20
Sheet3.Range("D4").Select
그러면 높이가 20으로 재설정되고 버튼 글꼴이 찾은 대로 재설정됩니다.
약간의 좌절감을 느낀 후, 다음 코드는 이 Excel/VBA 버그를 해결하는 데 도움이 되었습니다.다음과 같은 두 가지 주요 사항에 유의해야 합니다.
- 다른 사용자들은 크기를 변경한 후 즉시 다시 변경할 것을 권장하지만 이 코드는 한 번의 전환 상태 변경 시 두 번 이상 변경하지 않습니다.한 이벤트 상태 변경 중에 값이 두 번 변경되는 경우(특히 두 번째 값이 초기 값에서 동일한 경우) 대체 너비 및 높이 속성이 컨트롤에 적용되지 않을 수 있으므로 너비 및 높이 값이 감소하는 것을 방지하기 위해 필요한 만큼 컨트롤 너비 및 높이가 재설정되지 않습니다.
- 저는 폭과 높이에 대해 하드 코딩된 값을 사용했습니다.이 방법이 이상적이지는 않지만 여러 번 클릭한 후 컨트롤이 축소되는 것을 방지할 수 있는 유일한 방법이라는 것을 알게 되었습니다.
개인 하위 토글 버튼1_클릭()'참고: 초기 높이는 133.8이고 초기 너비는 41.4입니다. If ToggleButton1.값 = 참인 경우[사용자가 컨트롤을 클릭하고 상태를 전환할 때 실행할 코드가 참(이 문제와 관련 없음)]'toggle 값이 참이면 너비와 높이 값을 초기 값이 아닌 특정 값으로 변경합니다. 버튼 1을 전환합니다.높이 = 40.4 버튼 1을 전환합니다.너비 = 132.8또 다른[사용자가 컨트롤을 클릭하여 상태를 거짓으로 전환할 때 실행할 코드(이 문제와 관련 없음)]'전환 값이 거짓일 경우 다른 너비와 높이 값으로 조정합니다. '이것들은 별도의 조건문에 있는 한 초기 값과 같을 수 있습니다. 버튼 1을 전환합니다.높이 = 41.4 버튼 1을 전환합니다.너비 = 133.8종료할 경우끝 하위 항목
토글되지 않는 컨트롤의 경우, 반복기 변수 또는 다른 방법을 사용하여 너비 및 높이 속성이 두 개의 유사한 값 집합 간에 교대로 나타나도록 할 수 있으며, 이 경우에 사용한 토글 상태 변경과 유사한 효과를 얻을 수 있습니다.
언급URL : https://stackoverflow.com/questions/9581238/vba-excel-button-resizes-after-clicking-on-it-command-button
'programing' 카테고리의 다른 글
SpringBoot 1.4에서 SpringMVC 슬라이스 테스트 문제 (0) | 2023.06.20 |
---|---|
유형 스크립트의 정적 메서드에서 클래스 유형 인수에 액세스하기 위한 해결 방법 (0) | 2023.06.20 |
파이썬 루프의 'else' 절을 어떻게 이해할 수 있습니까? (0) | 2023.06.20 |
pyspark 데이터 프레임에 고유한 열 값 표시 (0) | 2023.06.20 |
PL/SQL에서 문자열을 비교하는 방법은 무엇입니까? (0) | 2023.06.20 |