如何更改在VBA Excel

时间:2016-05-09 16:47:49

标签: excel-vba userform vba excel

我对如何更改用户表单显示的内容有疑问。基本上我有一个宏,用户表单允许用户选择要用于进程的单元格范围。然后,如果我在其他工作表中使用宏,之前使用的范围仍然存在。例如,如果在sheet1中我选择“A20:A30”然后我在sheet2中使用相同的宏,则范围值仍然选择了表单1的“A20:A30”的值。我知道选择范围非常容易我想要,但是我帮助的人希望每次运行宏时范围都是空白的,这样他就不必再次移动到活动工作表来选择范围了。

以下是图片示例。在工作表“CurvasTC”(按钮“Interpola”仅显示用户表单)中,我选择一个范围并运行该过程,单击“Ejecutar”按钮。然后,如果我去表单“Volatilidad”并运行该过程 出现用户表单,其中包含对TC表单的引用,我希望它显示空白值或至少是对活动表单的引用。

Run 1

Run 2

这是用户表单的代码:

Public Sub CommandButton1_Click()

Dim rangoa As Range
Dim rangob As Range
Dim rangoc As Range

Set rangoa = Range(rangox.Value)
Set rangob = Range(rangoy.Value)
Set rangoc = Range(rangoxout.Value)

ventana.Hide
Run (I_Lineal(rangoa, rangob, rangoc))

End Sub

Private Sub Label1_Click()

End Sub

Private Sub Label3_Click()

End Sub

Private Sub rangox_BeforeDragOver(Cancel As Boolean, ByVal Data As MSForms.DataObject, ByVal x As stdole.OLE_XPOS_CONTAINER, ByVal y As stdole.OLE_YPOS_CONTAINER, ByVal DragState As MSForms.fmDragState, Effect As MSForms.fmDropEffect, ByVal Shift As Integer)

End Sub

Private Sub rangoxout_BeforeDragOver(Cancel As Boolean, ByVal Data As MSForms.DataObject, ByVal x As stdole.OLE_XPOS_CONTAINER, ByVal y As stdole.OLE_YPOS_CONTAINER, ByVal DragState As MSForms.fmDragState, Effect As MSForms.fmDropEffect, ByVal Shift As Integer)

End Sub

Private Sub UserForm_Click()

End Sub

Interpola按钮的代码非常简单:

Sub corrermacro()
   ventana.Show
End Sub

您选择范围的用户表单称为“ventana”。

1 个答案:

答案 0 :(得分:2)

您只是将表单隐藏在子结尾。这将使它成为invisible但仍然存在(包括其所有内容)。如果您希望在下次初始化表单时将其设为空白,那么您应该unload表单:Unload ventana

所以,你应该在sub的末尾添加它。只要知道表单上的所有数据都在该命令不再可用之后。因此,此命令应该是sub中的最后一个命令:

Public Sub CommandButton1_Click()

Dim rangoa As Range
Dim rangob As Range
Dim rangoc As Range

Set rangoa = Range(rangox.Value)
Set rangob = Range(rangoy.Value)
Set rangoc = Range(rangoxout.Value)

ventana.Hide
Run (I_Lineal(rangoa, rangob, rangoc))
Unload ventana

End Sub