Excel中:难以置信的收缩和扩大控制(Excel: the Incredible Shrinkin

2019-08-18 10:49发布

偶尔,我会横跨从魔法按钮或列表框它随着时间的推移更大或更小遭受电子表格发生。

在代码中没有什么是指示这一点。

有其他人经历过这样的快乐?

Answer 1:

这个问题似乎涉及到了Windows处理在监视器上的非本地分辨率,并且可以通过多种方式来避免

这个问题可以是一个完整的噩梦,当它发生,但它只是间断性地发生。

我们最近已用于测试由几十人使用的Excel工作表,并已开发的原因和一些可能的修复是一个好主意。

原因似乎与到屏幕比其原始分辨率以外的东西使用的任何设置。 如果用户插入外接显示器连接到一台笔记本电脑,不仔细选择所产生的屏幕配置这可以很容易地发生。 例如,如果一台笔记本电脑插入投影仪(或许一个旧与天然1024由768显示),但是笔记本电脑是一个1280×800和用户选择复制的显示,而不是在“连接到延伸它(设置投影仪”或‘在视窗7显示’控制面板),其结果是在两个屏幕上的不可预测的,并且通常不令人满意的图像与两个非本机分辨率。 我们发现,这些设置几乎总是导致严重的问题与Excel按钮,特别是ActiveX控件。 有时候,反复点击,他们缩小到不可读性; 其他时候,他们扩大到覆盖整个屏幕。

大多数情况下,当我们指导用户使用的扩展显示设置和结果是两个屏幕都使用原生分辨率,我们没有看到这个问题。

也有基于代码的方式,以尽量减少问题。 我们尝试重置按钮并单击时控件的位置和大小(如果你有很多按钮,它增加了很多繁琐的代码)。 这有时工作。 我们也试图从真到假,回切换自动调整大小属性(这个作品手工开发人员模式),这解决多个实例,但不是很明显所有。



Answer 2:

找到了症结是人们通过远程桌面访问的计算机上打开spreasheet,还有是在本地和远程计算机之间的屏幕分辨率的差异。 这会影响可从控制工具箱的控制,但没有体验到使用一个老同学的形式按钮控制的问题,所以我不满意的答案是使用。



Answer 3:

这一直是困扰我多年,开和关。 有许多修复的身边,但他们似乎碰运气。 它仍然在Excel 2010中出现(发生在我2014年5月),并通过一些报道在Excel 2013仍然发生。 我已经找到了最好的说明,我的状况相一致,至少(Excel 2010中,不涉及RDP,不涉及打印预览)是在这里:

微软的Excel支持团队博客:点击或进行打印预览时,ActiveX和窗体控件调整自己(在Excel 2010中)

(这可能不是帮助的Excel 2013对不起用户)

编辑:在案件的TechNet链接添加详细不断耗尽,TechNet文章说:

首先安装微软的修补程序2598144为Excel 2010,可得: 在这里 。

其次,如果你的症状是 “一个ActiveX按钮更改为不正确的尺寸后,你点击它在Excel工作表2010”,那么你应该:

  • 单击开始,单击运行,在打开框中键入regedit,然后单击确定。
  • 找到并选中下面的注册表子项HKEY_CURRENT_USER \软件\微软\办公室\ 14.0 \ EXCEL \选项
  • 在编辑菜单,指向新建,然后单击DWORD(32-位)值。
  • 键入LegacyAnchorResize,然后按Enter键。
  • 在详细信息窗格中,右键单击LegacyAnchorResize,然后单击修改。
  • 在数值数据框中,键入1,然后单击确定。
  • 退出注册表编辑器。

还是其次,如果你的症状是 “的按钮形式的控制不正确的工作簿时在Excel 2010中查看工作簿的打印预览后,显示”,那么你应该:

  • 单击开始,单击运行,在打开框中键入regedit,然后单击确定。
  • 找到并选择下面的注册表子项:HKEY_CURRENT_USER \ SOFTWARE \微软\办公室\ 14.0 \ EXCEL \选项
  • 在编辑菜单,指向新建,然后单击DWORD(32-位)值。
  • 键入MultiSheetPrint,然后按Enter键。
  • 在详细信息窗格中,右键单击MultiSheetPrint,然后单击修改。
  • 在数值数据框中,键入1,然后单击确定。
  • 再次选择下面的注册表子项:HKEY_CURRENT_USER \ SOFTWARE \微软\办公室\ 14.0 \ EXCEL \选项
  • 在编辑菜单,指向新建,然后单击DWORD(32-位)值。
  • 键入LegacyAnchorResize,然后按Enter键。
  • 在详细信息窗格中,右键单击LegacyAnchorResize,然后单击修改。
  • 在数值数据框中,键入1,然后单击确定。
  • 退出注册表编辑器。

还是其次,如果你的症状是 “一个ActiveX按钮可以查看工作表的打印预览后改为不正确的大小在Excel工作表2010”,那么你应该:

  • 单击开始,单击运行,在打开框中键入regedit,然后单击确定。
  • 找到并选择下面的注册表子项:HKEY_CURRENT_USER \ SOFTWARE \微软\办公室\ 14.0 \ EXCEL \选项
  • 在编辑菜单,指向新建,然后单击DWORD(32-位)值。
  • 键入LegacyAnchorResize,然后按Enter键。
  • 在详细信息窗格中,右键单击LegacyAnchorResize,然后单击修改。
  • 在数值数据框中,键入1,然后单击确定。
  • 退出注册表编辑器。

祝好运。 这个问题是这样的痛苦......



Answer 4:

这个问题其实是由于屏幕分辨率。 最常见的是当用户在使用Excel应用程序连接到投影仪或WebEx的发生。

一个简单的解决这个问题是要求用户重新启动他们的机器没有任何外围连接(投影机),然后再次打开Excel应用程序。



Answer 5:

该修正前面所讨论的,编程调整/后点击事件重新定位的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 \软件\微软\办公室\ 14.0 \共同
  5. 在编辑菜单,指向新建,然后单击项。
  6. 键入绘图,然后按Enter键。
  7. 在编辑菜单,指向新建,然后单击DWORD值。
  8. 键入UpdateDeviceInfoForEmf,然后按Enter
  9. 用鼠标右键单击UpdateDeviceInfoForEmf,然后单击修改。 10.In数值数据框中,键入1,然后单击确定。
  10. 在文件菜单上,单击退出以关闭注册表编辑器。


Answer 6:

难道说按钮被定义为坚持,而不是自由浮动的小区的角落,?

检查它与

格式| 属性| 物体定位

而选择什么,但“移动和大小与细胞”



Answer 7:

我的显示器都出现在原始分辨率进行设置,加深了其中的奥秘。 然而,我发现,做一些按钮(移动或调整)以某种方式解决该问题。 这个程序可以自动移动,然后恢复原来的设置。

下面的代码看起来解决这个问题,对于按钮的至少。

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


Answer 8:

我有这个问题几次,来解决我做了以下内容:

  1. 通过搜索我的C:\驱动器具有扩展名的任何文件“.exd”
  2. 删除这些文件(它是好的,这样做)
  3. 实现代码,重新尺寸各片打开时的ActiveX对象

我发现这个问题是造成一切,我们插入的笔记本电脑变成一个投影仪和保存的文件。 然后每次问题出来了,我只是去重复步骤1和2,我的ActiveX对象再次表现



Answer 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


Answer 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


Answer 11:

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

我有同样的问题, 我可以通过定制在窗口10中,64个比特的显示缩放解决问题 。 这是extremelly简单,它适用于单个用户。 只要按照下面的说明,你将拥有所有的表单控件,板材形状,数字和ActiveX控件回到他们原来的大小。 无需编码或做高级的欺骗/魔法/黑客。 如果提供的链接被打破,只是重复这些步骤。

  1. 要设置显示自定义缩放比例在Windows 10,你需要做到以下几点。

    打开设置。

  2. 进入设置 - 显示。
  3. 在左侧,点击下的“规模和布局”自定义缩放链接。
  4. 自定义版式页面将被打开。 指定缩放%的新值。 [USE 100] !! ......瞧。 关闭并重新打开Excel。

这是一个古老的职位,但我希望它能帮助谁是处理这个恼人并强调Excel的问题的人。

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



Answer 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


Answer 13:

我碰到这个问题,请在Excel 2010中所有的时间(它总是把我带回到这个线程),虽然我还没有找到一个修复100%,我相信我有一些信息,可以帮助别人。

虽然繁琐玩弄的按钮,我发现每个对象的不同事件造成不同的问题。 例如,

  • 按钮 - 按钮的大小将缩小在MouseDown事件
  • 按钮B - 文本将扩大在MouseMove事件(但被点击的按钮后,才AKA,我点击一个按钮,代码执行,离开鼠标悬停在按钮上,然后当我移动鼠标的文本会。放大)
  • 文本输入框 - 文本将扩大在MouseUp事件
  • 文本输入盒子B - 文本将扩大在LostFocus事件

这对我的作品唯一的解决办法是编写代码为这是造成随机调整大小的每个对象事件的大小/文字复位。 是这样的...

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为假

是的,这是耗时和繁琐,因为它必须与每个对象完成的,但它是对我的作品的唯一的解决方法(它似乎比等待微软解决这一更快的修复!!!)。 希望它可以帮助别人。

我希望别人有所帮助



Answer 14:

我注意到,以上答案都不对系绳控制的行/列。 这已经很干净很适合我。 基本上你“措施”在希望的对象去,然后就在此设置在片激活码。 在下面的例子中,按钮会一直扣到覆盖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

其结果将是这样的:



Answer 15:

这是非常奇怪的。 查询时(无论是在代码或使用特性片)的宽度和高度属性不收缩,但显然它们确实发生变化。

我注意到,如果我使用属性表,并从标准的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


Answer 16:

搜索网后,接缝最好的解决办法是将文件保存为.xlsb(二进制),而不是.XLSM



Answer 17:

我开始做了一段时间后是有一个单一子,设置我的所有控件的大小。 那么我可以在控件增长或收缩代码的任何点运行此子。 它有时很多额外的挑剔工作,但它使我的按钮从吃我的电子表格。



Answer 18:

我没有测试这一点,但我想这与变焦性能做(也许添加activewindow.Zoom = false )。

还可以做环形状上的至极限定.Placement = xlMove上workbook_open和window_activate,这是为了防止形状从与细胞大小调整(但将与他们移动)。

我使用的Excel 2013和从未有过这个问题,也从来没有我...远程使用它,只是想帮助小创意



Answer 19:

我可能已经找到了解决:“ 确保在工作表上所有的形状具有唯一名称 ”(包括复选框/单选按钮(OLE控件),以及图片和其他形状类型...)

因为这个问题是间歇性的,我不能保证这一点。 我有两种形式,现在工作正常使用此修复程序,但“二”是一个非常小的样本集,可能只是巧合。 从来没有少,这些都是我的步骤了:

余列在问题片(wsForm)上的空白纸张(Sheet 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列的公式:

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

显然,调整范围,以适应......然后,您可以在不在此列有一个“1”,所有的形状进行筛选。 在“右下细胞”可以帮助你找到工作表上的形状:通过选择形状,然后在名称/参考框的Excel左上方输入新的独特的价值重新命名。

这种形状名单也帮助寻找这是早已被人遗忘的和未使用一些“死”的形状(高度为0或0宽度)。

我希望这对你的作品! 对于这个问题......我希望我的作品对未来发生...



Answer 20:

如果你想不显示按钮来回移动,你可以把原来放置到你的代码,然后只需核查一下。 关闭屏幕更新按钮被点击时,检查,看看是否放置是控制不同,它改回来,如果需要的话,把屏幕刷新回

DP



Answer 21:

大量尝试就这个问题和相关岗位的解决方案之后,我发现,解决不同的问题,微软已经发布时,以特定的方式至少我内工作环境中应用,也可靠地工作对于此问题。 我经历了一个原生分辨率这些问题,我们在这里,每当我切换到非原生分辨率的PC上的笔记本电脑。 也就是说,按钮装在一个比正常尺寸,点击时越来越大,文本和图像在这些按钮较大收缩(至少文本的设置保持不变,所以我看不到任何方式改回编程或以其他方式)。这些都没有在我的情况下,间歇性的问题。 我已经使用,虽然微软已经发布了一个解决方案打印预览后间歇性的问题在这里 。 我试过这样做,它似乎是工作。

解决办法:对于Excel,关闭应用程序,并删除从MSForms.exd文件C:\Users{UserName}\AppData\Local\Temp\Excel8.0 ,同时你也可以在要查看按钮的分辨率。搜索在您的本地应用程序数据\ Temp文件夹等.exd文件其他Office应用程序。

正如我所说,这是一个不同的问题提出了微软的解决方案 - 在安装了十二月'14后更新的按钮停止工作。 这里的链接到这篇文章。 在这种情况下,这是一个一次性的修补程序。 在这里,你可能需要在每次改变分辨率时间去做。



Answer 22:

分组对照似乎为我工作。 我会给予好评或发表评论,但SO不会让我。 需要注意的是,这种问题经常出现,如果你使用W8显示比例,具有较高分辨率的笔记本电脑和老式显示器。



Answer 23:

我已经在所有对象(按钮,文本框等)发现了这个问题。 当我打印/打印预览多张,除了该序列中的第一个所有片材都移动或调整大小的对象。 多的测试后,在页面的最简单的解决方案放大向上或向下,并返回到原来的设置。



Answer 24:

我不得不使用ActiveX列表框的问题也和在别处找到了下面的,它似乎工作至今,它也似乎通过发放电子表格给别人的时候一起传输远最简单的办法:

“虽然列表框具有IntegralHeight属性一个FALSE设置的,其副作用将保留该控制从去歪斜,并且当命令按钮具有诸如移动/尺寸与细胞等的特性,其他控制不如优雅”。

他们有一些建议: http://www.experts-exchange.com/articles/5315/Dealing-with-unintended-Excel-Active-X-resizing-quirks-VBA-code-simulates-self-correction.html



Answer 25:

我发现,问题似乎只在冻结窗格开启时,通常会在大多数的应用程序,你会把你的命令按钮等在不滚动视图以外的位置发生。

已为待加工的解决方案是,把控制,还要确保组超出冻结窗格区域。 我加入了冻结窗格区域之外的控制,将其添加到组,但也隐藏控制,所以你没有看到它这样做。



Answer 26:

现在使用Excel 2013和发生这种情况每次我同时运行Excel(我每次去掉扩展名)致以显示。

我已经开始实施的解决方法是使用超链接代替按钮和一个打开与其他所有的ActiveX控件在用户窗体。



Answer 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


Answer 28:

尝试使用右下角滑块改变缩放设置为100%。 固定它,我对不同大小的两个监视器。



Answer 29:

我发现一个可行的修复和解决问题为单个用户。 如果你不想看我的小夸夸其谈,你可以直接跳到解决方案。

RANT:

我已经遇到了这个愚蠢的问题,因为恐龙。 在此期间,微软有充足的资源释放无数重大更新的Office套件,但这个问题就得到解决。 这绝对是令人气愤。 我没有任何理由这样当基本的东西不起作用升级。 肯定有人在MS使用ActiveX控件在Excel右一个高分辨率显示器上,不是吗?

我没有经历过我的台式电脑,没有线索,为什么在这个问题上,但在我的面时,我按他们临4个我的ActiveX控件去香蕉。

今天,我决定去这条底线。 我搜索高,低,试过提出了各种论坛(其中没有工作的方式)每一个解决方案。 如果控制装置集中与否,锁定或没有,安装修补程序或不没关系。

昨天,我与东西叫做拖拉机(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. 点击OK
  6. 重命名为“_EXCEL.EXE”回“EXCEL.EXE”

现在,Excel将在其原生分辨率下运行和ActiveX控件不会走歪。 唯一的缺点是,Excel将不缩放屏幕回应,这样的事情可能看起来有点小于一想。 在我临面4比接受

笔记:

1)步骤2和6需要使用Excel 2016,因为属性对话框EXCEL.EXE不提供兼容性选项卡。 更名后,标签变为可用。

2)该解决方案仅适用于一个用户的基础上。 也就是说,如果你发送一个包含的ActiveX一个Excel文件控制你的同事,ActiveX控件将无法正常在其系统上,除非他们改变了兼容模式设置显示。

3)运用这个技巧后,以前损坏的Excel文件中出现自我修复,当你打开他们,所有控件恢复其原来预期的尺寸。

请测试和评论,我希望这可以帮助别人,干杯!



Answer 30:

我有同样的问题有时。 就我而言,我可以复制它100%上的一个文件,但它在几乎相同的文件是不一致的。 我还发现,尺寸误差是不是永久性的 - 我可以保存并重新打开该文件来恢复按钮的外观。 我还可以创建一个新的窗口,然后丢弃损坏的窗口。 我用一台显示器配置。

对我来说,按钮时,我访问表的HPageBreaks集合大小。 我能够通过如下临时改变窗口视图,以避免该问题:

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


文章来源: Excel: the Incredible Shrinking and Expanding Controls