偶尔,我会遇到一个电子表格,它会受到魔法按钮或列表框的影响,这些按钮会随着时间的推移变大或变小。
代码中没有任何内容可以指示这一点。
还有其他人经历过这种快乐吗?
答案 0 :(得分:29)
问题似乎与Windows在显示器上处理非原生分辨率的方式有关,可以通过多种方式避免
问题可能是一场彻底的噩梦,但它只会间歇性地发生。
我们最近测试了几十个人使用的excel工作表,并且已经对原因和一些可能的修复有了很好的了解。
原因似乎与屏幕用于除原始分辨率以外的其他设置有关。如果用户将外部显示器插入笔记本电脑并且未仔细选择最终的屏幕配置,则可能很容易发生这种情况。例如,如果笔记本电脑插入投影仪(可能是原版1024 x 768显示器的旧投影机),但笔记本电脑是1280 x 800,用户选择复制显示而不是<强大>扩展它(在Windows 7中“连接到投影仪”或“显示”控制面板中的设置),结果是在两个屏幕上都具有不可预测且通常不令人满意的图像,并且都具有非原生分辨率。我们发现这些设置几乎总是导致Excel按钮出现严重问题,尤其是ActiveX控件。有时,在反复点击时,它们会缩小到不可读性;其他时候,他们扩展到覆盖整个屏幕。
大多数情况下,当我们指示用户使用扩展显示设置时,结果是使用原生分辨率的两个屏幕,我们看不到问题。
还有基于代码的方法来最小化问题。我们尝试在点击它们时重置按钮和控件的位置和大小(如果你有很多按钮,这会增加许多繁琐的代码)。这有时会奏效。我们还尝试将autosize属性从true切换为false并返回(这在开发人员模式下手动工作)并且这修复了更多实例,但显然不是全部。
答案 1 :(得分:11)
发现原因是人们在通过远程桌面访问的计算机上打开spreasheet,并且本地和远程计算机之间的屏幕分辨率存在差异。这会影响控件工具箱中可用的控件,但是使用旧的学校表单按钮控件仍然会遇到问题,所以我不满意的答案是使用它。
答案 2 :(得分:5)
多年来,这一直困扰着我。 周围有很多修复,但它们似乎很受欢迎。 它仍然出现在Excel 2010中(发生在2014年5月),并且仍然在某些报告中出现在Excel 2013中。 我发现的最佳描述至少符合我的情况(Excel 2010,不涉及RDP,不涉及打印预览)在这里:
(对于Excel 2013的用户来说,这可能没有用,对不起)
编辑:添加细节以防万一科技网络链接死了,technet文章说:
首先安装适用于Excel 2010的Microsoft Hotfix 2598144 ,可用:here。
第二,如果您的症状是&#34;在Excel 2010工作表中单击它后,ActiveX按钮会更改为不正确的大小&#34;,那么您应该:
OR SECONDLY,如果您的症状&#34;在Excel 2010&#34;中查看工作簿的打印预览后,工作簿中的按钮表单控件显示不正确,那么您应该:
OR SECONDLY,如果您的症状&#34;在您查看工作表&#34;的打印预览后,Excel 2010工作表中的ActiveX按钮更改为不正确的大小,那么您应:
答案 3 :(得分:5)
这个问题实际上是由于屏幕分辨率造成的。最常见的情况是,当用户使用excel应用程序连接到投影仪或WebEx时会发生这种情况。
此问题的一个简单解决方案是要求用户在没有任何外围设备连接(投影仪)的情况下重新启动计算机,然后再次打开Excel应用程序。
答案 4 :(得分:4)
前面讨论过的修补程序,在点击事件后以编程方式调整大小/重新定位Active X控件,或者修改注册表(使用D字LegacyAnchorResize),并没有使用Excel 2010 / Windows 7 64位解决问题
我的解决方案在这里找到:https://support.microsoft.com/en-us/kb/838006
对于Excel 2010,链接指示:
答案 5 :(得分:1)
我们刚刚在公司层面解决了这个问题,方法是将以下模块添加到所有支持宏的工作簿中:
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
答案 6 :(得分:1)
我注意到这些回答都没有将控件绑定到行/列。这对我来说非常干净。基本上,您可以“测量”想要对象移动到的位置,然后在工作表激活代码中将其设置在那里。在下面的示例中,按钮将始终对齐到覆盖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
结果将是这样的:
答案 7 :(得分:1)
我一直在Excel 2010中遇到这个问题(这总是让我回到这个话题),尽管我没有找到100%的修复程序,但我相信我有一些可以帮助他人的信息。
在繁琐的按钮操作过程中,我发现每个对象的不同事件都导致了不同的问题。例如,
对我来说唯一有效的解决方案是编写代码,以重置导致随机大小调整的每个对象事件的大小/文本。像这样...
其中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修复此问题要快得多! !!)。希望它可以帮助其他人。
希望其他人对此有帮助
答案 8 :(得分:1)
这个问题非常令人沮丧,我的经验是通常在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
答案 9 :(得分:1)
[EXCEL PROFESSIONAL PLUS 2016,32BITS,VERSION 1802,BUILD 9029.2167]
我遇到了同样的问题,我可以解决问题,通过在Windows 10,64位中自定义显示缩放。它极其简单,适用于单个用户。只需按照下面的说明操作,您将所有表单控件,工作表形状,图形和ActiveX控件恢复为原始大小。无需编码或进行高级欺骗/巫术/黑客攻击。如果提供的链接中断,请重复这些步骤。
要在Windows 10中设置显示自定义缩放,您需要执行以下操作。
打开设置。
这是一篇很老的帖子,但我希望它可以帮助那些处理这个烦人且压力大的Excel问题的人。
https://winaero.com/blog/set-display-custom-scaling-windows-10/
答案 10 :(得分:1)
旧线程,但是我遇到了这个问题并通过首先将选项按钮组合在一起来解决问题,这些选项按钮存在问题,然后简单地在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
答案 11 :(得分:1)
是否可以将按钮定义为粘贴在单元格的角上,而不是自由浮动?
用
检查格式|属性|对象定位
并选择“移动并使用单元格调整大小”
答案 12 :(得分:1)
我已经有过几次这个问题,为了解决我做了以下事情:
我发现这个问题导致我们将笔记本电脑插入投影机并保存文件的所有内容。然后,每当问题出现时,我只是重复步骤1.和2.我的ActiveX对象再次表现
答案 13 :(得分:1)
我的显示器似乎都设置为原生分辨率,这加深了神秘感。但是,我发现对按钮进行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
答案 14 :(得分:0)
将此代码添加到.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
答案 15 :(得分:0)
尽管显然有多种原因导致这种现象,但仍有几个答案指出了缩放和屏幕分辨率方面的问题。一种解决方法是使用以下功能来调整控件的大小并将其锚定到特定的单元格:
Sub ResizeCombo(ByRef cbo As Shape, ByVal rw As Long, ByVal cl As Long, ByVal wid As Long)
cbo.Height = Intake.Cells(rw, cl).Height - 1
cbo.Top = Intake.Cells(rw, cl).Top + 1
cbo.Left = Intake.Cells(rw, cl).Left + 1
cbo.Width = wid
End Sub
Sub ResizeCheckbox(ByRef cbo As Shape, ByVal rw As Long, ByVal cl As Long)
cbo.Height = Intake.Cells(rw, cl).Height - 1
cbo.Top = Intake.Cells(rw, cl).Top + 1
cbo.Left = Intake.Cells(rw, cl).Left + 6
cbo.Width = Intake.Cells(rw, cl).MergeArea.Width - 7
End Sub
Sub ResizeCombos()
ResizeCombo Intake.Shapes("School"), 11, 1, 144
ResizeCheckbox Intake.Shapes("cbReading"), 70, 1
''ResizeCombo also works for option buttons
ResizeCombo Intake.Shapes("obGenderMale"), 20, 8, 45
ResizeCombo Intake.Shapes("obGenderFemale"), 20, 9,50
但是,最近,此替代方法停止了工作。我一直在努力反对它,直到我发现纸张的缩放比例已调整为105%!将其重置为100%可解决该问题。但是,如果用户需要更高的缩放级别怎么办?我发现调整大小后可以更改缩放比例,并且一切都保持原样。我的调用函数现在如下所示:
Sub refresh()
OldZoom = ActiveWindow.Zoom
ActiveWindow.Zoom = 100
Call ResizeCombos
ActiveWindow.Zoom = OldZoom
End Sub
到目前为止,它正在工作!
答案 16 :(得分:0)
我有一个类似的问题,但是我发现通过放大和缩小页面很快就解决了。因此,我将以下代码添加到宏的底部作为快速修复。我不是Excel专家,但它看起来还可以。更改底部数字应反映您的首选缩放。
ActiveWindow.Zoom = 100
ActiveWindow.Zoom = 90
答案 17 :(得分:0)
其中一些问题可能是由于控件在填充时会自行调整大小。我倾向于将控件(如列表框)的 IntegralHeight 属性从True(默认)更改为False,以防止在运行时自动调整控件高度的大小。
答案 18 :(得分:0)
这很奇怪。宽度和宽度查询时(在代码中或使用属性表),高度属性不会缩小,但显然它们会发生变化。
我注意到如果我使用属性表并将宽度从标准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
答案 19 :(得分:0)
搜索网后,它接缝最好的解决方案是将文件保存为.xlsb(二进制)而不是.xlsm
答案 20 :(得分:0)
我开始做的事情是让一个子设置我所有控件的大小。然后,我可以从控件增长或缩小的代码中的任何位置运行此子。它有时是很多额外的挑剔工作,但它让我的按钮不能吃掉我的电子表格。
答案 21 :(得分:0)
我有时会遇到同样的问题。在我的情况下,我可以在一个文件上100%复制它,但它在一个几乎相同的文件上是不一致的。我还发现大小错误不是永久性的 - 我可以保存并重新打开文件以恢复按钮的外观。我还可以创建一个新窗口,然后丢弃损坏的窗口。我使用单一的显示器配置。
对我来说,当我访问工作表的 HPageBreaks 集合时,按钮已调整大小。我可以通过暂时更改窗口视图来避免此问题,如下所示:
ActiveWindow.View = xlPageBreakPreview
' do pagination stuff using HPageBreaks
ActiveWindow.View = xlNormalView
答案 22 :(得分:0)
我找到了一个有效的解决方案,并解决了单个用户的问题。如果您不想阅读我的小咆哮,您可以直接跳到解决方案。
<强> RANT:强>
恐龙以来,我一直在经历这个愚蠢的问题。与此同时,微软已经拥有足够的资源来发布Office套件的无数重大更新,但这个问题没有得到解决。这绝对令人气愤。当这样的基本内容不起作用时,我没有任何理由升级。当然MS的某个人在高分辨率显示器上使用Excel中的ActiveX控件,不是吗?
我没有在台式机上遇到过这个问题,也没有找到原因,但是在我的Surface Pro 4上,只要点击它们,我的ActiveX控件就会变成香蕉。
今天我决定深究这一点。我搜索了高低,尝试了在各种论坛上提出的每个解决方案(顺便说一下,没有一个是有效的)。控件是否已分组,锁定与否,无论是否安装了修补程序都无关紧要。
昨天我在另一个名为Traktor(DJ软件)的应用程序中出现了另一个行为不端的问题,当显示缩放设置为不是100%的精确倍数时,控件会跳转。用户发现解决方案是编辑此应用程序的兼容性模式。所以我为Excel做了同样的事情,它工作了!现在我的控件保持不变,无论显示分辨率和缩放比例如何。
<强> SOLUTION:强>
(确保Excel未运行)
现在Excel将以其原始分辨率运行,ActiveX控件不会出错。唯一的缺点是Excel不会响应屏幕缩放,所以事情看起来可能比想要的要小一些。我的Surface Pro 4不仅仅是可以接受的
备注:强>
1) Excel 2016需要步骤2和6,因为EXCEL.EXE的“属性”对话框不提供“兼容性”选项卡。重命名后,该选项卡可用。
2)此解决方案仅适用于一个用户。也就是说,如果您向同事发送包含ActiveX控件的Excel文件,则除非他们更改兼容模式设置,否则ActiveX控件将无法在其系统上正确显示。
3)应用此hack后,以前损坏的Excel文件在打开时似乎会自行修复,所有控件都会恢复其原始预期尺寸。
请测试和评论,我希望这可以帮助别人,欢呼!
答案 23 :(得分:0)
尝试使用右下方的滑块将缩放设置更改为100%。在两台不同尺寸的显示器上为我修复了它。
答案 24 :(得分:0)
如果您希望不显示按钮来回移动,您可以将原始展示位置放入代码中,然后检查这些内容。单击按钮时关闭屏幕更新,检查控件上的放置是否不同,如果需要,将其更改回来,重新打开屏幕更新
DP
答案 25 :(得分:0)
现在使用Excel 2013,当Excel运行时(以及每次删除扩展程序时)都会扩展我的显示。
我开始实施的修补程序是使用超链接而不是按钮,而另一个用于打开包含所有其他activeX控件的用户窗体。
答案 26 :(得分:0)
我没有对此进行测试,但我猜这与缩放属性有关(可能会添加activewindow.Zoom = false
)。
也可以在workbook_open和window_activate上定义.Placement = xlMove
的形状上进行循环,这是为了防止形状使用单元格进行大小调整(但会随之移动)。
我正在使用excel 2013而且从来没有遇到过这个问题,我从来没有远程使用它...,只是想帮助小想法
答案 27 :(得分:0)
我发现只有当冻结窗格打开时才会出现问题,这通常会在大多数应用程序中出现,因为您将命令按钮等放在不滚动视图的位置。
可行的解决方案是对控件进行分组,同时确保组扩展到冻结窗格区域之外。我这样做是通过在冻结窗格区域外添加一个控件,将其添加到组中,但也隐藏控件,这样你就不会看到它。
答案 28 :(得分:0)
我也遇到了ActiveX列表框的问题,并在其他地方找到了以下内容,它似乎工作到目前为止,它似乎也是最简单的解决方案,在将电子表格交给其他人时转移:
&#34;虽然ListBox有一个IntegralHeight属性,其FALSE设置的副作用将使该控件不会歪斜,而命令按钮具有移动/大小与单元格等属性,其他控件是并不优雅。&#34;
答案 29 :(得分:0)
我可能找到了修复:&#34; 确保工作表上的所有形状都有唯一的名称&#34; (包括复选框/单选按钮(OLE控件)以及图片和其他形状类型......)
因为问题是间歇性的,我无法保证这一点。我现在有两种形式正常使用此修复程序,但是&#34;两个&#34;是一个非常小的样本集,可能只是巧合。从来没有,这些是我采取的步骤:
我在问题表(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
然后,我使用G列中的公式计算了A列中的每个形状名称:
<强> = COUNTIF($ A $ 2:$ A $ 120 A2)强>
显然调整范围以适应......然后你可以过滤掉所有没有&#34; 1&#34;在这个专栏中。 &#34;右下角的单元格&#34;帮助您在工作表上找到形状:通过选择形状重命名,然后在Excel左上角的名称/参考框中输入新的唯一值。
这个形状列表也帮助找到了一些&#34;死亡&#34;长期遗忘和未使用的形状(0高度或0宽度)。
我希望这适合你!就此而言......我希望它适用于未来发生的事情......
答案 30 :(得分:0)
我在所有对象(按钮,文本框等)中发现了这个问题。当我打印/打印预览多张纸时,除序列中第一张之外的所有纸张都移动或调整了对象的大小。经过大量测试后,最简单的解决方案是向上或向下缩放页面并返回原始设置。
答案 31 :(得分:0)
对控件进行分组似乎对我有用。我会upvote或评论,但不会让我。请注意,如果您使用W8显示缩放并具有高分辨率笔记本电脑和旧显示器,则会出现此问题。
答案 32 :(得分:0)
在尝试了这个和相关帖子的许多解决方案之后,我发现微软发布的另一个问题的解决方案在以特定方式应用时也能够可靠地解决这个特定问题,至少在上下文中我是在...工作。无论何时我切换到非原生分辨率,我都会在本机笔记本电脑的原始分辨率和PC上遇到这些问题。也就是说,按钮加载大于正常大小,单击时变大,这些按钮中的文本和图像缩小(至少文本设置保持不变,所以我看不到任何方式以编程方式更改它或者。)在我的情况下,这些并不是间歇性问题。虽然在使用Microsoft发布了here解决方案的打印预览后,我遇到了间歇性问题。我已经尝试过了,它似乎正在起作用。
解决方案:对于Excel,关闭应用程序并从C:\Users{UserName}\AppData\Local\Temp\Excel8.0
中删除MSForms.exd文件,同时在要查看按钮的分辨率中。您还可以在本地搜索其他.exd文件其他Office应用程序的AppData \ Temp文件夹。
正如我所提到的,这是微软针对不同问题提出的解决方案 - 安装了Dec '14更新后按钮停止工作。 Here's the link to that article.在这种情况下,这是一次性修复。在这里,您可能需要在每次更改分辨率时都这样做。
答案 33 :(得分:-3)
我们也有这个问题。我不记得究竟是什么固定,因为我们现在按预期运行...尝试分组控件。我认为这是我们的决议。