Excel: невероятное сокращение и расширение элементов управления

Иногда я буду сталкиваться с таблицей, которая страдает от волшебных кнопок или списков, которые со временем становятся все больше или меньше.

Ничто в коде не инструктирует это.

Кто-нибудь еще испытал эту радость?

Ответ 1

Проблема, похоже, связана с тем, как Windows обрабатывает неродные разрешения на мониторах, и их можно избежать несколькими способами.

Проблема может быть полным кошмаром, когда это происходит, но это происходит только периодически.

Недавно мы тестировали таблицу Excel, используемую несколькими десятками человек, и разработали хорошее представление о причине и некоторых возможных исправлениях.

Причина, по-видимому, связана с любой установкой, где экраны используются в чем-то отличном от их собственного разрешения. Это может случиться легко, если пользователь подключает внешний монитор к ноутбуку и не выбирает результирующую конфигурацию экрана. Например, если ноутбук подключен к проектору (возможно, к старому с дисплеем с разрешением 1024 на 768), но ноутбук составляет от 1280 до 800, и пользователь выбирает дублировать экран, а не расширение (настройки в панели "подключиться к проектору" или "отображает" в Windows 7), результатом является непредсказуемое и обычно неудовлетворительное изображение на обоих экранах как с неродными разрешениями. Мы обнаружили, что эти настройки почти всегда вызывают серьезные проблемы с кнопками Excel, особенно с элементами ActiveX. Иногда при повторных кликах они сокращаются до нечитаемости; в других случаях они расширяются, чтобы охватить весь экран.

В основном, когда мы инструктируем пользователей использовать параметр expand, а результат - два экрана с использованием собственных разрешений, мы не видим проблемы.

Существуют также основанные на кодах способы минимизации проблемы. Мы попытались сбросить местоположение и размер кнопок и элементов управления, когда они были нажаты (что добавляет много утомительного кода, если у вас много кнопок). Иногда это срабатывало. Мы также пытались переключить свойство autosize с true на false и назад (это работает вручную в режиме разработчика), и это фиксирует больше экземпляров, но не все.

Ответ 2

нашел причину, по которой люди открывают страницу на компьютере, доступ к которому осуществляется через удаленный рабочий стол, и существует разница в разрешении экрана между локальными и удаленными машинами. Это влияет на элементы управления, доступные из панели инструментов управления, но все же, чтобы испытать проблему с помощью кнопки управления старой формой школы, поэтому мой неудовлетворительный ответ заключается в том, чтобы использовать это.

Ответ 3

Это мучило меня годами, и снова и снова. Вокруг есть множество исправлений, но они кажутся удачными. Это все еще происходило в Excel 2010 (происходит со мной в мае 2014 года) и все еще происходит в Excel 2013 в некоторых отчетах. Наилучшее описание, которое я нашел, которое, по крайней мере, соответствует моей ситуации (Excel 2010, без RDP, без предварительного просмотра):

Блог группы поддержки Microsoft Excel: элементы управления ActiveX и формы изменяют свой размер при нажатии или предварительном просмотре (в Excel 2010)

(Это может не помочь пользователям Excel 2013, извините)

РЕДАКТИРОВАТЬ: Добавление деталей в случае, если ссылка на Technet когда-либо не работает, статья Technet говорит:

Сначала установите Microsoft Hotfix 2598144 для Excel 2010, доступно здесь.

Во-вторых, если ваш симптом "кнопка ActiveX меняется на неправильный размер после щелчка на листе Excel 2010", то вам следует:

  • Нажмите "Пуск", нажмите "Выполнить", введите regedit в поле "Открыть" и нажмите кнопку "ОК".
  • Найдите и выберите следующий раздел реестра HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options.
  • В меню "Правка" выберите пункт "Создать", а затем щелкните значение DWORD (32-разрядное).
  • Введите LegacyAnchorResize и нажмите клавишу ВВОД.
  • В области сведений щелкните правой кнопкой мыши LegacyAnchorResize и выберите команду "Изменить".
  • В поле "Значение" введите 1 и нажмите кнопку "ОК".
  • Выход из редактора реестра.

ИЛИ ВТОРОЕ, если у вас есть симптом " Элемент управления формы кнопки неправильно отображается в книге после просмотра предварительного просмотра книги в Excel 2010", то вам следует:

  • Нажмите "Пуск", нажмите "Выполнить", введите regedit в поле "Открыть" и нажмите кнопку "ОК".
  • Найдите и выберите следующий раздел реестра: HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options
  • В меню "Правка" выберите пункт "Создать", а затем щелкните значение DWORD (32-разрядное).
  • Введите MultiSheetPrint и нажмите клавишу ВВОД.
  • В области сведений щелкните правой кнопкой мыши MultiSheetPrint и выберите команду "Изменить".
  • В поле "Значение" введите 1 и нажмите кнопку "ОК".
  • Снова выберите следующий раздел реестра: HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options
  • В меню "Правка" выберите пункт "Создать", а затем щелкните значение DWORD (32-разрядное).
  • Введите LegacyAnchorResize и нажмите клавишу ВВОД.
  • В области сведений щелкните правой кнопкой мыши LegacyAnchorResize и выберите команду "Изменить".
  • В поле "Значение" введите 1 и нажмите кнопку "ОК".
  • Выход из редактора реестра.

ИЛИ ВТОРОЕ, если ваш симптом "кнопка ActiveX изменена на неверный размер на листе Excel 2010 после просмотра предварительного просмотра листа", то вам следует:

  • Нажмите "Пуск", нажмите "Выполнить", введите regedit в поле "Открыть" и нажмите кнопку "ОК".
  • Найдите и выберите следующий раздел реестра: HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options
  • В меню "Правка" выберите пункт "Создать", а затем щелкните значение DWORD (32-разрядное).
  • Введите LegacyAnchorResize и нажмите клавишу ВВОД.
  • В области сведений щелкните правой кнопкой мыши LegacyAnchorResize и выберите команду "Изменить".
  • В поле "Значение" введите 1 и нажмите кнопку "ОК".
  • Выход из редактора реестра.

Удачи. Эта проблема такая боль...

Ответ 4

Эта проблема на самом деле обусловлена ​​разрешением экрана. Чаще всего это происходит, когда пользователь подключается к проектору или WebEx при использовании приложения excel.

Простое решение этой проблемы - попросить пользователя перезагрузить компьютер без каких-либо периферийных соединений (проектор), а затем снова открыть приложение excel.

Ответ 5

Исправления, обсуждавшиеся ранее, с программным изменением размера/перестановки элементов управления Active X после событий клика или изменения реестра (с помощью слова D LegacyAnchorResize), не помогли мне решить проблему с 64-разрядной версией Excel 2010/Windows 7.

Решение для меня было найдено здесь: https://support.microsoft.com/en-us/kb/838006

В Excel 2010 ссылка указывает:

  • Закройте все запущенные программы.
  • Нажмите кнопку Пуск, выберите пункт Выполнить, в поле Открыть введите regedit и нажмите кнопку ОК.
  • Найдите и выберите следующий раздел реестра:
  • HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common
  • В меню "Правка" выберите "Создать" и нажмите "Ключ".
  • Наберите "Рисование", а затем нажмите "Enter".
  • В меню "Правка" выберите "Создать", а затем нажмите "Значение DWORD".
  • Напечатайте UpdateDeviceInfoForEmf, а затем нажмите Enter
  • Щелкните правой кнопкой мыши UpdateDeviceInfoForEmf и выберите команду Изменить. 10.В окне "Значение" введите 1, а затем нажмите "ОК".
  • В меню "Файл" нажмите "Выход", чтобы закрыть редактор реестра.

Ответ 6

Может ли быть, что кнопка определена, чтобы придерживаться углов ячейки, а не свободно плавать?

Проверьте его с помощью

Формат | Недвижимость | Позиционирование объектов

и выберите что угодно, кроме "перемещения и размера с ячейками"

Ответ 7

Мои мониторы кажутся настроенными на собственные разрешения, что углубляет тайну. Однако я обнаружил, что выполнение 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

Ответ 8

У меня была эта проблема несколько раз, и для решения я сделал следующее:

  • Поиск через мой диск C:\для любого файла с расширением '.exd'
  • Удалите эти файлы (это нормально)
  • Внедрить код, который изменяет размеры объектов ActiveX при каждом открытии листа.

Я обнаружил, что эта проблема была вызвана тем, что мы подключили ноутбук к проектору и сохранили файл. Затем каждый раз, когда проблема возникала, я просто повторял шаги 1. и 2. и мои объекты ActiveX велись снова

Ответ 9

Мы просто решили это на уровне компании, добавив следующий модуль ко всем книгам с поддержкой макросов:

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

Ответ 10

Старый поток, но у меня возникла эта проблема и я решил ее сначала группировать, в моем случае, кнопки параметров вместе с проблемой, а затем просто установил (сбросил) размер этой группы в 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

Ответ 11

[EXCEL PROFESSIONAL PLUS 2016, 32 бита, версия 1802, сборка 9029.2167]

У меня была та же проблема, и я мог решить эту проблему, настроив масштабирование экрана в Windows 10, 64 бита. Это очень просто и работает для одного пользователя. Просто следуйте приведенным ниже инструкциям, и у вас будут все элементы управления формой, формами листов, рисунками и элементами управления ActiveX до их исходного размера. Нет необходимости кодировать или делать сложные хитрости/волшебство/хаки. Если указанная ссылка не работает, просто повторите эти шаги.

  1. Чтобы настроить отображение пользовательского масштабирования в Windows 10, необходимо сделать следующее.

    Открыть настройки.

  2. Зайдите в Настройки - Дисплей.
  3. Слева, нажмите на ссылку Custom Scaling под "Scale and Layout".
  4. Страница Custom Layout будет открыта. Укажите новое значение для процента масштабирования. [ИСПОЛЬЗОВАТЬ 100] !!... и вуаля. Закройте и снова откройте Excel.

Это старый пост, но я надеюсь, что он поможет всем, кто имеет дело с этой надоедливой и напряженной проблемой Excel.

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

Ответ 12

Эта проблема очень расстраивает, мой опыт показывает, что свойства обычно правильно устанавливаются для объектов 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

Ответ 13

Я постоянно сталкиваюсь с этой проблемой в 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

Кроме того, мне пришлось изменить несколько параметров в управлении форматами (щелкните правой кнопкой мыши объект> Управление форматами):

  • Вкладка "Размер": флажок "Блокировать соотношение сторон" установлен
  • Вкладка "Свойства": флажок "Печать объекта" снят

Кроме того, в панели свойств объекта (щелкните правой кнопкой мыши объект> Свойства) я установил для TakeFocusOnClick значение false

Да, это отнимает много времени и утомительно, поскольку это должно быть сделано с каждым объектом, но это единственное исправление, которое работает для меня (и это, кажется, быстрее, чем ожидание Microsoft, чтобы это исправить !!!). Надеюсь, это поможет другим.

Я надеюсь, что другие находят это полезным

Ответ 14

Я заметил, что ни один из этих ответов не привязывает элемент управления к определенной строке и столбцу. Для меня это сработало довольно чисто, поскольку строки/столбцы, как правило, более предсказуемы, чем разрешение мониторов.

Приведенный ниже пример в основном "измеряет", куда должен идти объект, а затем устанавливает его там в коде 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

Результат будет выглядеть так, как показано ниже:

enter image description here

Ответ 15

Это очень странно. Свойства Width и Height не сжимаются при запросе (либо в коде или с использованием листа свойств), но, видимо, они меняются.

Я заметил, что если я использую лист свойств и изменяю ширину от стандартного 15 до, скажем, 14, а затем BACK до 15, он исправляет его.

Код ниже работает для меня (и имеет забавный визуальный эффект на листе: вы нажимаете, он сжимается, экран мерцает, и он расширяется).

MY SOLUTION в коде (в событии клика для флажка):

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

Ответ 16

После поиска в сети наилучшим решением является сохранение файла как .xlsb(двоичный), а не .xlsm

Ответ 17

То, что я начал делать некоторое время назад, состояло в том, чтобы иметь единственный элемент, который задает размер всех моих элементов управления. Затем я могу запустить этот юг из любой точки кода, где элементы управления растут или сжимаются. Иногда бывает много лишней работы, но он не позволяет моим кнопкам съесть мою таблицу.

Ответ 18

Я не тестировал это, но я предполагаю, что это имеет отношение к свойству масштабирования (возможно, добавьте activewindow.Zoom = false).

Также можно сделать цикл для форм, определяющих .Placement = xlMove в workbook_open и window_activate, чтобы предотвратить изменение размеров фигур с помощью ячеек (но будет перемещаться вместе с ними). ​​

Я использую excel 2013 и никогда не имел этой проблемы, также я никогда не использую его удаленно..., просто пытаясь помочь с небольшими идеями.

Ответ 19

Возможно, я нашел исправление: " убедитесь, что все фигуры на листе имеют уникальные имена" (включая флажки/переключатели (элементы управления OLE), а также изображения и другие типы фигур... )

Поскольку проблема прерывистая, я не могу этого гарантировать. У меня есть две формы, которые теперь отлично работают с этим исправлением, но "два" - это очень маленький набор образцов, и это может быть просто совпадение. Тем не менее, это шаги, которые я предпринял:

Я перечислил все фигуры в лист проблем (wsForm) на чистый лист (Sheet1):

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

Затем я подсчитал каждое имя формы в столбце A, используя формулу в столбце G:

= СЧЕТЕСЛИ ($ A $2: $A $120, А2)

Очевидно, отрегулируйте диапазон, чтобы соответствовать... Затем вы можете фильтровать все фигуры, которые не имеют "1" в этом столбце. "Нижняя правая ячейка" помогает вам найти форму на вашем листе: переименуйте, выбрав фигуру, а затем введите новое уникальное значение в поле имени/ссылки в левом верхнем углу Excel.

Этот список фигур также помог найти некоторые "мертвые" фигуры (0 height или 0 width), которые были давно забыты и не использовались.

Я надеюсь, что это сработает для вас! В этом отношении... Надеюсь, это работает для ME для будущих случаев...

Ответ 20

Если вы хотите не показывать кнопку перемещения вперед и назад, вы можете поместить исходное место в свой код, а затем просто проверить на них. Отключайте обновление экрана при нажатии кнопки, проверьте, не отличается ли место размещения от элемента управления, измените его, если необходимо, снова включите обновление экрана

DP

Ответ 21

После того, как вы попытались найти множество решений на этой и связанных с ними сообщениях, я обнаружил, что решение другой проблемы, которую Microsoft разместило, также надежно работало над этой конкретной проблемой при ее применении определенным образом, по крайней мере, в контексте, который я работающих внутри. Я столкнулся с этими проблемами в разрешении, имеющем отношение к ноутбукам, которые у нас есть здесь и на ПК, когда я переключался на неродное разрешение. А именно, загрузка кнопок при большем, чем обычно, размере, увеличивается при нажатии, а текст и изображения в этих кнопках сокращаются (и, по крайней мере, настройка для текста осталась прежней, поэтому я не мог видеть, как можно программно изменить ее или в противном случае.) В моем случае это были нерегулярные проблемы. У меня были нерегулярные проблемы, хотя после использования предварительного просмотра, который опубликовал Microsoft для здесь. Я пробовал это и, похоже, работает.

Решение. Для Excel закройте приложение и удалите файл MSForms.exd с C:\Users{UserName}\AppData\Local\Temp\Excel8.0 в то время, когда вы разрешите просмотр кнопок. Вы также можете искать другие .exd файлы в локальном приложении AppData\Temp для других приложений Office.

Как я уже упоминал, это решение, предложенное Microsoft для другой проблемы - когда кнопки перестают работать после установки обновлений Dec'14. Здесь ссылка на эту статью. В этом случае это одноразовое исправление. Здесь вам может понадобиться делать это каждый раз, когда вы меняете разрешения.

Ответ 22

Группировка элементов управления работает для меня. Я бы поднял или прокомментировал, но я не позволю. Обратите внимание, что эта проблема часто возникает, если вы используете масштабирование дисплея W8 и имеете ноутбук с высоким разрешением и более старый монитор.

Ответ 23

Я нашел эту проблему для всех объектов (кнопок, текстовых полей и т.д.). Когда я печатаю/распечатываю несколько листов, все листы, кроме первого в последовательности, перемещают или изменяют размер объектов. После долгих испытаний самое простое решение для увеличения или уменьшения страницы и возврата к исходной настройке.

Ответ 24

У меня также была проблема с списками ActiveX, и я нашел следующее в другом месте, и, похоже, это работает до сих пор, и это кажется также самым простым решением, которое передается вместе с передачей электронной таблицы кому-то еще:

"В то время как ListBox имеет свойство IntegralHeight, побочный эффект которого имеет значение FALSE, будет держать этот элемент управления в заданном порядке, а в то время как командные кнопки обладают такими свойствами, как перемещение/размер с ячейками и т.д., другие элементы управления не так грациозны."

И у них есть еще несколько советов: http://www.experts-exchange.com/articles/5315/Dealing-with-unintended-Excel-Active-X-resizing-quirks-VBA-code-simulates-self-correction.html

Ответ 25

Я обнаружил, что проблема возникает только при включении режимов замораживания, которые обычно включаются в большинстве приложений, так как вы размещаете свои командные кнопки и т.д. в том месте, где они не прокручиваются вне поля зрения.

Решение, которое сработало, состояло в том, чтобы сгруппировать элементы управления, но также обеспечить, чтобы группа выходила за пределы области стоп-кадра. Я делаю это, добавляя элемент управления вне области замороженных окон, добавляя его в группу, но также скрывая элемент управления, чтобы вы его не видели.

Ответ 26

Теперь, используя Excel 2013, это происходит каждый раз, когда я расширяю свой экран во время работы Excel (и каждый раз, когда я удаляю расширение).

Исправление, которое я начал внедрять, - это использовать гиперссылки вместо кнопок, а один - открыть пользовательскую форму со всеми другими элементами управления ActiveX.

Ответ 27

Добавьте этот код в REG файл. Дважды щелкните и подтвердите. Перезапустите 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

Ответ 28

Попробуйте изменить настройку масштабирования на 100%, используя нижний слайдер правой руки. Исправлено это для меня на обоих мониторах разных размеров.

Ответ 29

Я нашел исправление, которое работает, и решает проблему для одного пользователя. Если вы не хотите читать мою небольшую написание, вы можете перейти прямо к решению.

RANT:

Я испытывал эту тупую проблему, так как динозавры. Тем временем у Microsoft было много ресурсов для выпуска бесчисленных крупных обновлений для пакета Office, но эта проблема остается без внимания. Это абсолютно бесит. У меня нет никакой причины обновляться, если такие базовые вещи не работают. Разумеется, кто-то из MS использует элементы управления ActiveX в Excel прямо на дисплее с высоким разрешением, не?

Я не испытывал этой проблемы на своем настольном ПК, не знаю, почему, но на моем Surface Pro 4 мои элементы ActiveX управляют бананами всякий раз, когда я нажимаю на них.

Сегодня я решил разобраться в этом. Я искал высоко и низко, пробовал каждое решение, предлагаемое на разных форумах (ни один из них не работает, кстати). Не имеет значения, сгруппированы ли элементы управления или нет, заблокированы или нет, исправлено исправление или нет.

Вчера у меня возникла еще одна проблема с вещами, которые плохо себя ведут в другом приложении под названием Traktor (программное обеспечение DJ), где элементы управления могли бы прыгать, когда масштабирование экрана было установлено на значение, которое не было точным кратным 100%. Пользователь нашел решение для редактирования режима совместимости для этого приложения. Поэтому я сделал то же самое для Excel, и это сработало! Теперь мои элементы управления остаются включенными, независимо от разрешения экрана и масштабирования.

РЕШЕНИЕ:

(убедитесь, что Excel не запущен)

  • Найдите EXCEL.EXE(в моей системе это можно найти в папке C:\Program Files\Microsoft Office\Office16\EXCEL.EXE)
  • Переименуйте "EXCEL.EXE" в "_EXCEL.EXE" (в основном измените его на что-то еще)
  • Щелкните правой кнопкой мыши переименованный файл EXCEL.EXE, затем перейдите в меню "Свойства" > "Совместимость" > "Настройки"
  • Установить Переопределить поведение масштабирования высокого DPI = Включено, а Масштабирование выполнено с помощью = Применение
  • Нажмите "ОК"
  • Переименуйте в "_EXCEL.EXE" обратно в "EXCEL.EXE"

Теперь Excel будет работать с собственным разрешением, а элементы управления ActiveX не будут ошибочными. Единственным недостатком является то, что Excel не будет реагировать на масштабирование экрана, поэтому все может выглядеть немного меньше, чем хотелось бы. На моем Surface Pro 4 более чем приемлемо

ПРИМЕЧАНИЯ:

1) Шаги 2 и 6 требуются с Excel 2016, потому что диалоговое окно свойств для EXCEL.EXE не предлагает вкладку Compatibility. После переименования вкладка становится доступной.

2). Это решение работает только на основе одного пользователя. То есть, если вы отправляете файл Excel с элементами управления ActiveX своим коллегам, элементы управления ActiveX не будут отображаться правильно в их системе, если они не изменят настройки режима совместимости.

3) После применения этого взлома ранее поврежденные файлы Excel, по-видимому, исправляются при их открытии, при этом все элементы управления восстанавливают свои первоначальные предполагаемые размеры.

Прошу протестировать и прокомментировать, я надеюсь, что это может помочь кому-то, ура!

Ответ 30

У меня такая же проблема. В моем случае я мог бы воспроизвести его на 100% в одном файле, но это было непоследовательно в практически идентичном файле. Я также обнаружил, что ошибка размера не была постоянной - я мог сохранить и снова открыть файл, чтобы восстановить внешний вид кнопки. Я также мог бы создать новое окно, а затем сбросить поврежденное окно. Я использую конфигурацию одного монитора.

Для меня кнопка изменилась, когда я обратился к листу HPageBreaks. Я смог избежать проблемы, временно изменив вид окна следующим образом:

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