2017-05-19 14 views
0

私はフォルダを持っています(毎回同じです - Application.FileDialogで選択する時間を無駄にする必要はありません)とExcelの列Cにすべてのファイル名を抽出する必要があります。Excel VBAでは、Application.FileDialog()を使用せずにフォルダ内のすべてのファイルの名前をインポートします。

これは私がここでApplication.FileDialog()とstackoverflowで見つけたコードですが、私はハードコードフォルダ(C:\ Users \ michal \ SkyDrive \ csv \ bossa \ mstcgl_csv)を入力します。

別の質問xDirectory $、xFname $、InitialFoldr $変数の末尾にある$記号は何ですか(重要)なぜそれらを宣言できないのですかas String? ? これらの変数は文字列ではありませんか? ?

これはコードです:

Sub GetFileNames()  
    Dim Lista As Worksheet    
    Dim xRow As Long      
    Dim xDirectory$      
    Dim xFname$       
    Dim InitialFoldr$ 

    Dim start As Double  
    Dim finish As Double  
    Dim total_time As Double 

    start = Timer    ' remember time when macro starts. 

    ThisWorkbook.Sheets("Lista").Range("C1").Select 

    InitialFoldr$ = "C:\Users\michal\SkyDrive\csv\bossa\" 

    With Application.FileDialog(msoFileDialogFolderPicker) 
     .InitialFileName = Application.DefaultFilePath & "\" 
     .Title = "Please select a folder to list Files from" 
     .InitialFileName = InitialFoldr$ 
     .Show       ' creates list of files ? ? ? 

      If .SelectedItems.Count <> 0 Then     
       xDirectory$ = .SelectedItems(1) & "\" 
       xFname$ = Dir(xDirectory$, 7) 
        Do While xFname$ <> "" 
         ThisWorkbook.Sheets("Lista").ActiveCell.Offset(xRow, 0) = xFname$ 
         ActiveCell.Offset(xRow) = xFname$       
         xRow = xRow + 1    
         xFname$ = Dir    
        Loop        
     End If 
    End With 
    finish = Timer     ' Set end time. 
    total_time = Round(finish - start, 3) ' Calculate total time. 
    MsgBox "This code ran successfully in " & total_time & " seconds", vbInformation 
End Sub 

はUの連中は私がそれを行う助けることができますか? 私はVBAの基本を学習していますが、まだ多くのことを理解していません。 そして、この行は、文字列にApplication.FileDialogからのパスを書き込みます$記号の質問:-)ください

+3

'Dim xFname $'は 'Dim xFname as String'の略語であり、読みにくいので通常はあまりにも頻繁に見えません。 – BrakNicku

+0

詳細については[こちらのドキュメント](http://stackoverflow.com/documentation/excel-vba/777/getting-started-with-excel-vba/2672/declaring-variables#t=201705191059133750012)を参照してください。ヒント"。 – YowE3K

答えて

2

スクラップFileDialogと直接Dir機能を使用します。

Sub GetFileNames() 

    Const InitialFoler As String = "C:\Users\michal\SkyDrive\csv\bossa\" 

    Dim Lista As Worksheet 
    Dim filename As String 
    Dim xRow As Long 
    Dim start As Double, finish As Double, total_time As Double 

    start = Timer    ' remember time when macro starts. 
    xRow = 1 

    filename = Dir(InitialFoler & "*.*") 

    With ThisWorkbook.Sheets("Lista") 
     Do While Len(filename) > 0 
      .Range("C" & xRow).Value = filename 
      xRow = xRow + 1 
      filename = Dir 
     Loop 
    End With 

    finish = Timer     ' Set end time. 
    total_time = Round(finish - start, 3) ' Calculate total time. 

    MsgBox "This code ran successfully in " & total_time & " seconds", vbInformation 
End Sub 

あなたはDir機能hereについての詳細を読むことができます。

2

を答えてください:

xDirectory$ = .SelectedItems(1) & "\" 

今、あなただけの代わりにその文字列にフォルダをハードコーディングする必要があります。

xDirectory$ = "C:\Users\michal\SkyDrive\csv\bossa\" 

FileDialogに関連するすべてのコードを削除してください。

"$"部分については、上記の@ BrakNickuの回答を参照してください。

関連する問題