我有一个包含每日订单ID的excel文件,我需要从其他excel获取一些数据,使用订单ID作为索引。源文件包含许多工作表,这意味着需要具有用于选择的工作表名称的列表框。 工作手册和用于数据源的工作表不是固定的,将由用户确定,因此需要用户选择相关工作表的列表框 工作流程是当我在每日excel文件中调用vba时,将弹出一个包含源excel文件的所有工作表名称的列表框以供选择工作表,然后每日excel文件将从源excel基础上获取订单ID的数据索引。
现在我有一个使用activeworkbook和activeworksheet设置查找范围的vba,但我不认为这是一个很好的编码方法。有人可以给我一些建议吗?
对于userform代码,如果strfile设置为精确文件,则代码正常,但源文件可能会更改。
所有源文件都保存在同一个位置,所需的源文件名在每日excel文件的Range(“Z1”)中,strfile是否可以根据Range(“Z1”)进行更改?
如果我能为您澄清任何事情,请告诉我。
Sub example()
Dim dest_wbk As Workbook
Dim dest_ws As Worksheet
Dim source_wbk As Workbook
Dim source_ws As Worksheet
Set dest_wbk = ThisWorkbook
Set dest_ws = dest_wbk.ActiveSheet
sourcefilename = Range("Z1")
UserForm1.Show
Set source_wbk = ActiveWorkbook
Set source_ws = source_wbk.ActiveSheet
sourcelastrow = source_ws.Cells(Rows.Count, 2).End(xlUp).Row
Set lookuprange = source_ws.Range("A2:E" & sourcelastrow)
dest_lastrow = dest_ws.Cells(Rows.Count, 4).End(xlUp).Row
For i = 2 To des_lastrow
ID = dest_ws.Range("D" & i)
dest_ws.Range("K" & i) = Application.VLookup(ID, lookuprange, 3, False)
dest_ws.Range("L" & i) = Application.VLookup(ID, lookuprange, 4, False)
Next i
source_wbk.Close
End Sub
'Below in the code in the userform
Private Sub ListBox1_Click()
Sheets(ListBox1.Value).Activate
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim sh As Worksheet
strfile = ("C:\Documents\" & sourcefilename)
Set wbk = Workbooks.Open(strfile, ReadOnly:=True)
For Each sh In wbk.Sheets
ListBox1.AddItem sh.Name
Next sh
End Sub
答案 0 :(得分:0)
您需要将两个变量dest_wbk
和dest_ws
更改为
如果您的目标工作簿已经打开
'Change Workbook2.xls to whatever the file is (assuming it is open already)
Set dest_wbk = Workbooks("Workbook2.xls")
'Change SheetName to whatever the sheet name is inside dest_wbk
Set dest_ws = dest_wbk.Sheets("SheetName")
否则,您需要打开工作簿
'Change Workbook2.xls to whatever the file is
Set dest_wbk = Workbooks.Open("Workbook2.xls")
'Change SheetName to whatever the sheet name is inside dest_wbk
Set dest_ws = dest_wbk.Sheets("SheetName")
由UserForm获取这些值(工作簿名称和工作表名称)取决于您,我认为这对您来说不应该是一个问题。