2016-05-30 30 views
1

私のデスクトップには、csvのファイルを多用するフォルダがあります。これらのファイルには1枚の「シート」しかありませんが、シート名は異なります。唯一の類似点は、「タンカード」という単語で始まることです。VBA:異なる名前のファイルを持つ特定のフォルダ内の列 "A"を削除する方法

この1枚のシートでは、すべての2000ファイルに対して、Column Aを削除して保存するだけです。私の2ヶ月目は、仕事でのVBAの自動化を探るだけです。誰かが私を助けることができるなら、私は感謝します。前もって感謝します。

スクリプト:

Sub Tank() 
Dim wb As Workbook 
Dim myPath As String 
Dim myfile As String 
Dim myExtension As String 
Dim SheetName As String 
'Optimize Macro Speed 
    Application.ScreenUpdating = False 
    Application.EnableEvents = False 
    Application.Calculation = xlCalculationManual 

SheetName = "Tankard*" 
    myPath = "\\ph00winfdfs01p\shares\JoeyC\documents\Roaming\Windows\Desktop\Tank\" 
    If myPath = "" Then GoTo ResetSettings 

'Target File Extension (must include wildcard "*") 
    myExtension = "Tankard*.csv" 

'Target Path with Ending Extention 
    myfile = Dir(myPath & myExtension) 

'Loop through each Excel file in folder 
For i = 1 To 201 
Set wb = Workbooks.Open(Filename:=myPath & myfile) 
';;;;;;;;;;;;;;WRITE YOUR CODE HERE 
Sheets("SheetName").Select 
Columns("A").Select 
Selection.Delete 
wb.Close SaveChanges:=True 

Next i 
'Get next file name 
myfile = Dir 

'Message Box when tasks are completed 
    MsgBox "Task Complete!" 

ResetSettings: 
    'Reset Macro Optimization Settings 
    Application.EnableEvents = True 
    Application.Calculation = xlCalculationAutomatic 
    Application.ScreenUpdating = True 

End Sub 
+0

csvファイルを開くときにシート名がファイル名(拡張子なし)にならないのですか? (私はCSVファイルの経験はありませんが、それは私のためにしたものです) – arcadeprecinct

+0

あなたの入力をありがとう。私の問題は解決されました! –

答えて

0

何が起こっているか理解してみてください。このサブが現在実行しているのは、Dirが見つけることができる最初のブックを開き、それを201回開き、シート「Sheetname」の最初の列を毎回削除することです。

Sheets("SheetName").Select 

これは名前"Sheetname"のシートを選択し、あなたがに文字列Sheetnameを設定した値ではない名前。何でもあれば、Sheets(Sheetname)でなければなりませんが、とにかくワイルドカードはここでは機能しません。

ここで、達成しようとしているプロセスを見てみましょう。ファイルを開き、今はシートIの最初の列を削除するにはwb

を経由してワークブックにアクセスすることができます...\Tankard*.csv

Set wb = Workbooks.Open(Filename:=myPath & myfile) 

あなたのパターンに一致する最初のファイルへ

myfile = Dir(myPath & myExtension) 

セットmyfileその範囲を直接削除することをおすすめします。

wb.Sheets(1).Columns(1).Delete 'If you want to actually delete the column 
wb.Sheets(1).Columns(1).Clear 'If you want to just remove the values 

ご覧のとおり、シートの名前はまったく必要ありません。今すぐブックを保存:

wb.Close SaveChanges:=True 

今、あなたはDirを使用して次のファイル名にmyfileを設定することができます。

myfile = Dir 

それまで、それ以上のファイルが(存在しないその時点でDir""を返すことを繰り返しザ・それを達成するための最良の方法は、例えば、この

While myfile <> "" 
    'Do stuff here 
Wend '(While End) 

Tのように、Whileループを使用することですForループを超える利点は、フォルダ内のファイルの正確な数を知る必要がないことです。

私はそれをすべてまとめてパッチすることを任せます。

+0

私はすべてのあなたの提案をまとめることができました。出来た!ありがとう。このサイトや他のサイトを介して概念を理解しようとするだけで、vbaを初めて使う人。プラスyoutubeの動画。もう一度ありがとう –

+0

私は助けることができてうれしい。これを答えられたとマークすることも考えられます;) – arcadeprecinct

関連する問題