code

Excel : 놀라운 축소 및 확장 컨트롤

codestyles 2020. 12. 9. 08:12
반응형

Excel : 놀라운 축소 및 확장 컨트롤


때때로, 나는 시간이 지남에 따라 커지거나 작아지는 매직 버튼이나 목록 상자로 고통받는 스프레드 시트를 보게 될 것입니다.

코드의 어떤 것도 이것을 지시하지 않습니다.

이 기쁨을 경험 한 사람이 있습니까?


이 문제는 Windows가 모니터에서 기본이 아닌 해상도를 처리하는 방식과 관련된 것으로 보이며 여러 가지 방법으로 피할 수 있습니다.

문제가 발생하면 완전한 악몽이 될 수 있지만 간헐적으로 만 발생합니다.

우리는 최근 수십 명의 사람들이 사용하는 엑셀 워크 시트를 테스트했으며 원인과 가능한 수정 사항에 대한 좋은 아이디어를 개발했습니다.

원인은 화면이 기본 해상도가 아닌 다른 방식으로 사용되는 모든 설정과 관련된 것으로 보입니다. 사용자가 외부 모니터를 랩톱에 연결하고 결과 화면 구성을 신중하게 선택하지 않으면 쉽게 발생할 수 있습니다. 예를 들어, 노트북이 프로젝터 (아마도 기본 1024 x 768 디스플레이가있는 오래된 것)에 연결되어 있지만 노트북이 1280 x 800이고 사용자가 디스플레이를 확장 하지 않고 복제 하도록 선택한 경우 ( "connect to Windows 7에서 프로젝터 "또는"디스플레이 "제어판), 결과는 기본 해상도가 아닌 두 화면 모두에서 예측할 수없고 일반적으로 만족스럽지 않은 이미지입니다. 이러한 설정 은 거의 항상Excel 단추, 특히 ActiveX 컨트롤에 심각한 문제가 발생합니다. 때로는 반복 된 클릭으로 읽을 수 없게 축소됩니다. 다른 경우에는 전체 화면을 덮도록 확장됩니다.

대부분 사용자에게 디스플레이 확장 설정 을 사용하도록 지시 하고 결과가 모두 기본 해상도를 사용하는 두 개의 화면이 될 때 문제가 발생하지 않습니다.

문제를 최소화하는 코드 기반 방법도 있습니다. 버튼과 컨트롤을 클릭했을 때 위치와 크기를 재설정 해 보았습니다 (버튼이 많은 경우 지루한 코드가 많이 추가됨). 이것은 때때로 효과가있었습니다. 또한 autosize 속성을 true에서 false로 전환 한 후 다시 시도했습니다 (개발자 모드에서 수동으로 작동 함). 이로 인해 더 많은 인스턴스가 수정되지만 모두는 아닙니다.


원격 데스크톱을 통해 액세스 한 컴퓨터에서 사람들이 스프 레아 시트를 여는 원인을 발견했으며 로컬 컴퓨터와 원격 컴퓨터간에 화면 해상도 차이가 있다는 것을 발견했습니다. 이것은 컨트롤 도구 상자에서 사용할 수있는 컨트롤에 영향을 주지만 구식 양식 단추 컨트롤을 사용하여 문제를 경험하지 못하므로 불만족스러운 대답은이를 사용하는 것입니다.


이것은 몇 년 동안 저를 괴롭 혔습니다. 주변에 여러 가지 수정 사항이 있지만 실패한 것처럼 보입니다. Excel 2010 (2014 년 5 월)에서 여전히 발생했으며 일부 보고서에서는 Excel 2013에서도 여전히 발생하고 있습니다. 최소한 내 상황과 일치하는 가장 좋은 설명 (Excel 2010, RDP 관련 없음, 인쇄 미리보기 관련 없음)은 다음과 같습니다.

Microsoft Excel 지원 팀 블로그 : 클릭하거나 인쇄 미리보기를 수행 할 때 ActiveX 및 양식 컨트롤의 크기가 조정됩니다 (Excel 2010).

(Excel 2013 사용자에게는 도움이되지 않을 수 있습니다.)

편집 : technet 링크가 중단 된 경우 세부 정보 추가, technet 기사는 다음과 같이 말합니다.

먼저 Excel 2010 용 Microsoft 핫픽스 2598144를 설치 합니다. 여기 에서 사용할 수 있습니다 .

둘째, 증상이 "Excel 2010 워크 시트에서 ActiveX 단추를 클릭 한 후 잘못된 크기로 변경"인 경우 다음을 수행해야합니다.

  • 시작, 실행을 차례로 누르고 열기 상자에 regedit를 입력 한 다음 확인을 누릅니다.
  • 다음 레지스트리 하위 키 HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 14.0 \ Excel \ Options를 찾아 선택합니다.
  • 편집 메뉴에서 새로 만들기를 가리킨 다음 DWORD (32 비트) 값을 클릭합니다.
  • LegacyAnchorResize를 입력 한 다음 Enter 키를 누릅니다.
  • 세부 정보 창에서 LegacyAnchorResize를 마우스 오른쪽 단추로 클릭 한 다음 수정을 클릭합니다.
  • 값 데이터 상자에 1을 입력 한 다음 확인을 클릭합니다.
  • 레지스트리 편집기를 종료합니다.

또는 두 번째로 증상이 "Excel 2010에서 통합 문서의 인쇄 미리보기를 본 후 통합 문서에서 단추 양식 컨트롤이 잘못 표시됨"인 경우 다음을 수행해야합니다.

  • 시작, 실행을 차례로 누르고 열기 상자에 regedit를 입력 한 다음 확인을 누릅니다.
  • 다음 레지스트리 하위 키를 찾아 선택합니다. HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 14.0 \ Excel \ Options
  • 편집 메뉴에서 새로 만들기를 가리킨 다음 DWORD (32 비트) 값을 클릭합니다.
  • MultiSheetPrint를 입력 한 다음 Enter 키를 누릅니다.
  • 세부 정보 창에서 MultiSheetPrint를 마우스 오른쪽 단추로 클릭 한 다음 수정을 클릭합니다.
  • 값 데이터 상자에 1을 입력 한 다음 확인을 클릭합니다.
  • 다음 레지스트리 하위 키를 다시 선택합니다. HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 14.0 \ Excel \ Options
  • 편집 메뉴에서 새로 만들기를 가리킨 다음 DWORD (32 비트) 값을 클릭합니다.
  • LegacyAnchorResize를 입력 한 다음 Enter 키를 누릅니다.
  • 세부 정보 창에서 LegacyAnchorResize를 마우스 오른쪽 단추로 클릭 한 다음 수정을 클릭합니다.
  • 값 데이터 상자에 1을 입력 한 다음 확인을 클릭합니다.
  • 레지스트리 편집기를 종료합니다.

또는 두 번째로 증상이 "워크 시트의 인쇄 미리보기를 본 후 Excel 2010 워크 시트에서 ActiveX 단추가 잘못된 크기로 변경됨"인 경우 다음을 수행해야합니다.

  • 시작, 실행을 차례로 누르고 열기 상자에 regedit를 입력 한 다음 확인을 누릅니다.
  • 다음 레지스트리 하위 키를 찾아 선택합니다. HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 14.0 \ Excel \ Options
  • 편집 메뉴에서 새로 만들기를 가리킨 다음 DWORD (32 비트) 값을 클릭합니다.
  • LegacyAnchorResize를 입력 한 다음 Enter 키를 누릅니다.
  • 세부 정보 창에서 LegacyAnchorResize를 마우스 오른쪽 단추로 클릭 한 다음 수정을 클릭합니다.
  • 값 데이터 상자에 1을 입력 한 다음 확인을 클릭합니다.
  • 레지스트리 편집기를 종료합니다.

행운을 빕니다. 이 문제는 정말 고통 스럽습니다 ...


이 문제는 실제로 화면 해상도 때문입니다. 가장 일반적으로 사용자가 Excel 응용 프로그램을 사용하는 동안 프로젝터 또는 WebEx에 연결할 때 발생합니다.

이 문제에 대한 간단한 해결책은 사용자에게 주변 장치 연결 (프로젝터)없이 컴퓨터를 재부팅하도록 요청한 다음 Excel 응용 프로그램을 다시 여는 것입니다.


앞서 논의한 수정 사항, 클릭 이벤트 후 Active X 컨트롤의 크기를 프로그래밍 방식으로 조정 / 위치 조정하거나 레지스트리를 수정 (D 단어 LegacyAnchorResize 사용)해도 Excel 2010 / Windows 7 64 비트에서 문제가 해결되지 않았습니다.

나를위한 솔루션은 여기에서 찾았습니다 : https://support.microsoft.com/en-us/kb/838006

Excel 2010의 경우 링크는 다음을 지시합니다.

  1. 실행중인 모든 프로그램을 종료하십시오.
  2. 시작, 실행을 차례로 누르고 열기 상자에 regedit를 입력 한 다음 확인을 누릅니다.
  3. 다음 레지스트리 키를 찾아 클릭합니다.
  4. HKEY_CURRENT_USER \ Software \ microsoft \ office \ 14.0 \ common
  5. 편집 메뉴에서 새로 만들기를 가리킨 다음 키를 클릭합니다.
  6. Draw를 입력 한 다음 Enter 키를 누릅니다.
  7. 편집 메뉴에서 새로 만들기를 가리킨 다음 DWORD 값을 클릭합니다.
  8. UpdateDeviceInfoForEmf를 입력 한 다음 Enter 키를 누릅니다.
  9. UpdateDeviceInfoForEmf를 마우스 오른쪽 단추로 클릭 한 다음 수정을 클릭합니다. 10. 값 데이터 상자에 1을 입력 한 다음 확인을 클릭합니다.
  10. 파일 메뉴에서 끝내기를 눌러 레지스트리 편집기를 닫습니다.

버튼이 자유롭게 떠 다니는 대신 셀의 모서리에 고정되도록 정의 된 것일 수 있습니까?

그것을 확인하십시오

형식 | 속성 | 개체 포지셔닝

"셀로 이동 및 크기 조정"이외의 항목을 선택합니다.


내 모니터는 모두 기본 해상도로 설정되어있는 것처럼 보이므로 수수께끼가 깊어집니다. 그러나 버튼에 SOMETHING (이동 또는 크기 조정)을 수행하면 어떻게 든 문제가 해결된다는 것을 발견했습니다. 이 루틴은 이동을 자동화 한 다음 원래 설정을 복원합니다.

다음 코드는 적어도 버튼에 대한 문제를 해결하는 것 같습니다.

Public Sub StablizeButton(oButton As MSForms.CommandButton)

    With oButton

        ' If True, then temporary distortion is remedied only by clicking somewhere.
        ' If False, then the temporary distortion is remedied merely by moving the mouse pointer away.
        .TakeFocusOnClick = False
        ' For best results:  In the Properties Sheet, initialize to False.

        .Left = .Left + 200             ' Move the button 200 units to the right, ...
        .Left = .Left - 200             ' ... and then move it back.

    End With

End Sub

다음과 같이 호출하십시오.

Private Sub MyButton_Click()
    StablizeButton MyButton

    ' Remainder of code.
End Sub

이 문제가 몇 번 발생했으며 해결하기 위해 다음을 수행했습니다.

  1. 내 C : \ 드라이브에서 확장자가 '.exd'인 파일을 검색합니다.
  2. 해당 파일을 삭제하십시오 (그렇게해도 괜찮습니다).
  3. 시트가 열릴 때마다 ActiveX 개체의 크기를 조정하는 코드 구현

이 문제는 노트북을 프로젝터에 연결하고 파일을 저장 한 모든 것이 원인이라는 것을 알았습니다. 그런 다음 문제가 발생할 때마다 1 단계와 2 단계를 반복했고 ActiveX 개체가 다시 작동했습니다.


모든 매크로 지원 통합 문서에 다음 모듈을 추가하여 회사 수준에서이 문제를 해결했습니다.

Option Explicit

Type ButtonSizeType
    topPosition As Single
    leftPosition As Single
    height As Single
    width As Single
End Type

Public myButton As ButtonSizeType

Sub GetButtonSize(cb As MSForms.CommandButton)
' Save original button size to solve windows bug that changes the button size to
' adjust to screen resolution, when not in native resolution mode of screen
    myButton.topPosition = cb.top
    myButton.leftPosition = cb.Left
    myButton.height = cb.height
    myButton.width = cb.width
End Sub

Sub SetButtonSize(cb As MSForms.CommandButton)
' Restore original button size to solve windows bug that changes the button size to
' adjust to screen resolution, when not in native resolution mode of screen
    cb.top = myButton.topPosition
    cb.Left = myButton.leftPosition
    cb.height = myButton.height
    cb.width = myButton.width
End Sub

다음과 같이 코드의 시작과 끝에서 호출하십시오.

Private Sub CommandButton1_Click()

Application.ScreenUpdating = False
' Turn off ScreenUpdating to make sure the user dosn't see the buttons flicker
GetButtonSize CommandButton1 ' Saves original button size
' Do cool things
'
'
'
SetButtonSize CommandButton1 ' Restores original button size

Application.ScreenUpdating = True
' Turn ScreenUpdating back on when you're done
End Sub

이전 스레드이지만이 문제가 있었고 내 경우에는 문제가있는 옵션 버튼을 함께 그룹화 한 다음 Auto_Open 에서이 그룹의 크기를 다음과 같이 설정 (재설정)하여 해결했습니다.

With ThisWorkbook
    .Worksheets("1").Shapes("grpInput").Width = 383.1
    .Worksheets("2").Shapes("grpSuite").Width = 383.1
    .Worksheets("3").Shapes("grpLoc").Width = 383.1
    .Worksheets("4").Shapes("grpDecision").Width = 383.1
End With

[EXCEL PROFESSIONAL PLUS 2016, 32BITS, VERSION 1802, BUILD 9029.2167]

나는 같은 문제가 있었고 Windows 10, 64 비트에서 디스플레이 배율을 사용자 지정하여 문제해결할 수있었습니다 . 매우 간단하며 단일 사용자에게 적합합니다. 아래 지침을 따르기 만하면 모든 양식 컨트롤, 시트 모양, 그림 및 ActiveX 컨트롤이 원래 크기로 돌아갑니다. 코딩하거나 고급 속임수 / 마법사 / 해킹을 할 필요가 없습니다. 제공된 링크가 끊어진 경우이 단계를 반복하십시오.

  1. Windows 10에서 디스플레이 사용자 지정 배율을 설정하려면 다음을 수행해야합니다.

    설정을 엽니 다.

  2. 설정-디스플레이로 이동합니다.
  3. 왼쪽에서 "Scale and Layout"아래의 Custom Scaling 링크를 클릭합니다.
  4. Custom Layout 페이지가 열립니다. 비율 조정에 대한 새 값을 지정하십시오. [사용 100] !! ... 그리고 voilá. Excel을 닫았다가 다시 엽니 다.

오래된 게시물이지만이 성 가시고 스트레스를받는 Excel 문제를 다루는 모든 사람에게 도움이되기를 바랍니다.

https://winaero.com/blog/set-display-custom-scaling-windows-10/


이 문제는 매우 실망 스럽습니다. 제 경험으로는 속성이 일반적으로 ActiveX 개체에 제대로 설정되어 있다는 것입니다. 모든 활성 시트에서 실행할 수 있도록 위에서 UDF를 수정했습니다. 이렇게하면 모든 것이 축소되기 전의 방식으로 돌아갑니다.

Public Sub ResizeAllOfIt()
Dim myCtrl As OLEObject

For Each myCtrl In ActiveSheet.OLEObjects

 Dim originalHeight
 Dim originalWidth

 originalWidth = myCtrl.width
 originalHeight = myCtrl.height

  myCtrl.height = originalHeight - 1 
  myCtrl.height = originalHeight 
  myCtrl.width = originalWidth

Next myCtrl

End Sub

저는 Excel 2010 (항상이 스레드로 돌아가는 문제)에서 항상이 문제를 겪으며 100 % 수정 사항을 찾지 못했지만 다른 사람에게 도움이 될 수있는 정보가 있다고 생각합니다.

지루하게 버튼을 가지고 놀면서 각 개체에 대한 다른 이벤트가 다른 문제를 일으키는 것을 발견했습니다. 예를 들면

  • 버튼 A-버튼의 크기는 MouseDown 이벤트에서 축소됩니다.
  • 버튼 B-MouseMove 이벤트에서 텍스트가 확대됩니다 (단, 버튼을 클릭 한 후에 만 ​​가능합니다. AKA, 버튼을 클릭하면 코드가 실행되고 마우스를 버튼 위에 올려 놓은 다음 마우스를 움직이 자마자 텍스트가 표시됩니다. 크게 하다)
  • 텍스트 입력 상자 A-MouseUp 이벤트에서 텍스트가 확대됩니다.
  • 텍스트 입력 상자 B-LostFocus 이벤트에서 텍스트가 확대됩니다.

나를 위해 작동하는 유일한 해결책은 무작위 크기 조정을 유발 한 각 개체 이벤트의 크기 / 텍스트를 재설정하는 코드를 작성하는 것입니다. 그렇게 ...

여기서 MaterialNum은 입력 상자의 이름이고 MouseDown은 이벤트입니다.

Private Sub MaterialNum_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    ' Reset the size, font style, and size
    With Worksheets("QuoteForm").Shapes("MaterialNum")
        .Height = 21
        .Width = 101.25
        .Left = 972.75
        .Top = 87
        With .DrawingObject.Object.Font
            .Name = "Arial"
            .Size = 12
        End With
    End With

End Sub

또한 Format Control에서 몇 가지 옵션을 변경해야했습니다 (오른쪽 클릭 개체> Format Control).

  • 크기 탭 : 가로 세로 비율 잠금 상자가 선택되어 있습니다.
  • 속성 탭 : 개체 인쇄 상자가 선택되어 있지 않습니다.

또한 개체 속성 창 (오른쪽 클릭 개체> 속성)에서 TakeFocusOnClick을 false로 설정했습니다.

예, 이것은 각 개체에 대해 수행해야하므로 시간이 많이 걸리고 지루하지만 저에게 적합한 유일한 수정 사항입니다 (Microsoft가이 문제를 해결하기를 기다리는 것보다 더 빠른 수정 인 것 같습니다 !!!) . 다른 사람들에게 도움이되기를 바랍니다.

다른 사람들이 도움이 되었기를 바랍니다.


이 답변 중 어느 것도 컨트롤을 특정 행과 열에 고정하지 않는다는 것을 알았습니다. 행 / 열이 모니터의 해상도보다 더 예측 가능한 경향이 있기 때문에 이것은 나를 위해 꽤 깔끔하게 작동했습니다.

아래 샘플은 기본적으로 객체가 이동해야하는 위치를 "측정"한 다음 Worksheet_Activate코드 에서 설정합니다 . 아래 예에서 버튼은 항상 덮개에 스냅됩니다 D8:F10.

Private Sub Worksheet_Activate()
'Note this is done in the sheet code, not a Module.

   With Me.Shapes("CommandButton1")

       .Left = Me.Range("A1:C1").Width
       .Top = Me.Range("a1:a7").Height
       .Width = Me.Range("D1:F1").Width
       .Height = Me.Range("A8:a10").Height

   End With

End Sub

결과는 아래와 같이 나타납니다.

여기에 이미지 설명 입력


매우 이상합니다. 너비 및 높이 속성은 쿼리 할 때 (코드에서 또는 속성 시트를 사용하여) 축소되지 않지만 분명히 변경됩니다.

속성 시트를 사용하고 너비를 표준 15에서 예를 들어 14로 변경 한 다음 다시 15로 변경하면 수정됩니다.

아래 코드는 저에게 적합합니다 (시트에 재미있는 시각적 효과가 있습니다. 클릭하면 축소되고 화면이 깜박이고 뒤로 확장됩니다).

코드의 내 솔루션 (체크 박스 클릭 이벤트) :

Dim myCtrl As OLEObject
For Each myCtrl In ActiveSheet.OLEObjects
  myLab = myCtrl.Name
  myCtrl.Height = 14 ' to "wake up" the property.
  myCtrl.Height = 15 ' to reset it back to normal
  myCtrl.Width = 12 ' just making sure
Next myCtrl

인터넷을 검색 한 후 가장 좋은 해결책은 파일을 .xlsm이 아닌 .xlsb (이진)로 저장하는 것입니다.


내가 얼마 전에 시작한 것은 모든 컨트롤의 크기를 설정하는 단일 서브를 갖는 것이 었습니다. 그런 다음 컨트롤이 커지거나 작아지는 코드의 모든 지점에서이 하위를 실행할 수 있습니다. 때로는 매우 까다로운 작업이지만 버튼이 스프레드 시트를 먹지 못하게합니다.


나는 이것을 테스트하지 않았지만 이것이 확대 / 축소 속성과 관련이 있다고 생각합니다 (어쩌면 추가 activewindow.Zoom = false).

또한 .Placement = xlMoveworkbook_open 및 window_activate에 정의 된 모양에 대해 루프를 수행 할 수 있습니다 . 이것은 모양이 셀과 함께 크기 조정되는 것을 방지하기위한 것입니다 (하지만 셀과 함께 이동 함).

나는 엑셀 2013을 사용하고 있으며이 문제가 없었으며 원격으로 사용하지 않았습니다.


" 워크 시트의 모든 도형에 고유 한 이름이 있는지 확인하십시오. "(확인란 / 라디오 버튼 (OLE 컨트롤), 그림 및 기타 도형 유형 포함 ...)

문제가 간헐적이기 때문에 보장 할 수 없습니다. 이제이 수정을 사용하여 두 가지 양식이 제대로 작동하지만 "two"는 매우 작은 샘플 세트이며 우연 일 수 있습니다. 그다지 덜한 것은 다음과 같습니다.

빈 시트 (Sheet1)에 문제 시트 (wsForm)의 모든 셰이프를 나열했습니다.

Sub ListShapes()
Dim spShape As Shape
Dim intRow As Integer


Sheet1.Range("A1:F1") = Array("Name", "Left", "Top", "Width", "Height", "Bottom Right Cell")
intRow = 2

For Each spShape In wsForm.Shapes        

    Sheet1.Cells(intRow, 1).Value = spShape.Name
    Sheet1.Cells(intRow, 2).Value = spShape.Left
    Sheet1.Cells(intRow, 3).Value = spShape.Top
    Sheet1.Cells(intRow, 4).Value = spShape.Width
    Sheet1.Cells(intRow, 5).Value = spShape.Height
    Sheet1.Cells(intRow, 6).Value = spShape.BottomRightCell.Address

    intRow = intRow + 1

Next
End Sub

그런 다음 G 열의 수식을 사용하여 A 열의 각 모양 이름을 세었습니다.

= COUNTIF ($ A $ 2 : $ A $ 120, A2)

Obviously adjust range to suit... You can then filter on all shapes that don't have a "1" in this column. The "bottom right cell" helps you find the shape on your worksheet: rename by selecting the shape, then entering new unique value in the name/reference box at top left of Excel.

This shape list also helped find some "dead" shapes (0 height or 0 width) which were long forgotten and unused.

I hope this works for you! For that matter... I hope it works for ME for future occurrences...


If you wish to not show the button moving back and forth, you can put the original placement into your code then just check against those. Turn off screen updating when button is clicked, check to see if the the placement is different on the control, change it back, if needed, turn screen updating back on

DP


After trying many of the solutions on this and related posts, I discovered that the solution to a different problem that Microsoft had posted also worked reliably for this particular issue when applied in a particular way, at least within the context I'm working within. I experienced these problems in a resolution native to the laptops we have here and on a PC whenever I'd switch to a non-native resolution. Namely, buttons loading at a larger than normal size, getting larger when clicked on, and text and images in these buttons shrinking (and at least the setting for the text remained the same so I couldn't see any way to change it back programmatically or otherwise.) These have not been intermittent problems in my case. I have had intermittent problems though after using print preview which Microsoft has posted a solution for here. I've tried this and it seems to be working.

The solution: For Excel, close the app and delete the MSForms.exd file from C:\Users{UserName}\AppData\Local\Temp\Excel8.0 while in the resolution that you want to view the buttons in. You could also search for other .exd files in your local AppData\Temp folder for other Office apps.

As I mentioned, this is a solution proposed by Microsoft for a different issue - where the buttons stop working after the Dec '14 updates are installed. Here's the link to that article. In that case, it's a one time fix. Here, you may need to do it every time you change resolutions.


Grouping the controls appears to work for me. I would upvote or comment but SO won't let me. Note that this issue comes up often if you use W8 display scaling and have a high resolution laptop and older monitor.


I have found this problem across all objects (buttons,text boxes,etc). When I print/print preview multiple sheets, all the sheets except for the first in the sequence have moved or resized objects. After much testing, the simplest solution in to page zoom up or down and return to the original setting.


I had the problem also with ActiveX listboxes and found the following elsewhere and it seems to work so far, and it seems also the by far easiest solution that transfer along when handing the spreadsheet to someone else:

"While the ListBox has an IntegralHeight property whose side-effect of a FALSE setting will keep that control from going askew, and while command buttons have properties such as move/size with cells, etc., other controls are not as graceful."

And they have some more advice: http://www.experts-exchange.com/articles/5315/Dealing-with-unintended-Excel-Active-X-resizing-quirks-VBA-code-simulates-self-correction.html


I find that the problem only seems to happen when freeze panes is turned on, which will normally be on in most apps as you will place your command buttons etc in a location where they do not scroll out of view.

The solution that has worked for be is to group the controls but also ensuring that the group extends beyond the freeze panes area. I do this by adding a control outside the freeze panes area, add it into the group but also hide the control so you don't see it.


Now using Excel 2013 and this happens EVERY time I extend my display while Excel is running (and every time I remove the extension).

The fix I've started implementing is using hyperlinks instead of buttons and one to open a userform with all the other activeX controls on.


Add this code to a .reg file. Double-click and and confirm. Restart Excel.

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\options]
"LegacyAnchorResize"=dword:00000001

[HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Draw]
"UpdateDeviceInfoForEmf"=dword:00000001

Try changing the zoom setting to 100% using the bottom right hand slider. Fixed it for me on both monitors of different sizes.


I've found a fix that works, and solves the problem for a single user. If you don't want to read my little rant you can skip straight to the solution.

RANT:

I've been experiencing this stupid problem since the dinosaurs. In the meantime, Microsoft have had plenty of resources to release countless major updates to the Office suite and yet this problem goes unaddressed. It's absolutely infuriating. I have no reason whatsoever to upgrade when basic stuff like this doesn't work. Surely someone at MS uses ActiveX controls in Excel right on a high-res display, no?

I didn't experience this issue on my desktop PC, no clue as to why, but on my Surface Pro 4 my ActiveX controls go bananas whenever I click them.

Today I decided to get to the bottom of this. I searched high and low, tried a every solution proposed on various forums (none of which works by the way). It doesn't matter if the controls are grouped or not, locked or not, hotfix installed or not.

Yesterday I had another problem with things misbehaving in another app called Traktor (DJ software), where controls would jump around when display scaling was set to a value that was not an exact multiple of 100%. A user found the solution was to edit the compatibility mode for this application. So I did the same for Excel, and it worked! Now my controls stay put, regardless of display resolution and scaling.

SOLUTION:

(Ensure Excel is not running)

  1. Locate EXCEL.EXE (on my system this can be found at C:\Program Files\Microsoft Office\Office16\EXCEL.EXE)
  2. Rename "EXCEL.EXE" to "_EXCEL.EXE" (basically change it to something else)
  3. Right-click renamed EXCEL.EXE file, then go to Properties > Compatiblity tab > Settings section
  4. Set Override high DPI scaling behaviour = Enabled, and Scaling performed by = Application
  5. Click OK
  6. Rename to "_EXCEL.EXE" back to "EXCEL.EXE"

Now Excel will run at its native resolution and ActiveX controls won't go awry. The only downside is that Excel won't respond to screen scaling, so things may look a little smaller than one would like. On my Surface Pro 4 is more than acceptable

NOTES:

1) Steps 2 and 6 are required with Excel 2016, because the Properties dialog for EXCEL.EXE does not offer the Compatibility tab. After renaming, the tab becomes available.

2) This solution only works on a one-user basis. That is, if you send an Excel file containing ActiveX controls to your colleagues, the ActiveX controls won't display correctly on their system unless they change the compatibility mode settings.

3) After applying this hack, previously corrupted Excel files appear to fix themselves when you open them, with all controls recovering their original intended dimensions.

Please test and comment, I hope this can help someone, cheers!


나는 때때로 같은 문제가 있습니다. 제 경우에는 하나의 파일에 100 % 복제 할 수 있었지만 거의 동일한 파일에서는 일관성이 없었습니다. 또한 크기 오류가 영구적이지 않다는 것을 발견했습니다. 파일을 저장하고 다시 열어 버튼 모양을 복원 할 수있었습니다. 새 창을 만든 다음 손상된 창을 버릴 수도 있습니다. 단일 모니터 구성을 사용합니다.

나를 위해 시트의 HPageBreaks 컬렉션에 액세스했을 때 버튼 크기가 조정되었습니다 . 다음과 같이 창보기를 일시적으로 변경하여 문제를 피할 수있었습니다.

ActiveWindow.View = xlPageBreakPreview
  ' do pagination stuff using HPageBreaks
ActiveWindow.View = xlNormalView

참고 URL : https://stackoverflow.com/questions/1573349/excel-the-incredible-shrinking-and-expanding-controls

반응형