2016-07-25 4 views
0

私は、関連する情報を含むPDFファイルのロギングプロセスを自動化するために、userformを持つデータベースを作成しています。関連情報を含む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

コードを実行すると、どこにエラーが表示されますか? (エラーがなければ、正常に動作した最後の行は何ですか?)なぜハイパーリンクについての行があるのか​​分からない、エクセルにリストされているファイルはフォルダの場所にハイパーリンクするはずですか?はいの場合は、ファイルダイアログで選択したフォルダの場所ですか? –

+0

ハイパーリンクの部分は、ファイル名を抽出して次の空きセルのセルに出力するチュートリアルのものでした。私はハイパーリンクを使用していません。 –

答えて

0

呼び出されたサブルーチンTextboxWrite()iの値を渡す必要があります。今、それはグローバル変数が、ローカルのものではないので、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

私は今、2つのエラー(近づいている)を持っています。 1. 'Option Explicit'はコードの実行を許さず、end subsの後にしかコメントを書くことができないと言います。 2. 'Sheet5.Range(i、12)= jobNumTextBox.value'に「Run-time error 424 Object Required」と表示されます。 –

+0

あなたのコードがすべて表示されないので、 'Option Explicit'を注意してください。うまくいけば、あなたはここで省略記号を実際には使わなかったでしょう(上記のコードを再利用することを意図しています)。また、このコードがユーザーフォームの背後にある場合を除き、作業中の回答と同じように、UserFormの名前でテキストボックスを修飾する必要があります。これはあなたの直ちに問題を解決したようです。解決を確認するために同意してください。 – Parfait

関連する問題