【发布时间】:2015-11-29 14:53:47
【问题描述】:
首先我想说我是 VBA 的新手,但我学到了很多东西,并且在我的最后一个问题上得到了 Davesexcel 的大力帮助。多亏了他,我已经能够创建一个用户表单,它可以根据组合框中选择的名称将数据拉入用户表单上的文本框中。我现在遇到的问题是每个名称都需要每月从同一个工作簿中提取(多张工作表 - 每张工作表按月份命名;所以 Jan 是 sheet1;Feb 是工作表 2,依此类推)。我可以通过选择的名称将工作表 1 数据拉入用户窗体,并且效果很好。到时候我将如何做接下来的几个月,他们应该进入用户窗体上的单独文本框,还是应该扩展已经存在的文本框的宽度并为每个主题使用一个文本框。我正在提供用户窗体外观的屏幕视图,希望代码也能正确显示Userform with code working but should textboxes be extended or additional textboxes used
Private Sub cbo_Agent_Change()
Dim Rws As Long, ConRng As Range, AdhRng As Range, AHTRng As Range, ACWRng As Range, TcktsRng As Range, LMIRng As Range, UnderRng As Range, KnowRng As Range, OvrSatRng As Range, OvrScoRng As Range, NPSRng As Range, Agnt As Range
Rws = Cells(Rows.Count, "A").End(xlUp).Row
Set Rng = Range(Cells(2, 1), Cells(Rws, 1))
Set Agnt = Rng.Find(what:=cbo_Agent, lookat:=xlWhole)
Set ConRng = Agnt.Offset(0, 1) 'set ConRng
Set AdhRng = Agnt.Offset(0, 2) 'set AdhRng
Set AHTRng = Agnt.Offset(0, 3) 'set AHTRng
Set ACWRng = Agnt.Offset(0, 4) 'set AHTRng
Set TcktsRng = Agnt.Offset(0, 5) 'set TcktsRng
Set LMIRng = Agnt.Offset(0, 6) 'set LMIRng
Set UnderRng = Agnt.Offset(0, 7) 'set UnderRng
Set KnowRng = Agnt.Offset(0, 8) 'set KnowRng
Set OvrSatRng = Agnt.Offset(0, 9) 'set OvrSatRng
Set OvrScoRng = Agnt.Offset(0, 10) 'set OvrScoRng
Set NPSRng = Agnt.Offset(0, 11) 'set NPSRng
txt_Con = ConRng
txt_Adh = AdhRng
txt_AHT = AHTRng
txt_ACW = ACWRng
txt_tckts = TcktsRng
txt_LMI = LMIRng
txt_Under = UnderRng
txt_Know = KnowRng
txt_Osat = OvrSatRng
txt_OScor = OvrScoRng
txt_NPS = NPSRng
End Sub
Private Sub UserForm_Initialize()
Dim Rws As Long, Rng As Range
Rws = Cells(Rows.Count, "A").End(xlUp).Row
Set Rng = Range(Cells(2, 1), Cells(Rws, 1))
cbo_Agent.List = Rng.Value
End Sub
与原来的问题一样;一旦我学到了足够的知识,我的目标就是让用户表单每月填写结果,但来自不同的工作簿,但现在我想学习并能够每月在同一个工作簿中提取数据,然后解决如何从封闭的工作簿。最初希望将数据从 20xxperformance.xlsx 提取到主分类帐中,但为了学习,我在 20xxperformance 中构建了用户表单以了解功能方面。我希望我的询问是可以理解的,如果不是我的道歉,我会在需要时尝试更明确。感谢您在我不断学习和成长的过程中提供的帮助和指导。
问题我可以不使用沿着这条线的东西吗?
Dim Ws As Worksheet, rCell As Range
For Each Ws In ActiveWorkbook.Worksheets
Select Case UCase(Ws.Name)
Case "SHEET1", "SHEET3", "SHEET4"
With Ws
For Each rCell In .Range("A1", .Cells(Rows.Count, 1).End(xlUp))
ComboBox1.AddItem rCell
Next rCell
End With
Case "SHEET2"
With Ws
For Each rCell In .Range("A1", .Cells(Rows.Count, 4).End(xlUp))
ComboBox1.AddItem rCell
Next rCell
End With
End Select
Next Ws
或者我应该使用列表框吗?我宁愿不做每月的代码和那么多的文本框,虽然它有利于学习,我仍然会做,但需要早日得到这个,我喜欢马修的循环想法,但除了什么之外仍然需要帮助我收到了,因为它仍然让我感到困惑。 谢谢
【问题讨论】:
-
这是一个初学者教程,可以帮助您了解基础知识。 excelvbatutor.com/vba_book/vbabook_ed2.pdf 它演示了工作表中的编码,您已经在玩表单,但它会告诉您一些正确的方法。