我有一个当前正在创建新工作表的宏,并将另一个Excel文件导入到这个新工作表中。然后将此工作表中的数据提取到工作簿的其他区域。
正在导入的文件有多个选项卡,并且将始终具有不同的文件名。如何调整以下代码以提示用户选择文件和相应的选项卡? (目录不会改变。)
我尝试使用FileDialog
对象,但Excel似乎并未对所选文件执行任何操作。而且,这不允许您选择要导入的选项卡/表。
Sheets.Add
Sheets(2).Select
Sheets(2).Name = "ImportedDemand"
Range("E42").Select
With ActiveSheet.QueryTables.Add(Connection:=Array( _
"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password=""""; _
User ID=Admin; _
Data Source=\\Folder\ImportFile_2011.04.05.xls; _
Mode=Share Deny Write;Extended Properties=""HDR=YES;""; _
Jet OLEDB:System database="""";Jet OLEDB:Registry Path=""""; _
Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=35; _
Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2; _
Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=""""; _
Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False; _
Jet OLEDB:Don't Copy Locale on Compact=False; _
Jet OLEDB:Compact Without Replica Repair=False; _
Jet OLEDB:SFP=False"), Destination:=Range("A1"))
.CommandType = xlCmdTable
.CommandText = Array("_All_Demand$")
.Name = "ImportFile_2011.04.05"
'Other Settings
.SourceDataFile = _
"\\Folder\ImportFile_2011.04.05.xls"
.Refresh BackgroundQuery:=False
End With
答案 0 :(得分:2)
这是一种返回用户选择工作表名称的方法:
varCellContent = Application.InputBox _
(prompt:="Choose a sheet by clicking on any cell in it.", Type:=8)
strDestinationSheetName = ActiveSheet.Name
您的previous question的答案中已经解释了如何返回用户选择文件的路径。使用FileDialog
对象,或者如果您不喜欢,请使用GetOpenFilename
:
strPathOfFileToOpen = _
Application.GetOpenFilename("Excel workbooks (*.xls), *.xls")
现在FileDialog
或GetOpenFilename
会返回要打开的文件的路径,例如"\\Folder\ImportFile_2011.04.05.xls"
,但他们不实际打开文件。 您必须以适当的方式使用返回的路径。从你的问题来看,目前尚不清楚这是什么,但我猜:
.SourceDataFile = strPathOfFileToOpen
和/或
Data Source=strPathOfFileToOpen ; _
我不太清楚为什么你的问题没有引用后者。
与工作表名称相同的逻辑:我已经指出了如何返回它,但没有更多细节我不能说你应该如何使用它。
答案 1 :(得分:1)
来自 Excel 2002 VBA:程序员参考:
dim fd as filedialog
dim ffs as filedialogfilters
dim stFileName as string
dim wkb as workbook
set fd=application.filedialog(msofiledialogopen)
with fd
set ffs=.filters
with ffs
.clear
.add "Excel", "*.xls" 'Or whatever version you are using.
end with
.allowmultiselect=false
if .show=false then exit sub
set wkb=getobject(.selecteditems(1))
end with
在这里,您只需使用输入框让用户编写选项卡的名称,或者您可以从用户窗体启动文件框(更好的选项)。
假设您使用用户表单,您可以将选项卡名称加载到下拉框中,让用户选择它将是哪个选项卡。然后做你的代码。
另一种方法是将标签加载到主工作簿中,让用户从那里选择它。