2015-11-05 13 views
0

我目前正试图组装一个主工作簿,它将从其他文件导入数据。用户应该能够使用FileDialog选择一个文件,目前为止工作正常。目前不工作的是试图导入用户应该能够在用户表单中选择的工作表。 至于我的测试中去了,到目前为止有两种选择:如何使用FileDialog导入选定的工作表?

  • 留两个组合框上,在每一个(一个用于文件名和一个用于worksheetnames)的静态值的窗体。由于进口单将始终是一种选定的类型,并且工作表在将来都应具有相同的名称,但前提是这些条件将始终得到满足。
  • UserForm上的一个组合框,它显示了要导入的工作簿的工作表名称(因为无论如何要将值复制到主工作簿中,应该可以将工作表名称解析为组合框)。

是我试图甚至有可能实现使用VBA?

到目前为止,我一直无法将工作表名称导入ComboBox并导入数据。

+0

是的,它是可以实现的 - 您可以打开选定的工作簿,然后遍历WB中可用的工作表。这样做时,您可以将每个表格名称添加到组合框中。 – therak

回答

1

这里很短的例子,如何可以这样做:

With Application.FileDialog(msoFileDialogFilePicker) 
    .AllowMultiSelect = False 
    'Show and check whether file is selected 
    If .Show Then 
     'you might wanna check if an excel workbook has been selected, or filter the filedialog upfront 
     Dim wbSource As Workbook 
     Dim ws As Worksheet 
     'Open Workbook 
     Set wbSource = Application.Workbooks.Open(.SelectedItems(1)) 
     'Loop through the available sheets 
     For Each ws In wbSource.Sheets 
      MsgBox ws.name 
     Next 

    End If 
End With 

这应该让你开始 - 而不是显示名称只是把它添加到您的组合框。 然后,您可以继续导入工作表通过复制&粘贴

+0

谢谢,但如果我将“MsgBox ws.name”替换为“Import_Dialog.listSheets.AddItem ws.name”,我得到一个运行时错误(424),但其余的代码似乎工作正常,因为它在使用msgbox 。 “Import_Dialog”是我的用户表单,“listSheets”是应该显示表单名称的组合框。 GetFile代码位于不同的模块中(或者它是否需要在用户表单中?) – Syntax

+0

424是对象请求错误 - 基本上,它表明Combobox不能从您尝试调用它的位置访问。此代码模块与UserForm工作簿外吗?如果您运行UserForm中的代码并使用** listSheets.Add ws.name **,它应该可以工作 – therak

+0

不可以,只有主工作簿中包含所有用户窗体的代码。我已将代码复制到UserForm,现在一切似乎都正常(尽管我必须使用AddItem,而不是Add)。我猜运行时错误并不在GetFile-Code中,因为它现在可以工作,即使它在一个额外的模块中。 – Syntax

相关问题