自动更新用户表单标签

时间:2016-06-23 17:34:22

标签: excel vba excel-vba userform

我是VBA和编程的新手,所以请耐心等待。到目前为止,我有6个标签和一个简单的用法,其中一个输入与每个标签对应的值。但是,标签名称可以更改(例如,如果添加了新标签),我想要一种自动更改标签名称的方法。这就是我到目前为止所做的:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Update_invest.Invest1.Caption = Sheet1.Range("A12").Value
Update_invest.Invest2.Caption = Sheet1.Range("A13").Value
Update_invest.Invest3.Caption = Sheet1.Range("A14").Value
Update_invest.Invest4.Caption = Sheet1.Range("A15").Value
Update_invest.Invest5.Caption = Sheet1.Range("A16").Value
Update_invest.Invest6.Caption = Sheet1.Range("A17").Value

End Sub

现在这样做:如果我更改标签,它将更新用户表单。但是,如果我只是打开新工作表并且不点击说单元格A12,它将不会更新用户表单,并将标签名称保留为其默认名称。如何让它实际保存标签名称,以便如果用户打开工作簿,userform将具有当前单元格值(首先不必单击用于更新用户窗体的单元格)?

我目前在sheet1上有这个代码。

1 个答案:

答案 0 :(得分:0)

解决方案1 ​​

您可以将代码放在用户选择工作表时运行的Worksheet_Activate中,或者放在用户打开工作簿时运行的Workbook_Open中。目前,您正在使用Worksheet_SelectionChange,它仅在用户更改选择时运行,因此需要单击另一个单元格。

注意:如果您选择使用Workbook_Open,则需要将该子文件放在ThisWorkbook文件中,而不是放在工作表本身中。

解决方案2

如果您想要进行永久更改并且没有代码来始终更新它,则需要完成designer

这是一个例子

Sub exa1()
    Dim i As Long, n As Long
    n = 12
    With ThisWorkbook.VBProject.VBComponents("Update_invest").Designer
        For i = 1 To .Controls.Count
            If TypeName(.Controls(i - 1)) = "Label" Then           
                .Controls(i - 1).Caption = Sheet1.Cells(n, 1).Value
                n = n + 1
            End If
        Next i
    End With
End Sub

source