2020年10月24日 星期六

Excel VBA:批次檔案處理 (一般excel檔案處理;csv、xlsm、xls....)

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

做一般excel檔案操作,相對簡單的。

流程類似txt檔案;

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

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

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

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

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

Private Sub CommandButton1_Click()

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

End Sub

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

Private Sub CommandButton2_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:=","

'修改這部分即可

Workbooks.Open Filename:=FILE_OPEN.SelectedItems(i)


            
            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

2021.10.18更新:

參考檔案下載









沒有留言:

張貼留言

我的雷達:2024/11/15

  似乎有一種不安的味道