2015-11-05 51 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

相關問題