使用宏导入数据文件时,如何提示用户选择文件和工作表?

时间:2011-04-08 20:38:36

标签: vba import excel-vba excel

我有一个当前正在创建新工作表的宏,并将另一个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

2 个答案:

答案 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")

现在FileDialogGetOpenFilename会返回要打开的文件的路径,例如"\\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

在这里,您只需使用输入框让用户编写选项卡的名称,或者您可以从用户窗体启动文件框(更好的选项)。

假设您使用用户表单,您可以将选项卡名称加载到下拉框中,让用户选择它将是哪个选项卡。然后做你的代码。

另一种方法是将标签加载到主工作簿中,让用户从那里选择它。