Excel VBA 来自工作簿单元格的实时用户窗体标签
Excel VBA real time UserForm Labels from Workbook cells
我有一个名为 "DisplaySummaryForm" 的用户窗体,用于显示有关正在计算的项目的实时信息。我有标签来显示工作表单元格中的值。现在我必须一直重新打开用户窗体来更新我的值。它们如何一直更新?所以他们在打开的用户窗体中被称为 "rela time" ?
打开用户窗体的按钮:
Sub DisplaySummary()
DisplaySummaryForm.Show vbModless
End Sub
用户表单代码:
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Controls("Label11").Caption = ThisWorkbook.Sheets("MAIN").Range("D11").value
Controls("Label12").Caption = ThisWorkbook.Sheets("MAIN").Range("D14").value
Me.TextBox2.value = ThisWorkbook.Sheets("Price calculation").Range("I148").value
Controls("Label14").Caption = ThisWorkbook.Sheets("Price calculation").Range("Q148").value
Controls("Label15").Caption = ThisWorkbook.Sheets("Price calculation").Range("Q148").value
Controls("Label18").Caption = ThisWorkbook.Sheets("Price calculation").Range("Q148").value
Controls("Label16").Caption = ThisWorkbook.Sheets("Price calculation").Range("Q148").value
Controls("Label17").Caption = ThisWorkbook.Sheets("Price calculation").Range("Q148").value
Controls("Label20").Caption = ThisWorkbook.Sheets("Price calculation").Range("Q148").value
Controls("Label22").Caption = ThisWorkbook.Sheets("Price calculation").Range("Q148").value
End Sub
我相信 Excel 中没有这样的选项来自动更新用户表单中的值,但是当使用下面的代码根据需要稍作修改。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("Q148")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
' Display a message when one of the designated cells has been
' changed.
' Place your code here.
MsgBox "Cell " & Target.Address & " has changed."
End If
End Sub
Reference 上面的代码
感谢大家。我想到了这个解决方案:
Private Sub Worksheet_Calculate()
Dim KeyCell1 As Range
Dim KeyCell2 As Range
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCell1 = Range("Q148")
Set KeyCell2 = Range("Q149")
Set KeyCell3 = Range("Q150")
Set KeyCell4 = Range("Q151")
Set KeyCell5 = Range("Q152")
Set KeyCell6 = Range("Q156")
' Display a message when one of the designated cells has been
' changed.
DisplaySummaryForm.Controls("Label14").Caption = Format(KeyCell1.Value, "#,##0.00")
DisplaySummaryForm.Controls("Label15").Caption = Format(KeyCell2.Value, "#,##0.00")
DisplaySummaryForm.Controls("Label16").Caption = Format(KeyCell3.Value, "#,##0.00")
DisplaySummaryForm.Controls("Label17").Caption = Format(KeyCell4.Value, "#,##0.00")
DisplaySummaryForm.Controls("Label18").Caption = Format(KeyCell5.Value, "#,##0.00")
DisplaySummaryForm.Controls("Label20").Caption = Format(KeyCell6.Value, "#,##0.00")
End Sub
我有一个名为 "DisplaySummaryForm" 的用户窗体,用于显示有关正在计算的项目的实时信息。我有标签来显示工作表单元格中的值。现在我必须一直重新打开用户窗体来更新我的值。它们如何一直更新?所以他们在打开的用户窗体中被称为 "rela time" ?
打开用户窗体的按钮:
Sub DisplaySummary()
DisplaySummaryForm.Show vbModless
End Sub
用户表单代码:
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Controls("Label11").Caption = ThisWorkbook.Sheets("MAIN").Range("D11").value
Controls("Label12").Caption = ThisWorkbook.Sheets("MAIN").Range("D14").value
Me.TextBox2.value = ThisWorkbook.Sheets("Price calculation").Range("I148").value
Controls("Label14").Caption = ThisWorkbook.Sheets("Price calculation").Range("Q148").value
Controls("Label15").Caption = ThisWorkbook.Sheets("Price calculation").Range("Q148").value
Controls("Label18").Caption = ThisWorkbook.Sheets("Price calculation").Range("Q148").value
Controls("Label16").Caption = ThisWorkbook.Sheets("Price calculation").Range("Q148").value
Controls("Label17").Caption = ThisWorkbook.Sheets("Price calculation").Range("Q148").value
Controls("Label20").Caption = ThisWorkbook.Sheets("Price calculation").Range("Q148").value
Controls("Label22").Caption = ThisWorkbook.Sheets("Price calculation").Range("Q148").value
End Sub
我相信 Excel 中没有这样的选项来自动更新用户表单中的值,但是当使用下面的代码根据需要稍作修改。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("Q148")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
' Display a message when one of the designated cells has been
' changed.
' Place your code here.
MsgBox "Cell " & Target.Address & " has changed."
End If
End Sub
Reference 上面的代码
感谢大家。我想到了这个解决方案:
Private Sub Worksheet_Calculate()
Dim KeyCell1 As Range
Dim KeyCell2 As Range
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCell1 = Range("Q148")
Set KeyCell2 = Range("Q149")
Set KeyCell3 = Range("Q150")
Set KeyCell4 = Range("Q151")
Set KeyCell5 = Range("Q152")
Set KeyCell6 = Range("Q156")
' Display a message when one of the designated cells has been
' changed.
DisplaySummaryForm.Controls("Label14").Caption = Format(KeyCell1.Value, "#,##0.00")
DisplaySummaryForm.Controls("Label15").Caption = Format(KeyCell2.Value, "#,##0.00")
DisplaySummaryForm.Controls("Label16").Caption = Format(KeyCell3.Value, "#,##0.00")
DisplaySummaryForm.Controls("Label17").Caption = Format(KeyCell4.Value, "#,##0.00")
DisplaySummaryForm.Controls("Label18").Caption = Format(KeyCell5.Value, "#,##0.00")
DisplaySummaryForm.Controls("Label20").Caption = Format(KeyCell6.Value, "#,##0.00")
End Sub