Преуспеть:невероятное Сжатие и Расширение Элементов управления

StackOverflow https://stackoverflow.com/questions/1573349

Вопрос

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

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

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

Это было полезно?

Решение

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

Когда это происходит, проблема может стать настоящим кошмаром, но случается это время от времени.

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

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

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

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

Другие советы

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

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

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

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

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

СНАЧАЛА установите исправление Microsoft 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), не решили проблему для меня с 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, 32 БИТ, ВЕРСИЯ 1802, СБОРКА 9029.2167]

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

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

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

  2. Зайдите в Настройки – Дисплей.
  3. Слева нажмите ссылку «Пользовательское масштабирование» в разделе «Масштаб и макет».
  4. Откроется страница «Пользовательский макет».Укажите новое значение процента масштабирования.[ИСПОЛЬЗУЙТЕ 100] !!...и вуаля.Закройте и снова откройте 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 (но только после нажатия кнопки.АКА, я нажимаю кнопку, код выполняется, оставляю указатель мыши на кнопке, а затем, как только я перемещаю мышь, текст увеличивается)
  • Поле ввода текста 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 исправит это!!!).Надеюсь, это поможет другим.

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

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

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

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

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

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

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

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

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

Поскольку проблема носит периодический характер, я не могу этого гарантировать.Благодаря этому исправлению у меня теперь есть две формы, которые работают нормально, но «две» — это очень маленький набор образцов, и это может быть просто совпадением.Тем не менее, я предпринял следующие шаги:

Я перечислил все фигуры из листа задач (wsForm) на чистом листе (Лист1):

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,A2)

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

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

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

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

ДП

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

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

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

Группировка элементов управления, похоже, работает для меня.Я бы проголосовал за или прокомментировал, но ТАК мне не позволяет.Обратите внимание, что эта проблема часто возникает, если вы используете масштабирование дисплея 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

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

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

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

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

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

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% с помощью правого нижнего ползунка.Исправлено для меня на обоих мониторах разных размеров.

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

РАЗГЛАГОЛЬСТВОВАТЬ:

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

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

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

Вчера у меня возникла еще одна проблема с неправильным поведением в другом приложении под названием Traktor (DJ software), где элементы управления перескакивали с места на место, когда масштабирование дисплея было установлено на значение, не кратное 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 коллекция.Мне удалось избежать этой проблемы, временно изменив вид окна следующим образом:

ActiveWindow.View = xlPageBreakPreview
  ' do pagination stuff using HPageBreaks
ActiveWindow.View = xlNormalView
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top