Excel VBA解讀(121):Sub過程詳解——枯燥的語法

2021-02-21 完美Excel

學習Excel技術,關注微信公眾號:

excelperfect

 

在《ExcelVBA解讀(27):看看VBA的Sub過程和Function過程》中,我們講解了Sub過程的基本形式。其實,Sub過程有更詳細的語法。本文就來詳細講解這些語法,雖然枯燥一些,但這是VBA最基礎的知識。

 

Sub過程的語法

Sub過程的完整語法形式如下:

 

按照常規約定,在方括號中的內容為可選部分,而方括號中用「|」分隔的內容則是多選一。即,若要使用[Public | Private | Friend],只需根據需要取其一就行了,或者是Public,或者是Private,或者是Friend。

 

看起來有點複雜!下面來逐一解說。

 

1.限定詞

 

Public

如果在Sub過程中使用Public,則表明可以在該工作簿的所有模塊中調用該過程。如果在類模塊中使用Public,則可以在工程外部調用該過程。對於Sub過程來說,Public是默認值。

 

Private

如果在Sub過程中使用Private,則表明只有過程所在模塊中的其他過程才能調用該過程。

 

Friend

僅在類模塊中有效。如果在類模塊的Sub過程中使用Friend,則表明可以在工程中的所有模塊中調用該過程,但不能在該工程外的模塊中使用該過程。

 

以上3個可選的關鍵字涉及到作用域,也就是指定了過程的影響範圍。作用域是一個很重要的概念,我們將專門講述。

 

Static

在過程調用時,保留該過程內部聲明的變量值。

 

2.參數

 

在過程名稱後的括號中,可以為空,也可以放置參數,其詳細的語法如下:

 

Optional

用來指定參數是可選的,也就是說在調用該過程時不一定要提供參數。如果使用Optional指定了某參數可選,那麼該參數後面的所有參數也必須是可選的。注意,如果使用了參數ParaArray,就不能使用Optional。

 

ByVal

指定參數通過值傳遞,也就是說,將該參數值賦給變量的副本。在調用過程中對參數值的改變,不會影響被調用過程的參數值。

 

ByRef

指定參數通過引用傳遞,也就是說,變量是對被傳遞參數的引用。在被調用過程中對參數值的修改,會影響調用過程中的參數值。這是默認的傳遞參數的方法。

 

ParamArray

指定參數是一個包含任意元素的可選變體數組,只能作為參數列表的最後一個元素,並且不能與ByRef、ByVal或者Optional同時使用。

 

變量名

可以包含參數引用或參數值的局部變量名稱。

 

類型

指定參數的數據類型。

 

默認值

對於可選參數,可以為其指定一個預設值。

 

3.Sub

表示過程的開始。

 

4.過程名稱

每個Sub過程必須有一個名稱。其命名規則與變量相同,參見《Excel VBA解讀(15):變量和常量》。通常,過程名稱最好能簡單表達該過程的作用。

 

5.End Sub

表示過程的結束。

 

使用規則

1.如果模塊開頭放置了Option Private語句,那麼即便使用Public聲明了Sub過程,該過程也會被看成是Private的。

 

2.Sub過程不返回值,因此不能作為表達式的一部分。

 

3.Sub過程可以包括任意條Exit Sub語句,用來強制退出該過程。

 

4.可以使用用戶定義類型作為參數來傳遞,但前提是該參數是必需的。如果一個Public聲明的Sub過程接受用戶定義類型作為參數,那麼在代碼模塊中也必須以Public來定義該用戶定義類型。

接下來的幾篇文章,將圍繞Sub過程來講解。

相關焦點

  • excel VBA是什麼?VBA編程入門教程
    本篇將介紹excel vba是什麼?vba編程入門教程,有興趣的朋友可以了解一下!一、excel vba是什麼?VBA的英文全稱是Visual Basic for Applications,是一門標準的宏語言。VBA語言不能單獨運行,只能被office軟體(如:Word、Excel等)所調用。
  • Excel VBA解讀:基礎入門篇
    >ExcelVBA解讀》系列第一季的目錄和每篇文章的主要內容,當然我們曾在《Excel VBA解讀(29):讓我們一起邁入VBA編程的殿堂——第一季小結》中匯總過,它們是一些最基礎的Excel VBA編程知識。
  • 「Python替代Excel Vba」系列(終):vba中調用Python
    本文主要效果如下圖:處理數據的過程在 Python 中進行。輸入條件,輸出結果的過程在 Vba 進行。可以隨意修改匯總方式(求和、平均等)與匯總欄位。而上述命令行只是把這個 xlam 文件放入你的 excel 加載項目錄中而已。然後,在你的任意目錄中打開命令行。執行以下語句,即會生成一個 py 文件和一個 帶宏的 excel 文件。
  • vba第二十二課
    vba第二十二課工作表的運用實例在workbook對象中,有一個sheets集合,其成員是worksheet對象或chart對象。Vba中,經常在工作表之間轉換或對不同工作表中的單元格區域進行操作,通常有下面幾種方法:例:Sub 工作表1()Msgbox sheets(1).nameMsgbox worksheets(「成績表」).nameEnd sub
  • 「Python替代Excel Vba」系列(二):pandas分組統計與操作Excel
    帶你用pandas玩轉各種數據處理前言在本系列的上一章已經介紹了如何讀寫 excel 數據,並快速進行匯總處理。但有些小夥伴看完之後有些疑惑:那只是簡單讀寫數據而已,有時候需要設置 excel 的格式。
  • VBA學習筆記 1-2
    模塊所有過程均可以使用變量Dim currentvalue As LongSub procedure1()End SubSub procedure2()sub mysub()static counter as longend sub常量 const語句  常量聲明某種特定的數據類型 const numquarters
  • vba第十六課
    vba第十六課錯誤分支語句1On error resume next 例:sub onerror()Dim a!如果各位在實際工作中遇見excel常規方法無法解決的或操作比較複雜的報表可以私信我,可以免費編寫代碼來解決!
  • Excel VBA解讀(54):排序——Sort方法
    微信公眾號:excelperfect
  • vba第十八課
    vba第十八課調用工作表函數在vba中我經常會對工作表的數據進行一些運算,雖然通過代碼進行循環或判斷也可以完成,但是通vba調用函數可以更簡單更直接進行運算提高代碼的運行效率,比如countif、sumif等需要進行判斷統計和求和的運算。
  • Excel VBA入門教程 1.6 過程和函數
    Set functionName = xxxxxx調用過程:調用 Sub 過程與 Function 過程不同。調用 Sub 過程的是一個獨立的語句,而調用函數過程只是表達式的一部分。調用 Sub 過程有兩種方法:以下兩個語句都調用了名為 ProcExcel 的 Sub 過程。Call ProcExcel (FirstArgument, SecondArgument)ProcExcel FirstArgument, SecondArgument注意當使用 Call 語法時,參數必須在括號內。
  • Excel VBA常用代碼!
    來看看都是哪些常用代碼:下面先舉一個簡單的例子:場景再現:在當前的工作表中插入一張e盤中名為1.jpg的圖片(長350、高300,距離Excel左側90、上邊框230)操作方法:第一步,打開vba代碼區
  • Excel VBA從新手到高手系列課程
    五、 教學目錄:第一章 新手篇-走進excel vba的世界      1.1 什麼是VBA      1.2 EXCEL中的宏      1.3 認識VISUAL BASIC編輯器        1.4 vba程序結構      1.5 數據類型         1.6
  • Excel vba工作表事件【實現快速自動隱藏工作表】
    關注公眾號,帶你每日學習VBA,從枯燥機械的工作中解放雙手。每天學點excelvba一個乾貨滿滿的公眾號,期待你的關注
  • vba第二十七課
    vba第二十七課使用區域的統計usedrange返回一個range屬性,該對象表示指定工作表上所使用的區域例:Sub 使用區域()Sheet(1).usedrange.selectEnd sub注釋:此段代碼表示的意思是選中單元格存在數據的區域
  • Excel VBA解讀(132): 調用Function過程的4種方式
    學習Excel技術,關注微信公眾號:excelperfect
  • 巧用python win32com模塊操作excel文件
    如果我們平日裡對VBA語法很熟悉,則可以通過win32com.client來操縱excel文件,語法非常類似。  之所以不直接使用VBA,是因為VBA擅長跟excel打交道,不擅長跟外部應用打交道。小爬最近就遇到這樣一個自動化場景:先利用python爬蟲的方法,獲取到伺服器端的多個excel文件,然後對這些excel文件進行跨表操作,單純的VBA實現起來比較繁瑣,用python和VBA各實現一部分不利於腳本的封裝,割裂感較強。
  • VBA學習筆記 1-1
    ''  ActiveCell.Font.Bold = True    ActiveCell.FormulaR1C1 = "穆澤"    ActiveCell.Offset(1, 0).Range("A1").Select  End Sub測試顯示:當前滑鼠位置輸入名字excel
  • 【Excel分享】if函數的基本用法
    就可以天天收到Excel知識分享 Excel中的if函數的基本用法       在excelexcel中的if函數是判斷函數,表達的意思是當滿足某條件時,返回一個值,否則返回另一個值語法:if(logical_test,[value_if_true],[value_if_false]) 第1參數:logical_test表示要判斷的條件 第2參數:value_if_true表示當滿足判斷的條件時返回的值 第3參數:value_if_false表示當不滿足判斷的條件時返回的值
  • 重磅 | Excel VBA解讀:Range對象篇
    微信公眾號:excelperfect 我們在Excel中整理、分析和處理數據時,都是圍繞單元格進行大多數操作
  • Excel VBA入門教程1.1 數據和數據類型
    1 語法說明都知道學會了英語語法,再加上大量的詞彙基礎,就算基本掌握了英語了。