【问题标题】:How do I fix a checkbox to a location in VBA如何将复选框修复到 VBA 中的某个位置
【发布时间】:2015-07-09 05:01:10
【问题描述】:

我正在尝试将复选框修复到某个单元格,因为我认为是一个错误会不断移动它。

我已经尝试选择“不要移动并调整单元格大小”,它会随机移动到不同的位置,而不会重新调整任何单元格的大小。

其他人似乎有同样的问题,但没有人有任何答案

任何帮助将不胜感激。

【问题讨论】:

    标签: excel vba debugging checkbox


    【解决方案1】:

    您需要确定一个合适的事件。我选择了 BeforeSave 事件,以便控件在保存之前始终重新定位。您可能需要更频繁地触发的事件。

    在这种情况下,您可以将 Top 和 Left 属性设置为任何您想要的,包括单元格的 Top 和 Left 属性。

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    
        With Sheet1.Shapes("Check Box 1")
            .Top = Sheet1.Range("J3").Top
            .Left = Sheet1.Range("J3").Left
        End With
    
    End Sub
    

    【讨论】:

    • 非常感谢您的快速响应!我对 VBA 很陌生(Matlab 和 Swift 更像是我的面包和黄油)。当我实现这个宏(或至少尝试)时,它似乎在保存时没有做任何事情。我逐字使用您的代码并将 .Shapes 更改为 .CheckBox1 两者都不会引发任何错误,但在保存时都不会移动任何东西。你能帮帮我吗?
    • 此代码必须放在 ThisWorkbook 模块中。事件只能在类模块中:工作簿事件在 ThisWorkbook 中,工作表事件在工作表模块中,其他事件在自定义类模块中。如果你把它放在标准模块中,它不会触发。
    • 到目前为止这太棒了!有没有办法将它植根到右侧?我基本上想将这些复选框居中,如果我可以将它链接到右侧,它会更容易。最后一件事。如果有人选择在两个复选框之间插入一行,我如何分配该复选框以在保存之前不捕捉到新行/列
    • 您将获得顶部、左侧、高度和宽度。要居中或右对齐,您必须进行数学运算。例如,要右对齐,请将左设置为(左减去宽度差)。对于中心,它将是宽度距离的一半。
    • 不要在代码中使用像 J3 这样的单元格引用,而是命名一个单元格并使用命名范围。如果您将 J3 命名为 chkbox1_anchor 并且用户输入新的第 3 行,则该名称现在将指向 J4。然后在您的代码.Top = Sheet1.Range("chkbox1_anchor").Top 等中。
    猜你喜欢
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多