2020年10月24日 星期六

Excel VBA:批次檔案處理 (TXT 純文字檔案;操作)

 延續 Excel VBA:批次檔案處理 (TXT 純文字檔案;架構) 這一篇,與

Excel VBA入門:開啟純文字檔(txt);Workbooks.OpenText

大概已經知道整個處理流程;

本篇就是操作面做說明。

前處理:筆者用 EXCEL VBA 開啟檔案 FileDialog應用 做使用。

資料處理:以有使用的行與列判斷資料位置。

輸出資料處理結果:直接貼在工作表2中。簡單處理。

以上流程僅需要2個命令按鈕跟2個工作表。

原始資料:

image

image

第一個按鈕(commandbutton1):清除工作表2資料與格式

Private Sub CommandButton1_Click()

 Sheets("工作表2").Cells.Clear
    
End Sub

第二個按鈕(commandbutton1):txt檔案批次處理。

Private Sub CommandButton1_Click()
Dim FILE_OPEN As FileDialog '宣告FILE_OPEN為檔案對話框
Set FILE_OPEN = Excel.Application.FileDialog(msoFileDialogFilePicker)
'設定FILE_OPEN為選取檔案功能
FILE_OPEN.InitialFileName = Excel.ActiveWorkbook.Path
'對話框開始目錄的設定
FILE_OPEN.Filters.Add "Excel File", "*.xls*"
'設定對話框要顯示的副檔名
FILE_OPEN.Filters.Add "所有檔案", "*.*"
FILE_OPEN.Show '顯示對話框
For i = 1 To FILE_OPEN.SelectedItems.Count
Source = Excel.ActiveWorkbook.Name
'儲存目前作業中檔案名稱
Windows(Source).Activate
'啟用目前作業中檔案名稱
Workbooks.OpenText Filename:=FILE_OPEN.SelectedItems(i), _
DataType:=xlDelimited, Other:=True, OtherChar:=","
WORKNAME = Excel.ActiveWorkbook.Name
Windows(WORKNAME).Activate
s1 = ActiveSheet.UsedRange.Columns.Count
'取得總使用行數
s2 = ActiveSheet.Range("a656536").End(xlUp).Row
'取得資料總列的方法
temp = ActiveSheet.Range(ActiveSheet.Cells(1, 1),_
ActiveSheet.Cells(s2, s1)).Value
Windows(WORKNAME).Close
Windows(Source).Activate
Sheets("工作表2").Activate
s3 = ActiveSheet.Range("a65360").End(xlUp).Row
'取得總使用列數
If s3 = 1 Then '資料空白時
ActiveSheet.Range(ActiveSheet.Cells(1, 1), _
ActiveSheet.Cells(s2, s1)) = temp
Else
'向下堆壘資料
ActiveSheet.Range(ActiveSheet.Cells(s3 + 1, 1),_
ActiveSheet.Cells(s3 + s1, s1)) = temp
End If
Next i
end sub


執行結果:

image

缺點:OpenText開檔速度慢了點。

待續:txt其實有時候會存在轉碼問題。

其他:Csv、.Xls.Xlsm等比較簡單,另篇說明。

沒有留言:

張貼留言

指數變化(2025.03.28)

 指數變化(2025.03.28) 上周焦點: 美國消費者信心指數 3/25 92.9 美國耐久財訂單月增率 3/26 1.4 PCE 月增 0.4 年增 2.8 (不多阿,最高還有5.5ㄝ)   本周愛看: 美國非農業就業人數變化 美國ISM製造業採購經理人指數 美國芝加哥FE...