【问题标题】:How do I prompt the user to select the file and sheet, when using macro to import a data file?使用宏导入数据文件时,如何提示用户选择文件和工作表?
【发布时间】:2011-04-08 20:38:35
【问题描述】:

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

【问题讨论】:

    标签: vba import excel


    【解决方案1】:

    这是一种返回用户选择的工作表名称的方法:

        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 ; _
    

    我不太确定为什么您的问题中没有引号。

    与工作表名称相同的逻辑:我已经指出了如何返回它,但没有更多细节我不能说你应该如何使用它。

    【讨论】:

      【解决方案2】:

      来自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
      

      在这里,您可以只使用输入框让用户输入选项卡的名称,或者您可以从用户表单启动文件对话框(更好的选择)。

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

      另一种选择是将选项卡加载到您的主工作簿中,并让用户从那里选择它。

      【讨论】:

        猜你喜欢
        • 2011-07-30
        • 1970-01-01
        • 1970-01-01
        • 2010-12-09
        • 1970-01-01
        • 2011-03-14
        • 1970-01-01
        • 1970-01-01
        • 2013-08-03
        相关资源
        最近更新 更多