VBA代碼的調試行為

2020-12-16 VBA語言專家

大家好,在第47和48講中,我們比較詳細地給大家講解了各種模塊的有效行為。大家可以窺探到各種模塊的實質,有了對於模塊的認識,我們在寫代碼時就可以更好的把握自己的工程。那麼對於一個工程而言,從需求,到思路的建立,到代碼的編寫,是不是就行了呢?不是的,在代碼編寫完後還有非常重要的一步,就是代碼的調試。

關於VBA代碼的調試,無論是標準模塊的代碼,還是窗體模塊的代碼,或者類模塊中的代碼,調試都是寫代碼工程中一項重要的工作。當房子建好後,我們首先要測試房子的各項指標是否達到了我們要求,這個就是程序調試。不是每個程序寫完後都能馬上正常運行,在某種程度上講,寫完代碼後的調試本身就是寫代碼的一部分。有的程序調試過程很快,有的會時間長些,有的甚至會推倒重來。

什麼是程序調試

所謂程序的調試,就是編制的程序在投入實際運行前,要進行的測試。

測試過程包括修正語法錯誤和邏輯錯誤。這是保證程序正確性的必不可少的步驟。通過測試時所發現的錯誤,要進行診斷,找出原因和具體的位置進行修正,從而完善程序。說的直白些,就是說你的房子搭建好後,在你搬家之前進行的綜合檢驗。

程序調試的範圍

程序調試的範圍較廣,一般包括如下幾個方面:

1語法錯誤的檢驗:每一種語言都有自己的語法習慣,你寫的代碼必須要符合這些規範,而且是必須的。錯一絲一毫也通不過。比如半角、全形;參數是否傳遞正確,是否有相應的屬性等等。

2運行過程的檢驗:需要注意循環是否是閉合,with語句是否是閉合,參數的定義範圍,數組的上下標是否越界等等。

3實際結果的檢驗:上面的第一第二都通過了,程序開始運行,但運行的結果不一定是你期望的結果。這就要考慮邏輯問題了。

4程序優化的檢驗,如果結果和你的預想一致,那麼是否就說明程序完美了?不是的,還要有程序優化問題,包括:代碼可讀性是否強;佔用內存是否最少;運行時間是否最短;可視效果是否最佳。

代碼調試的原則

1分析思考與錯誤徵兆有關的信息。

2調試的過程也是自己再學習的過程。

3修改錯誤的同時應避免產生新的錯誤。

代碼調試的方法

1 代碼寫完後要再次閱讀,要最大限度地減少書寫的錯誤。

2 在大腦中模擬運行,這個過程十分關鍵。要讓代碼在你的大腦中先運行,看運行的步驟,哪個過程先執行,哪個後執行,數據怎麼進行查找等等,這個過程也是檢查你寫代碼的邏輯是否嚴謹。這個內容在《VBA代碼解決方案-視頻講解》中我曾經多次地講到。

3 分過程小範圍調試,上述的步驟之後,開始真正的調試了,要先小範圍的調試,看看數值的關係是否正確。充分利用語句的中斷符,msgbox , 臨時參數,分步驟運行等等。

4 總體的測試,小範圍測試沒問題後,開始執行大範圍的測試。這個時候主要看最終的執行結果了,這個時候要設置特殊值來校驗,不要一開始就執行幾千幾萬的數據,要從幾行開始。根據我的經驗,一般出現問題常在一首一尾,所以要重視首尾的數據運行結果。如果與自己大腦的設想結果全然不符,就要檢查你編程的邏輯了。

5 數據的追蹤。當出現了非預期的數值或者現象的時候,要知道如何去追蹤數據,這裡就靠自己的經驗了,但仍要注意語句的中斷符,msgbox , 臨時參數的利用。

今日內容回向:

1 代碼調試的意義是什麼?

2 如何理解代碼的調試行為?

在取代OFFICE新的辦公軟體沒有到來之前,誰能在數據處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!眾鳥高飛盡,孤雲獨去閒。相看兩不厭,只有敬亭山。

學習VBA是個過程,這個過程是自己忍受孤獨的過程。

「水善利萬物而不爭」,你看她綿綿密密,微處則無聲,巨則洶湧。學習亦如此,把握現在,為達千裡,需要默默耕耘,知道什麼是自己所需要的,不要蜷縮在一小塊自認為天堂的世界裡,待到暮年時去自欺欺人。要在當下,用一顆充滿生機的心靈,努力提高自己,這才是進取。越是有意義的事情,困難會越多。願力決定始終,智慧決定成敗。不管遇到什麼,都是風景。看淡紛爭,看輕得失。一杯茶,滿也好,少也好,不要去計較;濃也好,淡也好,其中都有值得品的味道。去感悟真實的時間,靜下心,多學習,積累福報。而不是天天混日子,也不是天天熬日子。一切眾生的心都在變化,像時間一樣,永遠不會停留,把握現在就是福報。

VBA是利用Office實現自己小型辦公自動化的有效手段,我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重複我之前的經歷,我根據自己多年VBA實際利用經驗,推出了五部VBA專門教程,回向給需要學習的朋友:

第一VBA代碼解決方案是VBA中各個知識點的講解,覆蓋絕大多數的VBA知識點,初學必備;

第二VBA資料庫解決方案資料庫是數據處理的專業利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作。

第三VBA數組與字典解決方案數組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學習。

第四VBA代碼解決方案之視頻是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。

第五VBA中類的解讀和利用是一部高級教程,講解類的虛無與肉身的度化,可以對促進自己理論的提高。

學習的過程也是修心的過程,修一個平靜的心。在代碼的世界中,心平靜了,心情好了,身體自然而然就好。心靜則正,內心裡沒有那麼多邪知邪見,也就沒有那麼多妄想。在平靜中積累自己的財富。我的上述教程是我多的經驗的傳遞,大家可以根據1,3,2,5或者是4,3,2,5的順序逐漸深入的逐漸學習。

最後將一闕詞送給致力於VBA學習的朋友:

浮雲掠過,暗語無聲,

唯有清風,驚了夢中啼鶯。

望星,疏移北鬥,

奈將往事雁同行。

阡陌人,昏燈明暗,忍顧長亭。

多少VBA人,

暗夜中,悄聲尋夢,盼卻天明。

怎無憑!

分享成果,隨喜正能量

相關焦點

  • VBA代碼大全030:用vba強制關閉word應用程式
    這時候一般的套路都是在excel vba中創建word應用程式實例,然後一番操作以後關閉word應用程式。 這樣就會出現當再次運行這個代碼時,出現重新加載word應用程式時卡頓的情況,導致代碼長時間不響應。 這裡介紹一段代碼放在上面的結構的最後,可以強制的關閉任何存在的word.exe進程,從而掃清障礙。
  • Excel VBA常用代碼!
    前兩天有兩位朋友留言想收集一些VBA的常用代碼,今天開始會陸續分享一些!記得收藏好哦,因為今後你應用到稍大型Excel VBA程序時,這其中某些代碼肯定會用到。來看看都是哪些常用代碼:下面先舉一個簡單的例子:場景再現:在當前的工作表中插入一張e盤中名為1.jpg的圖片(長350、高300,距離Excel左側90、上邊框230)操作方法:第一步,打開vba代碼區
  • Electron的代碼調試
    (主進程調試)Debug Renderer Process(渲染進程調試)這兩個選擇和工程文件夾下的.vscode\launch.json的內容對應,如下圖VScode調試主進程 選上圖的Debug Main Process,就能使代碼停在主進程代碼main.js中設置的斷點,如下圖:
  • excel VBA是什麼?VBA編程入門教程
    本篇將介紹excel vba是什麼?vba編程入門教程,有興趣的朋友可以了解一下!一、excel vba是什麼?VBA的英文全稱是Visual Basic for Applications,是一門標準的宏語言。VBA語言不能單獨運行,只能被office軟體(如:Word、Excel等)所調用。
  • VBA代碼大全010:用vba遍歷文件夾及其子文件夾內的文件
    vba老手都知道,vba寫多了,其實都是在做循環。循環處理多個單元格的內容,循環處理多個工作表的內容,循環處理多個工作簿的內容。
  • vba第十八課
    vba第十八課調用工作表函數在vba中我經常會對工作表的數據進行一些運算,雖然通過代碼進行循環或判斷也可以完成,但是通vba調用函數可以更簡單更直接進行運算提高代碼的運行效率,比如countif、sumif等需要進行判斷統計和求和的運算。
  • VBA程序正式運行前的調試
    這個時候就是程序調試了。不是每個程序寫完後都能馬上會正常運行的,有的調試過程很快,有的會時間長些,有的甚至會推倒重來。什麼是程序調試呢?就是編制的程序在投入實際運行前,要進行的測試,測試過程包括修正語法錯誤和邏輯錯誤的過程。這是保證程序正確性的必不可少的步驟。通過測試時所發現的錯誤,要進行診斷,找出原因和具體的位置進行修正.從而完善程序。
  • Excel VBA流程圖解之For循環的本質 原來系統偷偷幹了很多事
    今天我們來看一下For循環,我相信所有學vba的朋友肯定要用For循環,但是你是否知道為什麼你3條語句就能成為一個循環呢?系統在語句的前後幫我做了那些事,下面這張圖說明了一切!!For 循環的語句形式計數器和步長值不一定是整數,但是建議始終用整數,用小數會造成一些不必要的麻煩,特殊時候可以用一下在for 和next之間任意位置 可以用exit for退出循環,用以在出現特殊情況的時候提前結束循環循環語句可以嵌套下一層循環,以及其他的完整vba
  • 利用VBA代碼,對Excel表格進行字體設置
    No.1字體設置是Excel或Word辦公軟體最簡單的操作,下面把所有字體對象的屬性羅列一遍,介紹一下,如何使用vba代碼進行相應的字體設置。下圖為字體對象Font的所有屬性。一共18個。下面重點看一下代碼,如何來實現。
  • GDB與Valgrind ,調試C++代碼內存的工具
    筆者 入"坑"C++之後,在調試 C++代碼的過程之中,學習了不少調試代碼內存的工具。希望借這個機會來介紹一下筆者常用的工具,GDB,Valgrind等等,相信大家通過好好運用這些工具,能更好的馴服內存這匹"野馬"。
  • 【收藏備用】VBA錯誤合集及調試技巧
    學習VBA有時候會有一個階段:一看代碼就會,一寫就錯的感覺。歸根到底還是眼高手低,對於代碼不熟練。真正的勇士都是從一次一次的錯誤中總結經驗,慢慢的減少代碼錯誤。所以積累一些VBA錯誤提示及解決方法還是很有必要的。
  • 「Python替代Excel Vba」系列(終):vba中調用Python
    所有的修改都無需改動代碼。數據源文件與顯示文件是獨立分開的。其中 myproject ,可以自定義任何名字,這個名字是生成的目錄名字此刻你會發現在當前目錄會有一個myproject的文件夾,打開後會看到如下2個文件:我們需要往其中的 py 文件寫入處理代碼
  • VBA程序報錯,用調試三法寶,bug不存在的
    2.VBA程序如何調試?我們根據上述案例的特點,並結合之前For循環結構和IF分支結構的2個知識點,首先將這個案例的代碼寫完(大家肯定都會寫,我就直接展示了)。如果我的代碼中有很多個變量,我要查看多個變量的值,那豈不是...想想都頭皮發麻呢。一聽就知道,心中有這樣疑問的同學,絕對是「懶中王者」,妥妥的未來科技界領頭羊。所以,接下來,猴子就再給你介紹個「懶人」VBA調試法寶。(4)「添加監控」讓VBA調試更貼心我們在VBA選項卡依次點選「調試」-「添加監控」
  • 如何替換單元格內容,vba代碼幫你一步解決
    按鈕代碼:Private Sub ChangeName()Dim s As WorksheetSet s = ThisWorkbook.ActiveSheetDim r As Range, ro As Long, Rchr As String, xStr As StringxStr = vba.Trim(Me.TextBox1.Value)'文本框內容Set r = s.Range
  • 這些調試技巧都不會,不要說會VBA編程
    程序調試是編程過程的重要組成部分,程序調試可以讓我們修正程序的語法錯誤和邏輯錯誤,並能儘可能地減少程序中的bug。Excel的VBE也提供了豐富的調試工具,如斷點調試,立即窗口和監視窗口等。下面將介紹幾個常用的VBA編程調試技巧。
  • 如何用VBA代碼新建自選圖形,還不會,馬上來學
    下面我們來學習一下,如何利用vba代碼進行自選圖形的創建,刪除,修改等操作。No.2自定義圖形就是各種大小不同,顏色各異,形狀怪異的封閉區域。太多的類型也只是讓我們選擇不同的參數,所以這方面不是十分難理解,操作也方便。
  • Excel VBA 實例(22) - 一鍵篩選其他工作表或工作簿的數據
    今天說的這個vba實例還是和學校有關。
  • VBA代碼用SetFocus精確控制焦點事件
    今日內容是和大家分享VBA編程中常用的 「積木」過程代碼,這些內容大多是取至我編寫的「VBA代碼解決方案」教程中內容。VBA過程代碼211:如果錄入數據不合規,VBA代碼控制焦點返回的另一方案Private Sub CommandButton1_Click()If TextBox1.Text <> "" And TextBox2.Text <> "" ThenSheets
  • VBA編程理論學習之談
    有些是解決基本應用需求,也有一些是Excel vba基礎的對象以及屬性功能介紹。總的來說,這個月有一些進展,也有一些心得和知識積累。有幾篇比較不錯的文章持續得到展示和瀏覽,說明這方面還是做到了大多數關注。
  • 如何用VBA代碼添加Form窗體表單,看完全明了,詳細講解
    NO.1使用VBA代碼添加Form窗體表單,對於一些初學者來說,似乎真的很為難。除了對代碼陌生之外,並不知道如何來進行操作添加後的窗體。這也是一件十分困擾的事情。本節將介紹一下,使用vba代碼添加窗體,然後在窗體上添加控制項,如標籤按鈕等等方法。NO.2vba中 VBComponents集合裡包含了模塊、窗體、類模塊。