如何在vba中保存userform中的值?

时间:2016-07-11 07:52:12

标签: vba excel-vba userform excel

我有一个看起来像这样的用户形式

enter image description here

用户打开此表单后,所有文本框都会填充默认值。

然后,用户手动更改值并按OK,这将关闭表单并影响链接到表单的图表。

如果用户再次打开表单,则文本框中的值将恢复为默认值,链接的图表也将采用其默认位置。

有没有办法,一旦用户按下OK,userform中的值就会被保存,所以当用户下次打开表单时,会显示更改的值而不是默认值?

谢谢!

2 个答案:

答案 0 :(得分:1)

您是否尝试使用工作表作为保存数据的位置?

Dim i As Integer
Private Sub UserForm_Initialize()
    For i = 1 To 49                 'Number of TextBoxes (I counted 49)
        Controls("TextBox" & i).Text = Cells(i, 1)
    Next i
End Sub

Private Sub CommandButton1_Click()  'Save button
    For i = 1 To 49
        Cells(i, 1) = Controls("TextBox" & i).Text
    Next i
End Sub

这将保存第一个coloumn的前49行中的值。如果要将其保存到其他工作表,请创建一个新工作表并添加Worksheets("SheetName").Cells...

答案 1 :(得分:0)

如果您没有类似的控制元素名称(但像 cbTest 这样的匈牙利概念用于组合框)的另一种解决方案,因此您无法使用 Controls("TextBox" & i)... 之类的命令遍历它们。

如果您有一个用户表单(例如称为 ufTest),那么您可以像这样遍历所有控件元素:

    Dim controlElement as Control
    For Each controlElement In ufTest.Controls
        MsgBox controlElement.Name 
        ' Check for type of control
        If Left(controlElement.Name, 2) = "cb" Then
            MsgBox = controlElement.Text
        ElseIf Left(controlElement.Name, 3) = "txt" Then
            MsgBox = controlElement.Value
    End If
   Next controlElement

无论您如何调用控件,这都会为您提供用户表单中每个控件元素的名称。

P。 S.:我确信有一种方法可以在不使用匈牙利概念的情况下获得控件的类型,但我没有及时找到。