Excel:不可思议的缩放控件

67

偶尔,我会遇到一个电子表格,其中包含一些神奇的按钮或下拉框,随着时间的推移它们变得越来越大或越来越小。

代码中没有任何指示。

还有其他人经历过这种“乐趣”吗?


我曾经看到这种行为,尤其是在单选按钮缩小时,但从未理解为什么会发生,为什么只有有时会发生,或者如何修复它。只是假定它是一个错误。 - Lunatik
1
潜在问题与以下其他问题相同:http://stackoverflow.com/questions/9518002/excel-vba-combobox-dropdown-button-size-changed-itself;https://dev59.com/c2kw5IYBdhLWcg3w4eiS - matt_black
5
+1,但是,这不应该放在Super User SE上吗? - JMCF125
1
在使用 Excel 2016 几个月后,我遇到了这个问题,并在此线程中找到了解决方法。回答中描述的各种情况似乎都不适用于我的情况。但最终起作用的是在按钮代码开头插入一行代码 "button".width = "button".width。 - Ron Rosenfeld
4
这是由于缩放级别计算错误造成的。如果您不使用缩放(100%),则不会发生这种情况。如果使用 VBA 改变任何元素的大小,建议将缩放设置为 100%,调整大小,然后再设置回之前的缩放级别。非常有效。 - cyberponk
显示剩余2条评论
34个回答

0
如果您不想显示按钮来回移动,可以将原始位置放入代码中,然后只需针对这些位置进行检查。当单击按钮时关闭屏幕更新,检查控件上的位置是否不同,如有必要,请将其更改回来,然后再打开屏幕更新。
DP

0

我也遇到了ActiveX列表框的问题,后来在其他地方找到了以下解决方法,目前看起来它似乎有效,而且这似乎是将电子表格交给他人时最简单的解决方案:

“虽然ListBox有一个IntegralHeight属性,其FALSE设置的副作用将使该控件不会走样,而命令按钮具有诸如move/size with cells等属性,但其他控件则没有那么优雅。”

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


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

目前为止它正在工作!


-3
我们之前也遇到过这个问题。我记不清楚是什么解决了它,但我们现在已经正常运行了...尝试将控件分组。我想那就是我们的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接