close

延續 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

執行結果:

image

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

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

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

arrow
arrow

    a200271071 發表在 痞客邦 留言(0) 人氣()