1. 程式人生 > 其它 >【轉載】EXCEL VBA 20個有用的ExcelVBA程式碼

【轉載】EXCEL VBA 20個有用的ExcelVBA程式碼

1.顯示多個隱藏的工作表

如果你的工作簿裡面有多個隱藏的工作表,你需要花很多時間一個一個的顯示隱藏的工作表。

下面的程式碼,可以讓你一次顯示所有的工作表

Sub UnhideAllWoksheets()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Visible = xlSheetVisible
Next ws
End Sub

2.隱藏除了活動工作表外的所有工作表

如果你做的報表,希望隱藏除了報表工作表以外的所有工作表,則可以用一下程式碼來實現:

Sub HideAllExcetActiveSheet()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> ActiveSheet.Name Then
ws.Visible = xlSheetHidden
End if
Next ws
End Sub

3.用VBA程式碼按字母的順序對工作表進行排序

如果你有一個包含多個工作表的工作簿,並且希望按字母對工作表進行排序,那麼下面的程式碼,可以派上用場。

Sub SortSheetsTabName()
Application.ScreenUpdating = False
Dim ShCount As Integer, i As Integer, j As Integer
ShCount = Sheets.Count
For i = 1 To ShCount - 1
For j = i + 1 To ShCount
If Sheets(j).Name < Sheets(i).Name Then
Sheets(j).Move before:=Sheets(i)
End If
Next j
Next i
Application.ScreenUpdating = True
End Sub

4.一次性保護所有的工作表

如果工作薄裡面有多個工作表,並且希望保護所有的工作表,那麼下面的程式碼,可以派上用場。

Sub ProtectAllSheets()
Dim ws As Worksheet
Dim password As String
'用你想要的密碼替換Test123
password = "Test123"
For Each ws In Worksheets
ws.Protect password:=password
Next ws
End Sub

5.一次性取消所有的工作表保護

如果你保護了你所有的工作表,那麼你只需要修改一下程式碼,就可以取消所有工作表的保護。

Sub ProtectAllSheets()
Dim ws As Worksheet
Dim password As String
'用你想要的密碼替換Test123
password = "Test123"
For Each ws In Worksheets
ws.Unprotect password:=password
Next ws
End Sub

需要注意的是,取消保護工作表的密碼,要與鎖定工作表的密碼相同,否則程式會丟擲異常(出錯)。

6.顯示所有隱藏的行和列

下面的程式碼,可以取消所有隱藏的行和列。

如果你從別人那裡獲得一個Excel檔案,並希望沒有隱藏的行與列,那麼下面的程式碼對你非常有用。

Sub UnhideRowsColumns()
Columns.EntireColumn.Hidden = False
Rows.EntireRow.Hidden = False
End Sub

7.取消所有的合併單元格

把多個單元格合併成一個單元格時常用的做法:

如果你的工作表裡面有合併的單元格,使用下面程式碼可以一次性取消所有合併的單元格。

Sub UnmergeAllCells()
ActiveSheet.Cells.UnMerge
End Sub

8.儲存帶有時間戳的工作簿

很多時候,您可能需要建立工作的各個版本。

一個好的做法,就是在工作薄名稱上,加上時間戳。

使用時間戳將允許您返回到某個檔案,檢視進行了哪些更改或使用了哪些資料。

下面的程式碼會自動儲存工作簿在指定的資料夾中,並新增一個時間戳時儲存。

Sub SaveWorkbookWithTimeStamp()
Dim timestamp As String
timestamp = Format(Date, "dd-mm-yyyy") & "_" & Format(Time, "hh-ss") ThisWorkbook.SaveAs "C:UsersUsernameDesktopWorkbookName" & timestamp
End Sub

C:UsersUsernameDesktopWorkbookName你可以制定檔案位置和檔名。

"dd-mm-yyyy"指的的日期的格式。

"hh-ss"指的是時間的格式

9.將工作表另存為一個PDF檔案

如果您使用不同年份或部門或產品的資料,可能需要將不同的工作表儲存為PDF檔案。

如果手動完成,這可能是一個耗時的過程,但vba確可以加快速度。

下面是一個將每個工作表儲存為單獨PDF的VBA程式碼

Sub SaveWorkshetAsPDF()
Dim ws As Worksheet
For Each ws In Worksheets
ws.ExportAsFixedFormat xlTypePDF, "C:UsersSumitDesktopTest" & ws.Name & ".pdf"
Next ws
End Sub

在上面的程式碼中,我指定了要儲存pdf的資料夾位置的地址。

請注意,此程式碼僅適用於工作表。

10.將工作簿另存為單獨的PDF檔案

下面是將整個工作簿儲存為指定資料夾中的PDF格式的程式碼

Sub SaveWorkshetAsPDF()
ThisWorkbook.ExportAsFixedFormat xlTypePDF, "C:UsersSumitDesktopTest" & ThisWorkbook.Name & ".pdf"
End Sub

你可以修改儲存檔案的檔案件。

注意:9~10程式碼儲存為PDF檔案,需要在工作表裡面設定好列印的區域。如果有空的工作表,那麼程式會報錯。

11.將所有公式轉換為值

如果工作表包含大量公式,並且要將這些公式轉換為值,請使用此程式碼。

Sub ConvertToValues()
With ActiveSheet.UsedRange
.Value = .Value
End With
End Sub

此程式碼可以自動將使用公式的值轉換為值

12.有公式的單元格鎖定

當您有大量的計算並且不想意外的刪除或更改時,您可能希望使用把有公式的單元格進行鎖定。

下面是將鎖定所有具有公式的單元格的程式碼,而所有其它單元格都未鎖定。

Sub LockCellsWithFormulas()
With ActiveSheet
.Unprotect
.Cells.Locked = False
.Cells.SpecialCells(xlCellTypeFormulas).Locked = True
.Protect AllowDeletingRows:=True
End With
End Sub

13.保護工作簿中所有的工作表

使用以下程式碼一次性保護工作簿中的所有工作表

Sub ProtectAllSheets()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Protect
Next ws
End Sub

此程式碼將逐個瀏覽所有工作表並對其進行保護。

如果要取消所有工作表的保護,可以使用ws.unProtect

14.在所選內容中每隔一行後插入一行

如果要在選定區域中的每一行後插入空行,請使用此程式碼。

Sub InsertAlternateRows()
Dim rng As Range
Dim CountRow As Integer
Dim i As Integer
Set rng = Selection
CountRow = rng.EntireRow.Count
For i = 1 To CountRow
ActiveCell.EntireRow.Insert
ActiveCell.Offset(2, 0).Select
Next i
End Sub

同樣,您可以修改此程式碼,以便在所選範圍內的每一列之後插入一個空白列

15.自動在相鄰單元格中插入日期和時間戳

當您想要跟蹤活動時,可以使用時間戳。

使用此程式碼在建立條目或編輯現有內容時在相鄰單元格中插入日期和時間戳。

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Handler
If Target.Column = 1 And Target.Value <> "" Then
Application.EnableEvents = False
Target.Offset(0, 1) = Format(Now(), "dd-mm-yyyy hh:mm:ss") Application.EnableEvents = True
End If
Handler:
End Sub

請注意,您需要將此程式碼插入工作表程式碼視窗(而不是模組內程式碼視窗)。因為這是一個事件程式碼

16.突出顯示所選內容中的可選行

突出顯示可選行可以極大地提高資料的可讀性。

下面是一個程式碼,它將立即突出顯示所選內容中的可選行。

Sub HighlightAlternateRows()
Dim Myrange As Range
Dim Myrow As Range
Set Myrange = Selection
For Each Myrow In Myrange.Rows
If Myrow.Row Mod 2 = 1 Then
Myrow.Interior.Color = vbCyan
End If
Next Myrow
End Sub

注意,程式碼中指定了顏色為vbCyan(也可以修改成:vbRed, vbGreen, vbBlue)。

17.突出顯示拼錯單詞的單元格

Excel沒有像在Word或PowerPoint中那樣進行拼寫檢查。雖然可以按F7鍵進行拼寫檢查,但當出現拼寫錯誤時,沒有視覺提示。

使用此程式碼可以立即突出顯示其中有拼寫錯誤的所有單元格。

Sub HighlightMisspelledCells()
Dim cl As Range
For Each cl In ActiveSheet.UsedRange
If Not Application.CheckSpelling(word:=cl.Text) Then
cl.Interior.Color = vbRed
End If
Next cl
End Sub

請注意,突出顯示的單元格包含Excel認為是拼寫錯誤的文字。當然在許多情況下,它也會其它各種錯誤。

18.重新整理工作簿中的所有透視表

如果工作簿中有多個透視表,則可以使用此程式碼一次重新整理所有這些透視表。

Sub RefreshAllPivotTables()
Dim PT As PivotTable
For Each PT In ActiveSheet.PivotTables
PT.RefreshTable
Next PT
End Sub

19.將所選單元格的字母大小寫改為大寫

雖然Excel有更改文字字母大小寫的公式,但它使您可以在另一組單元格中進行更改。

使用此程式碼可以立即更改所選文字中文字的字母大小寫。

Sub ChangeCase()
Dim Rng As Range
For Each Rng In Selection.Cells
If Rng.HasFormula = False Then
Rng.Value = UCase(Rng.Value)
End If
Next Rng
End Sub

注意,在本例中,使用了UCase將文字大小寫設為大寫。

20.突出顯示有批註的單元格

使用下面的程式碼突出顯示其中包含註釋的所有單元格。

Sub HighlightCellsWithComments() ActiveSheet.Cells.SpecialCells(xlCellTypeComments).Interior.Color = vbBlue End Sub

在本例中,使用vblue為單元格賦予藍色。如果你想的話,你可以把這個換成其他顏色。