首页 > 解决方案 > Excel 2016。如何从工作表中显示 Userform1 的特定值?

问题描述

床单形式我是 VBA 的新手,在这个网站的少数用户的帮助下,我设法做的事情很少。@Lambik 正在帮助我解决/实现这一点,但由于我自己的错,问题变得一团糟。他确实为我做了一件事,对此我非常感激。我只能为我缺乏关于如何在回复部分正确格式化代码的知识而道歉。话虽如此,我仍然需要帮助。我是网络人,Excel 和 VBA 不是我的命令领域,这就是为什么您的耐心得到高度赞赏。

该工作簿包含 12 张纸。一年中的每个月一个。使用组合框(下拉列表/菜单)选择月份。在用户表单上选择月份后,数据将输入到相关工作表中。一月或二月或任何一个(基于从组合框中的选择)。

在用户表单上,我需要显示 G 列最后一行的值。我该怎么做?@Lambik 让我发布完整的代码,这就是我犯了错误并在回复中输入的地方。老实说,它看起来像 C+。因此,在用户表单上,我可以添加一个文本框,用户可以在其中看到其中的值。我将发布代码并尝试维护格式。

Private Sub UserForm_Initialize()

    Dim i As Long
    For i = 1 To ThisWorkbook.Sheets.Count
        Me.ComboBox1.AddItem ThisWorkbook.Sheets(i).Name
    Next

End Sub

CommandButton1 的代码是,

Private Sub CommandButton1_Click()

  Dim dcc As Long
   Dim abc As Worksheet, pfl As Worksheet

  Set abc = ThisWorkbook.Worksheets(Me.ComboBox1.Value)
  Set pfl = Sheets("ProfitLoss")

   With abc

   dcc = .Range("A" & Rows.Count).End(xlUp).Row

.Cells(dcc + 1, 1).Value = Date
.Cells(dcc + 1, 2).Value = Me.TextBox1.Value
.Cells(dcc + 1, 3).Value = Me.TextBox2.Value
.Cells(dcc + 1, 4).Value = Me.TextBox3.Value
.Cells(dcc + 1, 5).Value = Me.TextBox4.Value
.Cells(dcc + 1, 6).Value = Me.TextBox5.Value

End With

With pfl
dcc = .Range("A" & Rows.Count).End(xlUp).Row

.Cells(dcc + 1, 1).Value = Date
.Cells(dcc + 1, 2).Value = Me.TextBox1.Value
.Cells(dcc + 1, 3).Value = Me.TextBox2.Value
.Cells(dcc + 1, 4).Value = Me.TextBox3.Value
.Cells(dcc + 1, 5).Value = Me.TextBox4.Value
.Cells(dcc + 1, 6).Value = Me.TextBox5.Value
End With

TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""


End Sub

好的,我已尽力保持这两个代码的格式,并且不会遗漏任何内容,因此任何尝试帮助/贡献的人都可以轻松理解事情。

现在需要的是从工作表到用户表单显示价值。我只为此目的制作了一个 TextBox6。在 1 月工作表和所有其他工作表上,列是 G 值所在的位置。每次添加条目时,行都会发生变化。

非常感激你的帮助。我不能发布我认为的照片。几天前我试过了,网站说我还不能发帖。我真的希望我没有遗漏任何值得一提的东西。感谢您的时间和精力。我在笔记本电脑上,可以立即尝试任何建议/代码。提前感谢您的帮助。

干杯。

PS 目前每个功能都有效,从选择月份到输入数据和数据进入正确的行等。没有任何错误。

标签: excel

解决方案


根据OP的评论更新:

您要显示的值需要在文本框(而不是标签)中,并且需要是活动工作表之一。

但是,您说用户不应该能够更改用户窗体上的余额值,因此标签比文本框更好,因为文本框是要更改的,而标签不是。

修改代码以在文本框中显示所需的值

Private Sub UserForm_Initialize()

Dim wsActive As Worksheet
Dim i As Long, LastRow As Long
Set wsActive = Activesheet
LastRow = wsActive.Cells(wsActive.Rows.Count, "G").End(xlUp).row

'TextBox 1 carries the desired value
TextBox1.Value = wsActive.Cells(LastRow, 7).Value

For i = 1 To ThisWorkbook.Sheets.Count
    Me.ComboBox1.AddItem ThisWorkbook.Sheets(i).Name
Next

End Sub

当然,请确保标签“余额”下方的文本框命名为 Label1!

如果您想按照我的建议使用标签,请更改:

TextBox1.Value = wsActive.Cells(LastRow, 7).Value

进入

Label1.Caption = "Balance is: " & wsActive.Cells(LastRow,7).Value

要在更改组合框时根据要求更新标题的值,请在私有子 UserForm_Initialize() 下方添加

Private Sub ComboBox1_Change()
Dim SheetName As String
Dim ws As Worksheet
Dim LastRow As Long

SheetName = ComboBox1.Value
Set ws = Sheets(SheetName)

LastRow = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row
Label1.Caption = "Balance is: " & ws.Cells(LastRow, 7).Value

End Sub

推荐阅读