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

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

ничто в коде не указывает на это.

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

30 ответов


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

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

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

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

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

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


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


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

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

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

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

сначала Установите исправление Microsoft 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\параметры
  • в меню Правка выберите пункт Создать, а затем щелкните значение DWORD (32-разрядное).
  • введите LegacyAnchorResize и нажмите клавишу Ввод.
  • в области сведений щелкните правой кнопкой мыши LegacyAnchorResize и выберите команду Изменить.
  • в поле Значение введите 1 и нажмите кнопку ОК.
  • Выход Из Редактора Реестра.

или во-вторых, если ваш симптом " An Кнопка ActiveX изменяется на неправильный размер на листе Excel 2010 после просмотра предварительного просмотра листа", то вы должны:

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

удачи. Этот вопрос-такая боль...


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

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


исправления, рассмотренные ранее, программно изменение размера / перемещение активных элементов управления 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. в меню Файл выберите команду выход, чтобы закрыть редактор реестра.

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

проверьте это с

Формат / Свойства / Позиционирование Объекта

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


все мои мониторы, похоже, настроены на собственные разрешения, что углубляет тайну. Однако я обнаружил, что делать что-то с кнопкой (перемещение или изменение размера) каким-то образом устраняет проблему. Эта процедура автоматизирует перемещение, а затем восстанавливает исходное значение.

следующий код, похоже, решает проблему, по крайней мере, для кнопок.

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 обратно к исходному размеру. Нет необходимости кодировать или делать advanced обман / волшебство / взломы. Если ссылка не работает, просто повторите эти шаги.

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

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

  2. перейдите в раздел Настройки-Дисплей.
  3. слева щелкните ссылку Пользовательское масштабирование в разделе "масштаб и макет".
  4. откроется страница пользовательский макет. Укажите новое значение для scaling percent. [Использовать 100] !! ... и вуаля. Близкий и повторно откройте Excel.

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

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


Я постоянно сталкиваюсь с этой проблемой в Excel 2010 (что всегда возвращает меня к этому потоку), и хотя я не нашел исправления 100%, я считаю, что у меня есть информация, которая может помочь другим.

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

  • кнопка A-размер кнопки будет уменьшаться на mousedown событие
  • кнопка B-текст увеличит событие MouseMove (но только после нажатия кнопки. Ака, я нажимаю кнопку, код выполняется, оставляю мышь зависать над кнопкой, а затем, как только я перемещаю мышь, текст будет увеличиваться)
  • поле ввода текста 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, чтобы исправить это!!!). Надеюсь, это поможет другим.

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


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

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

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

мой Решение в коде (на событии click для флажка):

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


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


Я не тестировал это, но я думаю, что это связано со свойством zoom (возможно, add activewindow.Zoom = false).

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

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


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

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

Я перечислил все фигуры в задаче лист (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:

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

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

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

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


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

DP


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

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

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


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


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


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

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

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


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

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


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

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


добавьте этот код в a .reg-файл. Дважды щелкните и подтвердите. Перезапустите Excel.

Windows Registry Editor Version 5.00

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

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

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


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

RANT:

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

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

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

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

устранение:

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

  1. найдите EXCEL.EXE (в моей системе это можно найти по адресу C:\Program файлы\Microsoft Office\Office16\EXCEL.EXE)
  2. переименовать " EXCEL.EXE " to " _EXCEL.EXE " (в основном измените его на что-то другое)
  3. щелкните правой кнопкой мыши переименованный EXCEL.EXE-файл, Затем перейдите на вкладку Свойства > совместимость > раздел настроек
  4. Set Override high DPI масштабирование поведение = Включено и масштабирование выполняется = Применение
  5. нажмите OK
  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 коллекция. Я смог чтобы избежать проблемы, временно измените вид окна следующим образом:

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

некоторые из этих проблем могут быть вызваны изменением размера элементов управления при заполнении. Я склонен к повороту IntegralHeight свойство элементов управления, таких как списки от True (по умолчанию) до False, чтобы предотвратить автоматическое изменение высоты элемента управления во время выполнения.