Excel:令人难以置信的收缩和扩展控制
-
21-09-2019 - |
题
有时,我会遇到一个电子表格,其中的魔法按钮或列表框会随着时间的推移而变大或变小。
代码中没有任何内容指示这一点。
还有人经历过这种快乐吗?
解决方案
<强>这个问题似乎涉及的方式Windows处理在监视器上的非本机分辨率和可以以几种方式来避免强>
的问题可以是一个完整的恶梦当它发生时,但它只是发生间歇。
我们一直在测试新的Excel工作表中使用的几十人,并已开发的原因和一些可能的修复是一个好主意。
原因似乎与到屏幕比其原始分辨率以外的东西使用的任何设置。如果用户插入外接显示器连接到一台笔记本电脑,不仔细选择所产生的屏幕配置这可以很容易地发生。例如,如果一台笔记本电脑插入投影仪(或许一个旧与天然1024由768显示),但是笔记本电脑是一个1280×800和用户选择的重复强>的显示,而不是<强>延伸强>它(在“连接到投影仪”,或在Windows 7“显示”控制面板设置),其结果是在非本机分辨率与两个在两个屏幕上的不可预测的,并且通常不令人满意的图像。我们发现,这些设置的总是的导致严重的问题与Excel按钮,特别是ActiveX控件。有时候,反复点击,他们缩小到不可读性;其它时候它们膨胀以覆盖整个屏幕。
大多数情况下,当我们指导用户使用的延伸强>显示设定,其结果是两个画面都使用原生分辨率,我们看不到的问题。
有也基于代码的方式来最小化该问题。我们尝试重置按钮并单击时控件的位置和大小(如果你有很多按钮,它增加了很多繁琐的代码)。这有时工作。我们也尝试从真正的自动调整大小属性切换为虚假和背面(这个作品手工开发人员模式),该修复程序的详细情况,但不是很明显所有。
其他提示
发现的原因是人们通过远程桌面访问的计算机上打开spreasheet,并且存在为在本地和远程计算机之间的屏幕分辨率的差。这会影响可从控制工具箱中的控制,但仍使用旧的学校形式的按钮控制,遇到问题,所以我不满意的答案是使用。
这已经困扰我几年,和关闭。有一定数量的修正,但它们似乎打错过。它仍然发生在Excel2010年(发生在我身上的事情可以2014年),并仍然发生在Excel2013年通过的一些报告。最好的说明我已经找到匹配我的情况至少(Excel2010年,没有RDP的参与,没有印刷预参与)是在这里:
Microsoft Excel支持团队的博客:件和形式的控制调整自己的点击时,或在做一个打印预览(以Excel2010年)
(这可能不会有助于用户使用的Excel2013对不起)
编辑:增加的详细情况的网链接曾经去死了,technet文章中说:
首先安装微软修补程序2598144Excel2010年,available: 在这里,.
其次,如果你的症状是 "一件按钮变化的不正确的尺寸后点击,它在Excel2010年的工作表",然后你应该:
- 点击开始,点击运行,型regedit在打开箱子,然后点击"确定"。
- 找到并选择下面的注册子项注册表\软件\微软\办事处\14.0\Excel\的选择
- 在编辑菜单指向新,然后点击双字(32-bit)的价值。
- 类型LegacyAnchorResize,然后再按进入。
- 在详细信息窗格,右击LegacyAnchorResize,然后点击修改。
- 在值数据中,1型,然后点击"确定"。
- 出口注册编辑器。
或者其次,如果你的症状是 "一个按钮形式的控制是正确显示在工作簿之后你查看打印的预览本工作簿,在Excel2010年",然后你应该:
- 点击开始,点击运行,型regedit在打开箱子,然后点击"确定"。
- 找到并选择下面的注册子项:注册表\软件\微软\办事处\14.0\Excel\的选择
- 在编辑菜单指向新,然后点击双字(32-bit)的价值。
- 类型MultiSheetPrint,然后再按进入。
- 在详细信息窗格,右击MultiSheetPrint,然后点击修改。
- 在值数据中,1型,然后点击"确定"。
- 选择下面的注册子再次:注册表\软件\微软\办事处\14.0\Excel\的选择
- 在编辑菜单指向新,然后点击双字(32-bit)的价值。
- 类型LegacyAnchorResize,然后再按进入。
- 在详细信息窗格,右击LegacyAnchorResize,然后点击修改。
- 在值数据中,1型,然后点击"确定"。
- 出口注册编辑器。
或者其次,如果你的症状是 "一件按钮被改变为一个不正确的尺寸在Excel2010年的工作表之后,你看打印的预览本工作表",然后你应该:
- 点击开始,点击运行,型regedit在打开箱子,然后点击"确定"。
- 找到并选择下面的注册子项:注册表\软件\微软\办事处\14.0\Excel\的选择
- 在编辑菜单指向新,然后点击双字(32-bit)的价值。
- 类型LegacyAnchorResize,然后再按进入。
- 在详细信息窗格,右击LegacyAnchorResize,然后点击修改。
- 在值数据中,1型,然后点击"确定"。
- 出口注册编辑器。
好运气。这个问题是这样的痛苦...
这个问题实际上是在由于屏幕分辨率。最常用它在使用Excel应用程序当用户连接发生的投影仪,或的WebEx。
一个简单的解决这个问题是要求用户重新启动他们的机器没有任何外围连接(投影机),然后再次打开Excel应用程序。
在修正讨论的早些时候,通过程序调整/重新定位的活动X控制后点击事件,或修改登记册(D词LegacyAnchorResize),没有解决的问题,我Excel2010/Windows7 64位。
该解决方案我在这里找到:https://support.microsoft.com/en-us/kb/838006
为Excel2010年的链接指示:
- 退出所有正在运行的程序。
- 点击开始,点击运行,在开启盒子、类型regedit,然后点击"确定"。
- 查找,然后点击下注册的关键:
- 注册表\软件\微软\办事处\14.0\共同的
- 在编辑菜单指向新,然后点击的关键。
- 类型的绘图,然后再按进入。
- 在编辑菜单指向新,然后点击双值。
- 类型UpdateDeviceInfoForEmf,然后再按进入
- 右击UpdateDeviceInfoForEmf,然后点击修改。10.在值数据中,1型,然后点击"确定"。
- 在文件菜单点击出口要关闭登记册的编辑。
难道按钮被定义为棒至细胞的角部,而不是自由浮动?
与检查它
格式|属性|物体定位
和选择什么,但“与细胞的移动和尺寸”
我的监视所有出现在原始分辨率被设置,这加深了谜。然而,我发现,做一些按钮(移动或调整)以某种方式解决该问题。此例程自动移动,然后恢复到原来的设置。
下面的代码似乎解决这个问题,至少对于按钮。
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
我有这个问题的几次和解我做到如下:
- 通过搜索我的C:\驱动器的任何文件的扩展名为'.exd'
- 删除这些文件(它是好的,这样做)
- 执行代码,重新大小件物体中的每一个时间表是打开的
我发现这个问题引起的一切,我们插笔记本电脑进入一个投影仪和保存的文件。然后每次的问题来了我去只是重复的步骤1.和2。和我的插件对象的行为再次
我们只是解决了这个在公司层面通过添加下列模块的所有宏工作簿启用:
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专业加2016年,32位,版本1802,建立9029.2167]
我也有同样的问题 我可以解决的问题 通过自定义显示比在windows10 64位。这是extremelly简单和它作为一个单一的用户。只要按照下面的说明,你将所有形式的控制,薄片的形状、物件和控制回到他们原来的大小。没有必要编码或做高级欺骗/巫术/黑客。如果所提供的链接被打破,只是重复这些步骤。
设置显示的定义扩展在Windows10,你需要做到以下几点。
开设置。
- 去设置显示器。
- 在左边,点击的定义扩下的链接"规模和布局"。
- 该定义的布局的网页将被打开。指定一个新的价值缩%。[使用100]!!...并且瞧.关闭并重新开放。
这是一个古老的职位,但我希望它有助于任何人,谁是处理这恼人的,并强调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
我遇到这个问题的所有时间在Excel2010年(它总是给我带回到这个线)虽然我还没有找到一个解决100%,我相信我有一些信息,可以帮助他人。
虽然繁琐玩按钮我发现,不同的事件对每个对象是引起不同的问题。例如,
- 按钮A-的大小按钮将会缩小在MouseDown事件
- 按钮B的案文将扩大在鼠标移事件(但只有在按钮是点击。AKA,我按一个按钮,代码的执行,留下的老鼠上空盘旋钮,然后尽快,我将鼠的案文将扩大)
- 文本输入盒中的案文将扩大在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假
是的,这是费时和繁琐,因为它必须与每个目的,但这是唯一的修正是对我的作品 (并且它似乎是一个更快解决,比等待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
结果将出现如下所示:
这是非常奇怪的。查询时(无论是在代码或使用特性片)的宽度和高度属性不收缩,但显然它们DO变化。
我注意到,如果我使用属性表,并从标准的15改变宽度,比方说,14,然后返回到图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
)。
也可以做形状上的一个循环至极定义了workbook_open和window_activate .Placement = xlMove
,这是为了防止形状从与细胞大小调整(但将与他们移动)。
我使用的Excel 2013和从未有过这个问题,还我从来没有远程使用它......,只是想用小创意
帮助我可能已经找到了解决:“确保在工作表上所有的形状具有唯一的名称”(包括复选框/单选按钮(OLE控件),以及图片和其他形状类型... )
由于该问题是间歇性的,我不能保证这一点。我有两种形式现在用此修复程序工作正常,但“二”是一个非常小的样本集,可能只是巧合。从来没有少,这些步骤说明我把:
I中列出的问题片(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宽度)。
我希望这对你的作品!对于这个问题......我希望我的作品对未来发生...
如果你想不显示按钮来回移动,你可以把原来放置到你的代码,然后只需核查一下。关闭屏幕更新按钮被点击时,检查是否所述的放置是在控制不同,改回来,如果需要的话,上转屏幕更新回
DP
在尝试了这篇文章和相关文章中的许多解决方案之后,我发现,当以特定方式应用时,微软发布的另一个问题的解决方案也可以可靠地解决这个特定问题,至少在我正在工作的上下文中。我在笔记本电脑的本机分辨率中遇到了这些问题,每当我切换到非本机分辨率时,我就在 PC 上遇到了这些问题。也就是说,按钮加载的尺寸比正常尺寸大,单击时会变大,这些按钮中的文本和图像会缩小(至少文本的设置保持不变,所以我看不到任何方法以编程方式将其更改回来)或其他。)就我而言,这些并不是间歇性问题。尽管在使用打印预览后我遇到了间歇性问题,微软已经发布了解决方案 这里. 。我已经尝试过了,它似乎有效。
解决方案:对于 Excel,关闭应用程序并从中删除 MSForms.exd 文件 C:\Users{UserName}\AppData\Local\Temp\Excel8.0
而在您想要查看按钮的分辨率中。您还可以在本地 AppData emp 文件夹中搜索其他 Office 应用程序的其他 .exd 文件。
正如我所提到的,这是 Microsoft 针对不同问题提出的解决方案 - 安装 14 年 12 月更新后按钮停止工作。 这是该文章的链接。 在这种情况下,这是一次性修复。在这里,您可能需要在每次更改分辨率时执行此操作。
分组的控制似乎为我工作。我会给予好评或发表评论,但SO不会让我。需要注意的是这个问题的时候,如果你使用W8显示比例,具有较高分辨率的笔记本电脑和老式显示器,来了。
我已经在所有的对象(按钮,文本框等)发现了这个问题。当我打印/打印预览多张,除了该序列中的第一个所有片材都移动或调整大小的对象。多的测试后,在页面的最简单的解决方案放大向上或向下,并返回到原来的设置。
我也遇到了 ActiveX 列表框的问题,并在其他地方找到了以下内容,到目前为止它似乎有效,而且它似乎也是迄今为止在将电子表格交给其他人时转移的最简单的解决方案:
“虽然 ListBox 有一个 IntegralHeight 属性,其 FALSE 设置的副作用将防止该控件倾斜,并且虽然命令按钮具有诸如单元格移动/大小等属性,但其他控件则没有那么优雅。”
我发现,问题似乎只在冻结窗格开启时发生,通常会在大多数的应用程序,你会把你的命令按钮等的位置,他们不看滚动了。
这已经为待加工的解决方案是组的控件,还确保组延伸超出冷冻窗格区域。我加入了冻结窗格区域之外的控制,将其添加到组,但也隐藏控制,所以你看不到它做到这一点。
现在使用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%。固定它,我对不同大小的两个监视器。
我已经找到了一个修复工作,并解决了这个问题对于一个单一的用户。如果你不想要读我的小咆哮你可以直接跳到解决方案。
咆哮:
我一直遇到这种愚蠢的问题,因为恐龙。与此同时,微软已经有足够的资源释放的无数主要新的办公套件,但这个问题得不到解决。这绝对是令人气愤。我没有任何理由的升级在基本的东西这样没有工作。肯定有人在使用MS件的控制,在Excel中的权利在一个高分辨率显示,不是吗?
我没有遇到这个问题上我的桌面电脑,没有线索为什么,但是在我的面亲我4件控制去香蕉每当我按他们。
今天我决定把这一点。我搜索了高低,尝试的每一个方案提出的各种论坛(其中没有工作的方式)。不要紧,如果控制分或不行,锁定或不修复程序安装或没有。
昨天,我有另一个问题与事情不在另一个程序,称为拖拉机(DJ软件),那里的控制跳来跳去的时候显示扩展定为一个价值,这不是一个确切的多100%。用户找到解决办法是编辑兼容性模式用于该应用程序。所以我做了同样的Excel和它的工作!现在我控制住放,无论显示决议和扩展。
方案:
(确保Excel是不运行)
- 找到EXCEL.EXE (在我的这个系统可以发现在C:\Program 文件\Microsoft Office\Office16\EXCEL.EXE)
- 重新命名"EXCEL.EXE"到"_EXCEL.EXE"(基本上改变它对别的东西)
- 右键重命名的EXCEL.EXE 文件中,然后转到特性>的兼容性标签>设置的部分
- 设定复盖高DPI比例的行为=启用,并扩大通过执行= 应用程序
- 点击OK
- 重新命名为"_EXCEL.EXE"回到"EXCEL.EXE"
现在Excel将运行在其本决议,并件的控制,不会出现差错。唯一的缺点是,Excel不会回复到屏幕上的扩展,因此事情可能看起来有点小于一个希望的。在我面临4超过可接受的
注:
1) 步骤2和6需要用Excel2016年,因为性对话EXCEL.EXE 不提供相容性标签。后重新命名,该选项变得可用。
2) 这种方案仅适用于有一个用户的依据。也就是说,如果你发送一个Excel文件,其中包含件的控制,以你的同事件的控制,不会显示正确他们的系统上,除非他们改变的兼容性模式的设置。
3) 申请后这种入侵、先前损坏的Excel文件的出现要修复自己,当你打开它们,所有的控制,恢复他们的原始意图方面。
请测试和评论,我希望这可以帮助别人,干杯!
我有同样的问题有时。就我而言,我可以复制它100%上的一个文件,但它在几乎相同的文件是不一致的。我还发现,尺寸误差是不是永久性的 - 我可以保存并重新打开该文件来恢复按钮的外观。我还可以创建一个新的窗口,然后丢弃损坏的窗口。我用一台显示器配置。
有关我,该按钮时我访问片的 HPageBreaks 强>集合大小。我能够通过临时改变的窗口视图,以避免该问题,如下所示:
ActiveWindow.View = xlPageBreakPreview
' do pagination stuff using HPageBreaks
ActiveWindow.View = xlNormalView