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

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

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

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

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

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

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

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

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

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

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

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

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

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

EDIT: добавление деталей в случае, когда ссылка на технологию уже мертва, в статье о технике говорится:

ПЕРВОЕ установить Microsoft Hotfix 2598144 для Excel 2010 , доступно здесь .

ВТОРОЕ, если ваш симптом: «Кнопка« ActiveX »изменяется на неправильный размер после нажатия на нее в листе Excel 2010», то вам необходимо:

  • Нажмите кнопку Пуск, выберите пункт Выполнить, введите 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 и нажмите кнопку ОК.
  • Закройте редактор реестра.

ИЛИ ВТОРИЧНО, если ваш симптом: «Когда вы просматриваете предварительный просмотр печати рабочего листа, кнопка« ActiveX »изменяется на неправильный размер в листе Excel 2010», то вам необходимо:

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

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

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

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

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

Решение для меня было найдено здесь: 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. Наберите «Рисование», а затем нажмите «Ввод».
  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, ВЕРСИЯ 1802, СТРОЙ 9029.2167]

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

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

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

  2. Перейдите в «Настройки» – «Экран».
  3. Слева щелкните ссылку «Пользовательское масштабирование» в разделе «Масштаб и макет».
  4. Откроется страница Custom Layout. Укажите новое значение для масштабирования процентов. [ИСПОЛЬЗОВАНИЕ 100] !! … и вуаля. Закройте и снова откройте Excel.

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

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

Я постоянно сталкиваюсь с этой проблемой в Excel 2010 (которая всегда возвращает меня в этот stream), и хотя я не нашел исправления на 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 это исправит !!!) . Надеюсь, это помогает другим.

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

Это очень странно. Свойства 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 

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

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

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

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

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

Возможно, я нашел исправление: « убедитесь, что все фигуры на листе имеют уникальные имена » (включая флажки / переключатели (элементы управления 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 высоты или 0 ширины), которые были давно забыты и не использовались.

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

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

DP

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

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

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

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

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

У меня возникла проблема также с списками 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

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

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

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

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

Добавьте этот код в 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 

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

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

RANT:

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

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

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

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

РЕШЕНИЕ:

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

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

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

ЗАМЕТКИ:

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

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

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

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

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

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

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

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

Некоторые из этих проблем могут быть вызваны изменением размера элементов управления при заполнении. I tend to the turn the IntegralHeight property of controls such as list boxes from True (default) to False to prevent automated resizing of the control height at runtime.

  • Повторение случайных величин в VBA
  • Дождитесь завершения команды оболочки
  • как объединить повторяющиеся строки и суммировать значения 3 столбца в excel
  • Не удается VBA записывать данные в ячейки Excel 2007/2010 внутри функции
  • Переместите каждую ячейку после столбца A на новую строку
  • Как я могу получить HTTP GET из Excel VBA для Mac 2011
  • VBA - обновление других ячеек с помощью пользовательской функции
  • Заполнение уникальных значений в массиве VBA из Excel
  • Запуск макроса Excel из внешнего Excel с помощью VBScript из командной строки
  • В чем разница между dim и set в vba
  • В чем разница между «Form Controls» и «ActiveX Control» в Excel 2010?
  • Давайте будем гением компьютера.