2017-10-13 47 views
0

我希望能夠在一個文件夾中獲取x個文件並將它們全部放在同一工作簿的單獨表單上。文本框輸入字符串並重新使用

我發現這個代碼有效;

Public Sub consolWB() 
    Dim FSO As Object 
    Dim folder As Object, subfolder As Object 
    Dim wb As Object 



    Set FSO = CreateObject("Scripting.FileSystemObject") 
    folderPath = "C:\Users\patrickw\Desktop\exceltest" 
    Set folder = FSO.GetFolder(folderPath) 

    With Application 
     .DisplayAlerts = False 
     .ScreenUpdating = False 
     .EnableEvents = False 
     .AskToUpdateLinks = False 
    End With 

    For Each wb In folder.Files 
     If Right(wb.Name, 3) = "xls" Or Right(wb.Name, 4) = "xlsx" Or Right(wb.Name, 4) = "xlsm" Then 
      Set openWB = Workbooks.Open(wb) 
      For Each ws In openWB.Worksheets 
       ws.Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) 


      Next ws 
      openWB.Close 
     End If 
    Next wb 

    With Application 
     .DisplayAlerts = True 
     .ScreenUpdating = True 
     .EnableEvents = True 
     .AskToUpdateLinks = True 
    End With 


End Sub 

然而,這隻能因爲我已經把目標文件路徑爲它去看你。

我想創建一個按鈕,提示用戶輸入文件路徑,然後使用該文件路徑,使在文件中。

我想我必須使輸入一個字符串,然後在上面的代碼中使用此變量。

這是可能的嗎?

在上面的例子中,新工作表被稱爲「工作表1 ...」是否可以自己命名這些工作?

感謝

+0

你希望他們輸入到一個盒子他們想要的東西,輸入到單元格,或者彈出一個框,他們可以瀏覽並選擇一個文件夾?或者是其他東西。 – QHarr

+0

我最初想要一個下拉框,然後他們可以選擇正確的文件。無論我如何做,我必須能夠使用該字符串作爲我的其他宏中的查找,如果這樣做有道理的話? –

+0

這裏是一個例子https://stackoverflow.com/questions/25153342/open-a-workbook-using-filedialog-and-manipulate-it-in-excel-vba – QHarr

回答

1

有你button_click事件中以下內容,然後使用路徑變量在你的其他代碼。

Dim path As String 
path = InputBox("Enter a file path") 

如果您需要訪問形式外的變量,那麼你可以聲明path作爲一個模塊級Public場:

Public path As String 

Private Sub CommandButton1_Click() 

path = InputBox("Enter a file path") 

End Sub 

Private Sub CommandButton2_Click() 
Debug.Print path 
End Sub 

或更好,具有一個屬性封裝,如果path不應該是從外面形式分配:

Private path As String 

Public Property Get SelectedPath() As String 
    SelectedPath = path 
End Property 

Private Sub CommandButton1_Click() 
    path = InputBox("Enter a file path") 
End Sub 

通過這種方式,形式之外的代碼可以ř eadSelectedPath,但不能將寫入私人字段或修改屬性的值。

也就是說考慮一個InputBoxusing a FileDialog instead,爲更好的用戶體驗和更容易輸入驗證。

+0

這就是我想要的!我點擊第一個按鈕並進入目錄,但是,當我單擊第二個按鈕時,出現運行時錯誤5消息 現在是「合併」宏中的新行; folderPath =路徑 –

+0

它的工作!謝謝QHarr –

+0

太好了。如果它滿足你想要的結果,請接受答案。我已經添加了如何在你的按鈕之間傳遞。 – QHarr

1

這樣,用戶只需要點擊,點擊並點擊即可。您不必檢查輸入文件夾路徑是否正確。

Sub GetFolder() 
    Dim FD As Office.FileDialog 
    Dim FolderPath as string 
    Set FD = Application.FileDialog(msoFileDialogFolderPicker) 
    FD.Show 

    FolderPath = FD.SelectedItems(1) 
    Msgbox FolderPath 
End Sub 
+0

謝謝,我只是試過,但我如何將這個到我的初始代碼? –

+0

最簡單的方法是用我的代碼替換'folderPath =「C:\ Users \ patrickw \ Desktop \ exceltest」'。 – newacc2240

+1

Upvoted,但這應該是一個返回String的'Private Function'。 –

相關問題