excel - 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 目前每个功能都有效,从选择月份到输入数据和数据进入正确的行等。没有任何错误。
解决方案
根据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
推荐阅读
- wordpress - 如何在 WooCommerce 支付网关管理选项中使用文件上传选项?
- c - 如何在C中使用`for`循环打印符号`n`次?
- floating-point - 无法确定为什么浮点比较会给出语法错误
- javascript - Postman API - 变量生成但未按预期传递
- javascript - 你的渲染方法应该有return语句吗?
- react-native - 我想从没有expo方法的react native开始..我发现了这个错误
- git - 列出 repo 项目的所有 git 子项目中的所有分支
- python - 在 Python 中使用完全可定制的箭头创建流场
- java - Eclipse 和 MySQL 之间的连接出现错误
- docker - 如何将 docker 镜像中的数据与 kubernetes 卷(NFS)合并