今日的內容是「VBA之EXCEL應用」的第三章「工作簿(Workbook)和工作表(Worksheet)對象(Object)」中第六節「批量導入工作表到同一個文件」。「VBA之EXCEL應用」這套教程從簡單的錄製宏的講解,一直到窗體的搭建,內容豐富,案例眾多。大家可以非常容易的掌握相關的知識,這套教程面向初學人員,共三冊,十七章,都是我們在利用EXCEL工作過程中需要掌握的知識點,希望大家能掌握利用。
第六節 批量導入工作表到同一個文件
大家好,我們在上節講解了如何提取一個文件夾下面的文件名及每個文件的工作表的名稱到工作表中,這講我們將講解如何把一個文件夾下的所有文件的工作表導入到同一個文件中,這講將講解的知識點有:工作表的整體導入方法,以及如何關閉例外提示的信息。
1 實現批量導入工作表的場景分析
我們在實際工作中,經常會用到把多個文件的工作表批量複製到同一個文件中,如下,在當前路徑的文件夾「導入文件」中有若干個文件:
我們的目的是將每個文件中的工作表逐一複製到同一個文件中,形成一個文件。這講我們將講解這個問題的代碼實現過程。
2 實現批量導入工作表的思路分析
為了實現批量導入工作表,我們仍是利用文件夾中文件的遍歷及每一個文件中工作表的遍歷,在實現遍歷的時候要進行的是工作表的複製,然後粘貼到同一個文件中。對於複製和粘貼工作表我們要利用的是工作表複製語句。
對於工作表的複製和粘貼,有時會有異常信息的提示,這是我們所不期望的,這就要屏蔽這些信息。也是利用VBA代碼來完成這項工作。
3 工作表的複製和粘貼(Worksheet.Copy方法)
將工作表複製到當前工作簿或新工作簿中的其他位置,我們可以用Worksheet.Copy 方法
1)語法:expression.Copy (Before, After)
2)參數:
① Before 可選 Variant類型 將要在其之前放置所複製工作表的工作表。如果指定After, 則不能指定Before。
② After 可選 Variant類型 將要在其之後放置所複製工作表的工作表。 如果指定了 Before,則不能指定 After。
3)使用說明:如果不指定Before或After, Microsoft Excel 將新建一個工作簿, 其中包含複製的工作表對象。新創建的工作簿包含ActiveWorkbook屬性, 並且包含一個工作表。 單個工作表保留源工作表的Name 和CodeName 屬性。如果複製的工作表在VBA 項目中包含一個工作表代碼工作表, 則該工作表也會進入新工作簿中。
4 屏幕刷新(ScreenUpdating)及例外信息提示(DisplayAlerts)
1) Application.ScreenUpdating 屬性 如果屏幕更新已啟用,此屬性的值為 True。
語法:expression.ScreenUpdating
參數:expression 表示 Application 對象的變量。
禁用屏幕更新可以加快宏代碼的速度。雖然無法實時了解宏的最新動態,但它的運行速度會變快。當宏結束運行後,請記住將 ScreenUpdating 屬性設置回 True。
2)Application.DisplayAlerts 屬性 如果宏運行時 Microsoft Excel 顯示特定的警告和消息,則為 True。
語法: expression.DisplayAlerts
參數:expression表示 Application 對象的變量。
expression.DisplayAlerts默認值為 True。 將此屬性設置為 False 可在宏運行時禁止顯示提示和警告消息;當出現需要用戶應答的消息時,Microsoft Excel 將選擇默認應答。如果將此屬性設置為False,要將代碼完成時將此屬性設為True。5 實現批量導入工作表的代碼及代碼的運行效果
為了實現工作表的批量導入,我先給出下面的代碼,然後再進行講解:
Sub mynzK() '導入工作表
Dim directory As String, myfileName As String, mysheet As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
directory = ThisWorkbook.Path & "\導入文件\"
myfileName = Dir(directory & "*.xl??") '使用Dir函數來查找存儲在此目錄中的第一個*.xl??文件
Do While myfileName <> ""
Workbooks.Open (directory & myfileName)
For Each mysheet In Workbooks(myfileName).Worksheets
total = ThisWorkbook.Worksheets.Count
Workbooks(myfileName).Worksheets(mysheet.Name).Copy _
after:=ThisWorkbook.Worksheets(total)
Next
Workbooks(myfileName).Close '關閉Excel文件
myfileName = Dir() '獲取其他Excel文件,再次使用Dir函數而不帶參數
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
代碼截圖:
代碼講解:
1) Application.ScreenUpdating = False
Application.DisplayAlerts = False
以上代碼將關閉屏幕更新及例外信息提示,在程序結束後,要打開這個設置,值為true。
2) total = ThisWorkbook.Worksheets.Count
變量total跟蹤導入的工作表的工作表數,我們最後將使用Worksheet對象的Copy方法複製每個工作表並將其粘貼到ThisWorkbook最後一個工作表之後。
3)Workbooks(myfileName).Worksheets(mysheet.Name).Copy _
after:=ThisWorkbook.Worksheets(total)
以上代碼將複製myfileName工作簿中的每個工作表,然後粘貼到當前工作簿的最後位置。
代碼運行效果:
從上圖中可以看出,文件夾中所有文件的工作表都拷貝到了當前的工作簿中了。
今日內容回向:
1) 如何關閉屏幕刷新及例外信息提示?
2) 如何導入整個工作表到當前工作簿?
3) 遍歷循環應用在這講有什麼作用?
本講內容參考程序文件:工作簿03.xlsm
分享成果,隨喜正能量
VBA的應用範圍及學習方法:
VBA是利用Office實現個人小型辦公自動化的有效手段(工具)。這是我對VBA的應用界定。在取代OFFICE新的辦公軟體沒有到來之前,誰能在數據處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!
我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重複我之前的經歷,我根據自己多年VBA實際利用經驗,推出了七部VBA專門教程。
第一套:VBA代碼解決方案 是VBA中各個知識點的講解,教程共147講,覆蓋絕大多數的VBA知識點,提供的程序文件更是一座不可多得的代碼寶庫,是初學及中級人員必備教程;目前這套教程提供的版本是修訂第二版,程序文件通過32位和64位兩種OFFICE系統測試。
第二套:VBA資料庫解決方案 資料庫是數據處理的專業利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,適合中級人員的學習。目前這套教程提供的是修訂第一版教程,程序文件通過32位和64位兩種OFFICE系統測試。
第三套:VBA數組與字典解決方案 數組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學習,是初級及中級人員代碼精進的手段。目前這套教程提供的版本是修訂第一版,程序文件通過32位和64位兩種OFFICE系統測試。
第四套:VBA代碼解決方案之視頻 是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。這套教程是第一套教程(修訂一版)的視頻講解,視頻更易接受。
第五套:VBA中類的解讀和利用這是一部高級教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。這套教程的領會主要是讀者的領悟了,領悟一種佛學的哲理。目前這套教程提供的版本是修訂第一版,程序文件通過32位和64位兩種OFFICE系統測試。
第六套教程:VBA信息獲取與處理,這是一部高級教程,涉及範圍更廣,實用性更強,面向中高級人員。教程共二十個專題,包括:跨應用程式信息獲得、隨機信息的利用、電子郵件的發送、VBA網際網路數據抓取、VBA延時操作,剪切板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定製工作表信息函數等等內容。程序文件通過32位和64位兩種OFFICE系統測試。
第七套教程:VBA之EXCEL應用 這是一部初級教程這部教程共三冊,從從創建宏、對話框、工作簿和工作表對象、單元格對象等基礎內容講起,到循環結構、錯誤處理、字符串操作、日期和時間、事件、數組應用,函數過程等方面,一直講解到控制項和窗體對象的應用都是我們提高自己EXCEL水平的必須。
以上各教程學習順序:7 1 3 2 6 5或者7 4 3 2 6 5。其中第四套是對第一套的視頻講解,所以第一和第四隻選其一即可。