1. 程式人生 > 實用技巧 >Excel技能樹系列10:拿來就用的巨集程式碼17條

Excel技能樹系列10:拿來就用的巨集程式碼17條

這裡有一部分拿來就用的巨集程式碼,可以先觀看目錄看看是否有需要的。

  1. 取消隱藏所有的行和列
  2. 對所有合併單元格取消合併
  3. 以當前時間為名字儲存工作簿
  4. 將每張工作表單獨儲存為一個PDF檔案
  5. 將工作簿儲存為一個PDF檔案
  6. 保護所有帶公式的單元格
  7. 給選定區域交替高亮顯示,增加可讀性
  8. 高亮顯示所有帶評論的單元格
  9. 在選定區域內高亮顯示所有的空單元格
  10. 重新調整所有的圖表為同樣大小
  11. 給當前工作簿建立備份
  12. 一次性關掉所有開啟的工作簿
  13. 將選中區域儲存為PDF檔案
  14. 刪除選中單元格區域的空格字元
  15. 將選定區域內的空白單元格以0填充
  16. 合併多個工作表
  17. 合併多個Excel檔案

對於Excel來說,只需要按住Alt + F11就可以開啟巨集編輯器,然後點選插入->模組選單,將程式碼複製進去,適當修改就可以使用了。對於WPS表格需要升級為專業版本,並且安裝VBA支援才可以執行巨集程式碼。


'取消隱藏所有的行和列
SubUnhideRowsColumns()
Columns.EntireColumn.Hidden=False
Rows.EntireRow.Hidden=False
EndSub
'對所有合併單元格取消合併
SubUnmergeAllCells()
ActiveSheet.Cells.UnMerge
EndSub
'以當前時間為名儲存Excel檔案
SubSaveWorkbookWithTimeStamp()
DimtimestampAsString
timestamp=Format(Date,"dd-mm-yyyy")&"_"&Format(Time,"hh-ss")
ThisWorkbook.SaveAs"目錄絕對路徑"&timestamp
EndSub
'將每張工作表單獨儲存為一個PDF檔案
SubSaveWorkshetAsPDF()
DimwsAsWorksheet
ForEachwsInWorksheets
ws.ExportAsFixedFormatxlTypePDF,"目錄絕對路徑"&ws.Name&".pdf"
Nextws
EndSub
'將動作不儲存為一個PDF檔案
SubSaveWorkshetAsPDF()
ThisWorkbook.ExportAsFixedFormatxlTypePDF,"目錄絕對路徑"&ThisWorkbook.Name&".pdf"
EndSub
'保護所有帶公式的單元格
SubLockCellsWithFormulas()
WithActiveSheet
.Unprotect
.Cells.Locked=False
.Cells.SpecialCells(xlCellTypeFormulas).Locked=True
.ProtectAllowDeletingRows:=True
EndWith
EndSub
'在選中區域的每一行下面插入一個空行
SubInsertAlternateRows()
DimrngAsRange
DimCountRowAsInteger
DimiAsInteger
Setrng=Selection
CountRow=rng.EntireRow.Count
Fori=1ToCountRow
ActiveCell.EntireRow.Insert
ActiveCell.Offset(2,0).Select
Nexti
EndSub
'給選定區域高亮交替顯示,增加表格可讀性
SubHighlightAlternateRows()
DimMyrangeAsRange
DimMyrowAsRange
SetMyrange=Selection
ForEachMyrowInMyrange.Rows
IfMyrow.RowMod2=1Then
Myrow.Interior.Color=vbCyan
EndIf
NextMyrow
EndSub
'高亮顯示所有帶評論的單元格
SubHighlightCellsWithComments()
ActiveSheet.Cells.SpecialCells(xlCellTypeComments).Interior.Color=vbBlue
EndSub
'高亮顯示選定區域內所有的空單元格
SubHighlightBlankCells()
DimDatasetasRange
SetDataset=Selection
Dataset.SpecialCells(xlCellTypeBlanks).Interior.Color=vbRed
EndSub
'將所有的圖表調整為同樣大小
SubResize_Charts()
DimiAsInteger
Fori=1ToActiveSheet.ChartObjects.Count
WithActiveSheet.ChartObjects(i)
.Width=300
.Height=200
EndWith
Nexti
EndSub
'按照時間建立當前工作簿的備份
SubFileBackUp()
ThisWorkbook.SaveCopyAsFilename:=ThisWorkbook.Path&_
""&Format(Date,"mm-dd-yy")&""&_
ThisWorkbook.name
EndSub
'刪除選中單元格區域的空格字元
SubRemoveSpaces()
DimmyRangeAsRange
DimmyCellAsRange
SelectCaseMsgBox("YouCan'tUndoThisAction."_
&"SaveWorkbookFirst?",_
vbYesNoCancel,"Alert")
CaseIs=vbYesThisWorkbook.Save
CaseIs=vbCancel
ExitSub
EndSelect
SetmyRange=Selection
ForEachmyCellInmyRange
IfNotIsEmpty(myCell)Then
myCell=Trim(myCell)
EndIf
NextmyCell
EndSub
'將選定單元格區域內的空單元格以0填充
SubreplaceBlankWithZero()
DimrngAsRange
Selection.Value=Selection.Value
ForEachrngInSelection
Ifrng=""Orrng=""Then
rng.Value="0"
Else
EndIf
Nextrng
EndSub
'合併多個工作表,這些工作表要有同樣的表頭,並且沒有合併單元格
OptionExplicit
Subhebing()
'把各班成績表中的記錄合併到"成績表"工作表中
DimshtAsWorksheet
Setsht=Worksheets("成績表")'你要合併在哪張工作表,就把哪張工作表的名字輸入進去即可
sht.Rows("2:65536").Clear'刪除成績表中的原有記錄
DimwtAsWorksheet,xrowAsInteger,rngAsRange
ForEachwtInWorksheets'迴圈處理工作簿中的每張工作表
Ifwt.Name<>"成績表"Then'你需要合併資料的那張工作表的名字
Setrng=sht.Range("A1048576").End(xlUp).Offset(1,0)
xrow=wt.Range("A1").CurrentRegion.Rows.Count-1
wt.Range("A2").Resize(xrow,7).Copyrng'數字7對應你要合併的工作表有多少列就寫幾,在本例中是7.
EndIf
Next
EndSub

合併多個工作表

'合併多個Excel檔案,這些工作表要有同樣的表頭,並且沒有合併單元格
OptionExplicit
SubHzWb()
DimbtAsRange,rAsLong,cAsLong
r=1'1是表頭的行數
c=7'7是表頭的列數
DimwtAsWorksheet
Setwt=ThisWorkbook.Worksheets(1)'將彙總表賦給變數wt
wt.Rows(r+1&":1048576").ClearContents'清除彙總表中原表資料,只保留表頭
Application.ScreenUpdating=False
DimFileNameAsString,shtAsWorksheet,wbAsWorkbook
DimErowAsLong,fnAsString,arrAsVariant
FileName=Dir(ThisWorkbook.Path&"\*.xlsx")
DoWhileFileName<>""
IfFileName<>ThisWorkbook.NameThen'判斷檔案是否是彙總資料的工作簿
Erow=wt.Range("A1").CurrentRegion.Rows.Count+1'取得彙總表中第一條空行行號
fn=ThisWorkbook.Path&"\"&FileName'將第1個要彙總的工作簿名稱賦給變數fn
Setwb=GetObject(fn)'將變數fn代表的工作簿物件賦給變數wb
Setsht=wb.Worksheets(1)'將要彙總的工作表賦給變數sht
'將工作表中要彙總的記錄儲存在陣列arr裡
arr=sht.Range(sht.Cells(r+1,"A"),sht.Cells(1048576,"B").End(xlUp).Offset(0,5))
'將陣列arr中的資料寫入工作表
wt.Cells(Erow,"A").Resize(UBound(arr,1),UBound(arr,2))=arr
wb.CloseFalse
EndIf
FileName=Dir'用Dir函式取得其他檔名,並賦給變數
Loop
Application.ScreenUpdating=True
EndSub

合併多個檔案


巨集程式碼系列到這裡就結束了,Excel篇就講這麼多了。後面有了新的體會的時候再來分享。普通使用者學會這些已經用的很不錯了。本系列至此結束。