2016-07-25 8 views
0

我正在製作一個具有用戶表單的數據庫,以幫助自動執行使用相關信息記錄PDF文件的過程。使用關聯信息記錄PDF文件的過程自動化

爲此,我希望讓用戶在圖紙信息中輸入,瀏覽圖紙所在的文件夾,然後在Excel中列出圖紙文件,併爲每個圖紙/ PDF條目重複上述信息。

我該如何編碼?

這是我目前(和它不工作):

Sub Button2_Click() 
    UserForm1.Show 
End Sub 

Sub startIt() 
    Dim FileSystem As Object 
    Dim HostFolder As String 
    Dim xDirect$, xFname$, InitialFoldr$ 

    InitialFoldr$ = "G:\ScannedDwgArchive\Transportation and BuildingsDrawings\Rocky Harbour\" 
    With Application.FileDialog(msoFileDialogFolderPicker) 
     .InitialFileName = Application.DefaultFilePath & "\" 
     .Title = "Please select a folder to list Files from" 
     .InitialFileName = InitialFoldr$ 
     .Show 
     If .SelectedItems.Count <> 0 Then 
      xDirect$ = .SelectedItems(1) & "\" 
     End If 
    End With 

    Set FileSystem = CreateObject("Scripting.FileSystemObject") 

    DoFolder FileSystem.GetFolder(InitialFoldr$) 
End Sub 

Sub DoFolder(Folder) 
    Dim SubFolder 
    For Each SubFolder In Folder.SubFolders 
     DoFolder SubFolder 
    Next 

    i = Cells(Rows.Count, 21).End(xlUp).Row + 1 
    Dim File 
    For Each File In Folder.Files 
     ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 21), Address:= _ 
     File.Path, TextToDisplay:=File.Name 
     i = i + 1 
     Call TextboxWrite 
    Next 
End Sub 

**Sheet 5 is the page in my workbook I am working on. This part of the code never works** 
Sub TextboxWrite() 
    Sheet5.Range(i, 12) = jobNumTextBox.value 
    Sheet5.Range(i, 15) = TownTextBox.value 
    Sheet5.Range(i, 16) = YearTextBox.value 
    Sheet5.Range(i, 18) = StreetTextBox.value 
    Sheet5.Range(i, 19) = PhaseTextBox.value 
    Sheet5.Range(i, 20) = cdTextBox.value 
End Sub 

我可以打開文件夾,並有書面到Excel文件。這就是它。我怎樣才能使這個工作?

更新:我得到它的工作後,你的一些指導和一些新的教程。這裏是(未完成,但它的功能)

Sub Button2_Click() 
UserForm1.Show 
End Sub 

Sub startIt() 

    Dim FileSystem As Object 
    Dim HostFolder As String 
Dim xDirect$, xFname$, InitialFoldr$ 

    InitialFoldr$ = "G:\ScannedDwgArchive\Transportation and Buildings Drawings\Rocky Harbour\" 
With Application.FileDialog(msoFileDialogFolderPicker) 
    .InitialFileName = Application.DefaultFilePath & "\" 
    .Title = "Please select a folder to list Files from" 
    .InitialFileName = InitialFoldr$ 
    .Show 
     If .SelectedItems.Count <> 0 Then 
     xDirect$ = .SelectedItems(1) & "\" 
     End If 
    End With 

    Set FileSystem = CreateObject("Scripting.FileSystemObject") 

    DoFolder FileSystem.GetFolder(InitialFoldr$) 

End Sub 

Sub DoFolder(Folder) 
    Dim SubFolder 
    For Each SubFolder In Folder.SubFolders 
     DoFolder SubFolder 
    Next 

    Dim i As Integer        ' DECLARE i VARIABLE 
    i = Cells(Rows.Count, 21).End(xlUp).row + 1 
    Dim File 
    For Each File In Folder.Files 
     ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 21), Address:= _ 
     File.Path, TextToDisplay:=File.Name 
     i = i + 1 
     Call TextboxWrite(i)      ' PASS ARGUMENT 

    Next 
End Sub 

Sub TextboxWrite(i As Integer)     ' RECEIVE ARGUMENT 
    Worksheets("CIVIL DATABASE").Activate 
    Dim row As Integer 
    row = i - 1 
    ActiveSheet.Cells(row, 12) = UserForm1.jobNumTextBox.value 
    ActiveSheet.Cells(row, 15) = UserForm1.TownTextBox.value 
    ActiveSheet.Cells(row, 16) = UserForm1.YearTextBox.value 
    ActiveSheet.Cells(row, 17) = UserForm1.descTextBox.value 
    ActiveSheet.Cells(row, 18) = UserForm1.StreetTextBox.value 
    ActiveSheet.Cells(row, 19) = UserForm1.PhaseTextBox.value 
    ActiveSheet.Cells(row, 20) = UserForm1.cdTextBox.value 

End Sub 

非常感謝你幫助我!

+0

當你運行你的代碼時,它會給出錯誤? (如果沒有錯誤,那麼最後一行工作正常?)。我不明白爲什麼有超鏈接的一行,Excel中列出的文件是否應超鏈接到文件夾位置?如果是,是文件對話框中選擇的文件夾位置? –

+0

超鏈接部分來自一個教程,該教程將提取文件名並將它們打印到下一個空閒單元格中的單元格。我沒有使用超鏈接。 –

回答

0

您需要將i值傳遞給被調用的子例程TextboxWrite()。眼下,i在其範圍內沒有任何價值,因爲它不是一個全局變量,但當地的一個:

... 
Sub DoFolder(Folder) 
    Dim SubFolder 
    For Each SubFolder In Folder.SubFolders 
     DoFolder SubFolder 
    Next 

    Dim i As Integer        ' DECLARE i VARIABLE 
    i = Cells(Rows.Count, 21).End(xlUp).Row + 1 
    Dim File 
    For Each File In Folder.Files 
     ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 21), Address:= _ 
     File.Path, TextToDisplay:=File.Name 
     i = i + 1 
     Call TextboxWrite(i)      ' PASS ARGUMENT 
    Next 
End Sub 

Sub TextboxWrite(i As Integer)     ' RECEIVE ARGUMENT 
    Sheet5.Range(i, 12) = jobNumTextBox.value 
    Sheet5.Range(i, 15) = TownTextBox.value 
    Sheet5.Range(i, 16) = YearTextBox.value 
    Sheet5.Range(i, 18) = StreetTextBox.value 
    Sheet5.Range(i, 19) = PhaseTextBox.value 
    Sheet5.Range(i, 20) = cdTextBox.value 
End Sub 

而且,在VBA的最佳實踐,任何子程序或函數之外的頂線使用Option Explicit。這迫使你聲明在宏執行之前編譯代碼(Debug \ Compile)時使用的每個變量,希望這是慣例。此外,預計運行時錯誤On Error處理。如果您合併了Err.NumberErr.Description,您將收到有關該問題的更多詳細信息。

+0

我現在有兩個錯誤(越來越近)。 1. Option Explicit不允許代碼運行,說我只能在end subs之後有註釋。 2.在'Sheet5.Range(i,12)= jobNumTextBox.value'處,我收到「運行時錯誤424對象需要」。 –

+0

注意'Option Explicit',因爲我沒有看到你所有的代碼。希望你在這裏實際上並沒有使用省略號......(意思是重複使用上面的代碼)。此外,除非此代碼位於用戶窗體後面,否則必須按照用戶窗體的名稱限定文本框的名稱。這似乎解決了你的直接問題。請接受以確認解決方案。 – Parfait

相關問題