VBA 教程 | VBA 程序結構入門

2021-02-13 懶人Excel

本篇是 Excel VBA 系列教程的一部分,後臺回復「VBA」獲取所有教程。

從本篇開始,我們進入 VBA 語法的另外一個重要概念,程序結構。

上一章學習的變量、數據類型、運算符等概念,是 VBA 中"靜態"的部分。相對的,程序結構是 VBA 中 "動態" 的部分。學習完程序結構,才能真正寫出可以運行的 VBA 程序。

本篇我們先介紹程序結構最常用的部分,深入學習前有一個基本概念。本章餘下的教程中,將詳細介紹每一個程序結構。

程序結構示例

首先,本篇將使用以下代碼,介紹各種程序結構,大家可以先看一下。

Sub MyCode()

    
    Dim i As Integer
    Dim isBlank As Boolean

    
    For i = 2 To 10

        
        isBlank = Cells(i, 1).Value = ""

        
        If isBlank Then
            Cells(i, 1) = Cells(i - 1, 1)
        End If

    Next i

End Sub

以上代碼運行後,在 A2:A10 單元格區域,依次判斷每一個單元格是否為空,如果是空,則用上一個單元格的值填充。

過程

過程是 VBA 中,程序實際運行的最小結構。單獨的一行或多行代碼無法運行,必須把它們放置在一個過程裡,才能運行。

在示例中,Sub 過程名() 開頭,End Sub 為結尾部分是一個過程的主題,其餘代碼需要放置在兩者之間。

Sub MyCode()

End Sub

程序語句

語句,是表示一個完整意思的一行代碼。

例如,示例中第一行,聲明變量就是一條語句。它表示,聲明一個整型變量。同理,第二行、第三行和其餘的每一行都是語句。VBA 中的過程,就是由這樣一條條語句構成的。

Dim i As Integer
Dim isBlank As Boolean

通常,一行就是一個語句,除非它用換行符或合併符號,具體可以閱讀「VBA 運算符入門」。

Excel VBA 對象

我們學習 VBA 的最終目的是操縱 Excel,完成一些特定的目標。其中,操縱 Excel 就是通過 Excel VBA 對象完成的。

在示例中,Cells() 就是一個 Excel VBA 對象,表示一個單元格,提供行號和列號指定單元格。

程序運行結構

接下來是程序結構中最核心的部分,也是最有意思的部分,程序運行結構。大部分程式語言都具備基本的三種程序運行結構,分別是順序結構、循環結構、判斷結構。各種簡單到複雜的算法,都是由這三種基本的結構,相互組合而完成。

1.順序結構

首先是基本的順序結構。順序結構,顧名思義就是按照順序依次執行。VBA 中的順序就是從上到下、從左到右的順序。

在示例中,首先運行兩個聲明語句,然後運行循環結構,以此類推。值得注意的事,當程序有嵌套時,嵌套的部分也是按照順序指定的。

2.循環結構

第二個基本結構是循環結構。當使用循環結構時,循環部分代碼,按照指定的循環次數,循環重複執行。

在我們的示例中,For 至 Next i 之間的代碼就是一個循環代碼。

VBA 中,有多種循環結構,本例中是 For 循環結構。For 循環結構中,第一行指定循環次數,最後一行表示開始下一個循環。


For i = 2 To 10
    
Next i

3.判斷結構

最後一種基本結構是,判斷結構。簡單來說,該結構中,當提供的表達式為真(True)時,判斷結構的主體部分才會被執行,否則跳過。

在示例代碼中,If 開頭和 End If 結尾處是典型的判斷結構。第一行,判斷 isBlank 變量是否為真,如果是,則執行判斷結構主體部分,否則跳過。


If isBlank Then
    Cells(i, 1) = Cells(i - 1, 1)
End If

注釋

通常,一段代碼寫完後,不會完全沒問題。在實際使用過程中可能需要修改,符合最新的需求。過一段時間再打開查看時,可能已經忘記了當時的思路,不能很快想起來有些代碼實際的用途,更不用說讓別人查看了。這時,就需要注釋出場了。

注釋是對代碼的一種解釋,不影響代碼的運行。VBA 中的注釋語句是,以英文單引號 (')開頭,後接需要解釋說明的內容。

注釋可以讓代碼更容易理解,建議從一開始就養成寫注釋的習慣。

運行

下面,我們實際運行我們的示例代碼,看一看它具體的效果。

總結

現在你學會了基本的 VBA 程序結構。可以運行的最小單位是 VBA 過程,一個 VBA 過程由一個或多個語句組成,每一個語句表示一個完整的含義。VBA 是按順序結構執行,遇到循環結構和判斷結構時,根據提供的參數循環重複執行,或跳過某一段代碼。

本章餘下教程,將詳細介紹以上每一部分。學完本章後,你就可以寫出一個完整可運行的 VBA 程序了。

相關焦點

  • excel VBA是什麼?VBA編程入門教程
    本篇將介紹excel vba是什麼?vba編程入門教程,有興趣的朋友可以了解一下!一、excel vba是什麼?VBA的英文全稱是Visual Basic for Applications,是一門標準的宏語言。VBA語言不能單獨運行,只能被office軟體(如:Word、Excel等)所調用。
  • Excel VBA入門教程1.1 數據和數據類型
    類似的要使用vba,也要入鄉隨俗,了解他的構成,簡單的說vba包含數據類型、 變量/常量、對象和常用的語句結構。不過呢在量和複雜度上遠低於英語,不用那麼痛苦的記單詞了,所以vba其實很簡單的。熟悉了規則之後剩下就是查官方函數啦,查Excel提供的可操作對象啦。順帶一提的是,函數其實也很容易理解,方便使用。
  • WPS教程:excel新手入門VBA功能使用介紹
    Excel教學:今天和大家分享一下excel中vba的使用方法入門,相信很多使用該軟體的朋友們對此都很感興趣,下面就和大家來分享一下,希望可以幫助到大家。4.輸入如圖所示的代碼:5.保存文件,按下F5執行,找到我們編輯的這個宏,【計算銷售額】,然後點擊【運行】寫在末尾——總結一下WPS用起來還是十分簡單的,後面也會出更多的EXCEL系列教程和其他知識分享。
  • VBA代碼大全030:用vba強制關閉word應用程式
    這時候一般的套路都是在excel vba中創建word應用程式實例,然後一番操作以後關閉word應用程式。 一般的結構都是形如下面這樣的: Sub 水星Excel() '前期引用 'Dim oWord As Word.Application 'Set oWord = New Word.Application '後期引用 'Set oWord = VBA.CreateObject("Word.Application
  • 「Python替代Excel Vba」系列(終):vba中調用Python
    請關注本號,後續會有更多相關教程。系列文章如下圖:點一下上圖紅框部分,即可註冊你的 py 文件中的自定義方法到 vba 中。他大致原理是讀取 py 文件中的方法,然後相應在 vba 中生成名字和參數一樣的 vba 方法。
  • 原創書籍 |《VBA從入門到放棄》
    📚how-to-give-up-learning-VBA📖VBA從入門到放棄作者:王文鋮演示系統和Office版本:Windows 10;Office 2016。單擊文末「閱讀原文」可自動跳轉📺Part.1.A.what-is-vba(認識VBA)(一)我怎麼認識VBA的?
  • vba第十八課
    vba第十八課調用工作表函數在vba中我經常會對工作表的數據進行一些運算,雖然通過代碼進行循環或判斷也可以完成,但是通vba調用函數可以更簡單更直接進行運算提高代碼的運行效率,比如countif、sumif等需要進行判斷統計和求和的運算。
  • Excel函數技巧與VBA初步入門
    VBA初步入門VBA(Visual Basic for Applications)是Visual Basic的一種宏語言,是在其桌面應用程式中執行通用的自動化(OLE)任務的程式語言。主要能用來擴展Windows的應用程式功能,特別是Microsoft Office軟體。它也可說是一種應用程式視覺化的 Basic 腳本。。
  • Excel VBA入門教程 1.6 過程和函數
    數據類型]]) [語句塊]End Sub' [Private|Public]定義過程的作用範圍' [Static]定義過程是否為靜態' [參數列表]定義需要傳入的參數調用Sub的方法有三種,使用Call、直接調用和Application.Run舉個例子:1.6.2 Function 函數vba
  • Excel VBA入門教程 1.8 注釋語句的用法
    注釋語句是用來說明程序中某些語句的功能和作用;VBA 中有兩種方法標識為注釋語句。
  • Excel VBA入門教程 1.10 單元格排序示例
    As Integer ReDim arr(times) For num = 1 To times Randomize (1) ' 初始化隨機數 arr(num) = Rnd(1) * 10000 \ 100 ' Rnd隨機數函數生成0~1的浮點數 ' 上面使用了運算符進行取整,也可以根據需求使用vba
  • 【VBA】適合Excel小白學的VBA入門教程
    一句話概括:在Excel中想實現什麼功能,就可以用VBA語言編寫一段程序去完成。(比如:一個Excel文件拆分N個單獨文件)今天將用全新的方法,不講太多理論,直接從一個小程序入手,看看VBA代碼是怎麼編寫完成的。即使你從未學過VBA,我也有信心讓你今天入門VBA。
  • 一個新手關於Excel VBA中IF條件判斷語句的學習理解心得
    作者:金人瑞 《Excel VBA175例無理論純實戰教程》學員最近正在學習鄭廣學老師的VBA 175例教程,這是一篇新手向的文章
  • VBA編程理論學習之談
    有些是解決基本應用需求,也有一些是Excel vba基礎的對象以及屬性功能介紹。總的來說,這個月有一些進展,也有一些心得和知識積累。有幾篇比較不錯的文章持續得到展示和瀏覽,說明這方面還是做到了大多數關注。
  • Excel VBA入門教程 1.9 換行和Set賦值注意點
    很明顯的是 vba中使用Dim設定變量類型,Set將對象引用賦值給變量' 將Range對象賦值給變量rgDim rg
  • Excel vba 批量刪除窗體控制項
    文/江覓易見動態創建窗體控制項後,可以進行動態刪除,如果是設計時從工具欄添加的控制項,不能動態刪除,不要問為什麼vba就是這麼規定的,也可以認為這是一個BUG,反正就是不能。其實,vba編程並不十分理想,因為有很多不可預知的問題出現,而且依賴環境也十分不友好,由於版本不同,同樣的文件就不能很好地運行,這也是一個不小的麻煩。因為在自己的電腦上編寫好的程序,換一臺電腦可能就無法運行,運行環境改變相應地要做一些系統設置,不然程序不能很好地發揮作用。
  • VBA代碼大全010:用vba遍歷文件夾及其子文件夾內的文件
    vba老手都知道,vba寫多了,其實都是在做循環。循環處理多個單元格的內容,循環處理多個工作表的內容,循環處理多個工作簿的內容。
  • vba第十六課
    vba第十六課錯誤分支語句1On error resume next 例:sub onerror()Dim a!100:End Sub假設沒有on error resume next這句語句,程序報錯
  • Excel VBA常用代碼!
    記得收藏好哦,因為今後你應用到稍大型Excel VBA程序時,這其中某些代碼肯定會用到。來看看都是哪些常用代碼:下面先舉一個簡單的例子:場景再現:在當前的工作表中插入一張e盤中名為1.jpg的圖片(長350、高300,距離Excel左側90、上邊框230)操作方法:第一步,打開vba代碼區
  • Excel VBA 實例(22) - 一鍵篩選其他工作表或工作簿的數據
    今天說的這個vba實例還是和學校有關。