Excel VBA 編寫一個實際工作應用的程序

如果我們想要去用VBA實現某一個功能,那麼我們是如何去實現這個功能呢?我們接下來要和你說的是一個用VBA去實現一個目的,我們需要把我們的目的進行拆解,分析問題,解決問題,寫出代碼,最後完成需求。

Excel VBA 編寫一個實際工作應用的程序

舉一個例子,我們現在需要編寫一個程序,想要實現的功能是排序工作表,讓按照我們指定的規則進行排序,方便我們整理數據。

現在我們的終極目的有了,那麼我們就應該去一步一步的分析問題,轉化為我們用代碼可以實現的需求。如下為我們的分析過程:

A、 如何實現排序功能,我們可以利用工作表的排序功能進行實現

B、 高效可靠

C、 對於任何工作表都可以通過,輕易進行執行

D、 屏蔽錯誤,或者可以說解決所有的可能出現的問題

Excel VBA 編寫一個實際工作應用的程序

首先解決我們第一問題,排序的代碼,我們要是不知道的話,我們可以通過錄制宏來得到我們所需要的源代碼,如下圖所示:

但是我們的代碼其實是不支持工作表排序的,我們後面可以通過對工作表的名稱進行排序,然後讓他們排排站就可達到我的所需的目的。

我們現在開始代碼的編寫過程,我們利用的對工作表的名稱進行排序,然後讓他們按照規則進行排序站位即可。

第一步編寫排序過程,我們採用冒泡排序法,其實這個方法可以對數組進行排序,但是速度不是很快,優點是簡單易寫。冒泡排序法採用用循環和判斷語句進行處理。具體原理為循環對每一個元素進行循環,然後利用判斷進行比較大小,然後交換位置,這樣就達到排序的要求,代碼如下:

第二步,讓程序根據我的排序代碼提供排排站功能,我們利用排序的代碼進行排序移動,代碼如下:

Excel VBA 編寫一個實際工作應用的程序

其實這個代碼就是我們的錄製宏而達到的代碼,進行修改的。如下為我們最新完成的代碼集合,有需要的可以找我。

Sub SortSheets()
Dim SheetNames() As String
Dim i As Long
Dim SheetCount As Long
Dim OldActive As Object

If ActiveWorkbook Is Nothing Then Exit Sub
SheetCount = ActiveWorkbook.Sheets.Count
If ActiveWorkbook.ProtectStructure Then
MsgBox ActiveWorkbook.Name & " is protected.", _
vbCritical, "Cannot Sort Sheets."
Exit Sub
End If
If MsgBox("Sort the sheets in the active workbook?", _
vbQuestion + vbYesNo) <> vbYes Then Exit Sub
Application.EnableCancelKey = xlDisabled
SheetCount = ActiveWorkbook.Sheets.Count
ReDim SheetNames(1 To SheetCount)
Set OldActive = ActiveSheet
For i = 1 To SheetCount
SheetNames(i) = ActiveWorkbook.Sheets(i).Name
Next i
Call BubbleSort(SheetNames)
Application.ScreenUpdating = False
For i = 1 To SheetCount
ActiveWorkbook.Sheets(SheetNames(i)).Move _
Before:=ActiveWorkbook.Sheets(i)
Next i
OldActive.Activate

End Sub
Sub BubbleSort(List() As String)
Dim First As Long, Last As Long
Dim i As Long, j As Long
Dim Temp As String
First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If UCase(List(i)) > UCase(List(j)) Then
Temp = List(j)

List(j) = List(i)
List(i) = Temp
End If
Next j
Next i
End Sub

雖然這個不是萬能的排序,在我們排序時候會出現問題,比如在10和2之間排序的話,就會不太聽話的,所以沒有萬能的程序,只有不斷的修改代碼去實現功能。

以上就是我們今天和大家說的代碼對工作表進行排序工作,其實VBA代碼學習起來非常簡單,他就是一個腳本語言的存在,他有自己的條條框框,你按照他的遊戲規則來寫代碼就可以。如果有不明白的或者不懂的可以在下方留言,我們會一一解答的。

Excel VBA 編寫一個實際工作應用的程序

我是Excel教案,關注我持續分享更多的Excel技巧!


分享到:


相關文章: