如何填充多个工作表中的用户窗体文本框或文本框

首先,我想说我是VBA的新手,但是在我最后一个问题上已经学习了很多东西,并且在Davesexcel的帮助下。 感谢他,我已经能够创build一个用户窗体,根据在combobox中select的名字将数据拉到我的用户窗体的文本框中。 我现在遇到的问题是,每个名称需要从同一个工作簿中每月抽取(多个工作表 – 每个工作表都按月来命名;所以Jan是Sheet1; Feb是Sheet2等等)。 我可以通过名称将表单1数据拖入到用户窗体中,并且工作正常。 在接下来的几个月中,我将如何处理这些问题,并且如果他们进入Userform中的单独文本框,或者我应该扩展已经存在的文本框的宽度,并为每个主题使用一个文本框。 我提供了一个用户窗体的样子,并希望代码将正确显示屏幕视图用户窗体的代码工作,但应扩展文本框或使用额外的文本框

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 

和原来的问题一样, 一旦我学到足够的东西,我的目标就是让用户窗体每月填充结果,但从一个不同的工作簿,但现在我想学习,并能够在每个月的同一工作簿中拉动数据,然后解决如何从一个closures的工作簿。 Orignally希望将20xxperformance.xlsx中的数据转换为Master Ledger,但为了学习,我在20xx Performance中构build了Userform以了解function方面。 我希望我的调查是可以理解的,如果不是我的道歉,我会尽量在需要时更加明确。 感谢您的帮助和指导,我不断学习和成长。

问题我不能沿这条线使用吗? 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 

或者我应该使用一个列表框? 我宁愿不要做每月一次的代码和许多文本框,虽然这对学习有好处,但我仍然需要做,但是需要尽快得到,我喜欢Mathew的循环的想法,但仍然需要帮助,超过什么我收到,因为它仍然困扰着我。 谢谢

我会使用附加文本框。 你可以有一天(如果你愿意)dynamic地创build它们,并将它们作为一个数组使用,但是它有点高级。

使用工作表对象从不是活动工作表的工作表中获取数据。

 Dim ws as Excel.Worksheet Set ws = Application.Sheets("February") 

然后使用您的范围和单元格对象的工作表对象。

 Rws = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Set Rng = ws.Range(ws.Cells(2, 1), ws.Cells(Rws, 1))