代码之家  ›  专栏  ›  技术社区  ›  Anu

将所有对象移回Excel VBA用户窗体中的原始位置

  •  1
  • Anu  · 技术社区  · 6 年前

    脚本

    我有一个Excel vba用户窗体,它有许多组合框、文本框、标签、复选框和按钮。当我单击某个按钮时,这些对象会将其位置更改为新位置。

    我需要什么

    当一个按钮被点击时,我需要把所有这些移回原来的位置,而不使用我之前使用的定位技术。有什么方法可以让我用一个命令把所有的物体移回原来的位置吗?

    我试过什么

    我试过 userform_initialize 但它不起作用

    2 回复  |  直到 6 年前
        1
  •  3
  •   EvR    6 年前

    正如Jeffrey Weir所指出的;将原始位置放在tag属性中

    Private Sub UserForm_Initialize()
    Dim ctrl As MSForms.Control
        For Each ctrl In Me.Controls
            ctrl.Tag = ctrl.Top & "|" & ctrl.Left
        Next
    End Sub
    

    回到原来的位置:

    Private Sub CommandButton1_Click()
    'button to go back, adjust name to your button
    Dim ctrl As MSForms.Control
        For Each ctrl In Me.Controls
            ctrl.Top = Split(ctrl.Tag, "|")(0)
            ctrl.Left = Split(ctrl.Tag, "|")(1)
        Next
    End Sub
    
        2
  •  0
  •   Miqi180    6 年前

    简而言之,你不能轻易地做到这一点。唯一“重置”最后一个操作的内置Excel方法是 Application.Undo . 从 MSDN documentation :

    此方法仅撤消用户以前执行的最后一个操作 运行宏,它必须是宏中的第一行。它 无法用于撤消Visual Basic命令。