在《VBA代碼解決方案》一書完結後,我寫了《VBA程序調試》一文,在文章中,我著重講了如何進行程序的調試,這篇文章的內容其實是很深的,為了讀者能更好地領會其中的意思,我將就幾個重點的部分內容再做側重地解釋,這些內容和我編程搭積木的思想是一脈相承的,希望給朋友分享些有用的經驗。
程序的編寫過程中,在第二冊的85講到89講,我講了程序優化的問題,其實在這些章節中,我也一直在講視覺和程序運行時間的兼顧問題。我在做程序的時候,往往注重的是前者,而不是後者,為什麼呢?其實VBA帶給我們的就是實用,真正要求做到節約時間往往是那些大型程序考慮的範疇,正如我在講到VBA地位時的比喻,那些大型程序是城市與城市之間的高鐵啊、火車啊、飛機啊,而VBA只是連接車站到家之間的汽車、電動車,當你考慮大型數據處理時最好要藉助大型程序,如Python、PHP、GO、JAVA等等,從嚴格意義上講,VBA不能稱之為一種獨立的語言體系,只是寄生於OFFICE的一條寄生蟲,但你不要小看它,這部分交通運行不順暢,也會引起城市的擁堵,工作效率的低下。
所以,我們在工作中主要考慮的是視覺的效果,其次才是時間的節約。如何做到視覺的愉悅呢?下面我就來就一段實際的程序和大家分享。今天的程序讀者也可以作為一個工具利用。
需求:建立一個工作薄1,寫入代碼,代碼執行首先打開另外一個指定工作薄2,把其中工作表sheet1中A,B列的內容寫入數組,然後關閉工作薄2,回到工作薄1,把數組數據保存到工作表1的CD列中。
這個案例在實際工作中會經常用到,或者類似的應用非常多,大家可以記住下面的代碼。
要利用到的知識點:
1 工作薄的打開;
2 數據寫入數組;
3 數組數據的導出。
今天我利用到了《方案》第三冊第113講的內容,將一個工作薄中工作表的數據寫入數組,然後導出,看下面的代碼截圖:
代碼:
Sub mynzkk()
Dim a(5000, 2)
Workbooks.Open Filename:=ThisWorkbook.Path & "\工作表.xlsx" '打開一個指定存儲數據的工作薄
Workbooks("工作表.xlsx").Activate '讓數據的工作表處在激活狀態
MsgBox ("數據已經打開,是否繼續?") '判斷是否繼續
Sheets("SHEET1").Select
k = 0
i = 1
'數組,並賦值
Do While Cells(i, 1) <> ""
k = k + 1
Cells(i, 1).Select
a(k, 1) = Cells(i, 1) '寫入數組
a(k, 2) = Cells(i, 2)
i = i + 1
Loop
Workbooks("工作表.xlsx").Close '關閉數據工作薄
Workbooks("工作簿1.xlsm").Activate '讓主程序的工作薄處在激活狀態
Sheets("SHEET1").Select
[C1:D65536].Clear '清除原有數據
MsgBox ("下面將寫入數據,請確認!")
For i = 1 To k
Cells(i, 3).Select
Cells(i, 3) = a(i, 1)
Cells(i, 4) = a(i, 2)
Next
MsgBox ("OK!")
End Sub
代碼講解:上述代碼中,為了照顧到視覺,我加了四條語句如下所示:
目的:
1 讓程序的運行可視,操作者可以隨時知道程序運行到了哪裡。
2 讓應用這個程序的人有個主動的感覺,好像是自己在操控著程序的運行。這也是從心理上來取悅程序的使用者。其實不加這些都是可以的。