将所有对象移回excel VBA用户表单中的原始位置

时间:2018-07-27 05:43:21

标签: excel excel-vba userform

场景

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

我需要的

单击按钮时,我需要将所有这些移动回原始位置,而无需使用我之前使用的定位技术。有什么方法可以通过一个命令将所有对象移回原始位置?

我尝试过的事情

我尝试了userform_initialize,但是它不起作用

2 个答案:

答案 0 :(得分:3)

正如杰弗里·威尔(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

答案 1 :(得分:0)

简短的答案是您不能轻易做到这一点。唯一可以“重置”最后一个动作的内置Excel方法是Application.Undo。来自MSDN documentation

  

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