編寫sub過程

來源:互聯網
上載者:User

                                                                

概述:VBA中每一個程式都包含過程,錄製的宏是一個過程,一個自定函數也是一個過程。掌握好的單個過程的編寫與思路,就可以組合成大中型外掛程式或者專業程式。

一、分類與調用方式

                        i.             分類

過程分為三類:子過程、函數過程和屬性過程

1.        子過程

Sub 子過程()

End sub

2.        函數過程

Function 函數過程(rng asRange)

End Function

3.        屬性過程

Property get    屬性過程( ) As Variant

End property

                      ii.             調用方式

1.        執行 Alt+F8

如果在工作表 ThisWorkBook、標準模組視窗存在sub過程。就可以彈出宏的對話方塊,然後選擇執行

2.        按鈕執行

在工作表中建一個按鈕,並將按鈕與sub過程關聯,從而實現按鈕執行程式。

開發工具---插入--表單控制項---按鈕 然後指定上自己的宏就搞定了

3.        菜單調用

暫無介紹,後續講解

4.        事件引發

對於部分需要自啟動的程式,通常利用事件引發,不需要人工幹預,例如:活頁簿開啟時就自動執行某程式,或者關掉表單,滑鼠移過表單時執行某程式等。後續講解實現。

5.        工作表中使用公式調用

插入模組—然後錄入代碼

Function 成績(rng)

成績 = IIf(rng>= 60, "及格", "不及格")

End Function

在C1的公式寫上=成績(B1)

然後在B1輸入30 則就會顯示不及格

                     iii.             插入過程方式

1.        非事件程序

首先插入一個模組,再插入過程,然後輸入模組名設定公有的就可以建立過程的外殼了。

2.        事件類別過程

VBA支援很多類事件,大部分事件的代碼都需要參數。可以通過VBE提供的對象與過程視窗的下拉式清單完成

雙擊sheet1 下拉式清單方塊中選擇worksheet代碼視窗預設產生change事件代碼。時間大部分要用下拉式功能表來選擇,不容易誤差

實現滑鼠移過事件

插入---使用者表單 右擊查看代碼  預設產生click事件  選擇為mousmove事件 然後輸入代碼

                     iv.             過程命名規則

過程名可以與本過程中的私人變數同名,但卻不能和共有變數同名

二、編寫sub過程

Sub過程即利用sub語句聲明的子過程,所有宏錄製起產生的過程全是sub過程,無法通過錄製宏產生function過程或者屬性過程

文法:

Private | public | friend [static]sub name [(arglist)]

[startements]

[exit Sub]

[statements]

End sub

Sub語句各參數的詳細功能

Public 可選的。表示所有模組的所有其他過程都可以訪問這個sub過程。如果在包含Option pirvate的模組中使用,則這個過程在該工程外是不可使用的

Private     可選。表示智能在包含其聲明的模組中的其他過程中可以訪問該sub過程

Friend       可選。智能在類別模組中使用,表示該sub過程在整個工程中都是可見的,但是對對象執行個體的控制著是不可見的

Static        可選的,表示調用時保留sub過程中局部變數的值。Static屬性對sub外聲明的變數不會產生影響,即使過程中使用了這些變數

Name 必須的。 Sub的過程名。

Arglist      可選的,代表在調用時要傳遞給sub過程的參數的變數列表,多個變數則用都好隔開

Statements      可選的。Sub過程中所指定的語句組

                      v.             模組層級過程

只能在當前模組調用的過程。

聲明sub過程前使用private

只有在當前模組中調用

Private 子程序1(name As String)

    MsgBox name

End Sub

Private 子程序2()

    Call 過程1("調用過程1")

End Sub

不出現在宏對話方塊中。 在alt+F8所開啟的對話方塊中無法查看到過程的名稱

                     vi.             工程層級過程

指在當前工程中任何地方都可以隨意調用的過程,在sub語句潛質表示符public,非當前過程可以調用,可以出現在宏列表,如果沒有修飾,則預設是public,任何模組或者表單中都可以調用  支援參數

                   vii.             Exit sub 與end 的作用和區別

是否釋放公有變數

Exit sub 不釋放變數,退出當前過程

End 釋放變數

是否終止所有程式

Exit sub退出當前過程

End 退出當前所有程式。也就是事件已經結束

b)        Sub過程的執行流程

                        i.             逐步執行  按F8逐步執行sub。跳過變數定義語句

                      ii.             使用冒號實現一行執行多個代碼

Private Sub 一行執行多個代碼()

If 60 = 60 Then MsgBox "及格": Exit Sub

End Sub

                     iii.             使用標籤改變執行流程

規則:

可是是標點符號以外的符號組合

以冒號結尾

與大小寫無關,必須位於一行的最左端

配合goto

Private Sub 建立總表()

For i = 1 To Sheets.Count

    If Sheets(i).name = "總表" ThenGoTo err

    Next i

    Sheets.Add

    ActiveSheet.name = "總表"

    End

err:

    MsgBox "已經存在總表"

End Sub

                     iv.             Sub過程的嵌套調用方式

1.        Call語句調用

[call] name [(argumentlist)]   call過程名參數 call可以省略

2.        Run方法調用

Application.Run 過程名    Application可以省略

                      v.             過程的遞迴

Private Sub 建立5張表()

    If Sheets.Count > 5Then Exit Sub

    Sheets.Add ,Sheets(Sheets.Count), 1

    Call 建立5張表

End Sub

設定時鐘:

Sub 時間()

[a1] = WorksheetFunction.Text(Now(), "hh:mm:ss")

Application.OnTime Now() + TimeValue("00:00:01"), "時間"

End Sub

Sub 終止()

    Application.OnTime Now() +TimeValue("00:00:01"), "時間", , False

End Sub

c)        過程的案例

                        i.             選區統計

Sub 選區統計()

    Dim msg As String

    msg = msg & "儲存格個數"& Selection.Count & Chr(10)

    msg = msg & "數字個數"& WorksheetFunction.Count(Selection) & Chr(10)

    msg = msg & "非空儲存格"& WorksheetFunction.CountBlank(Selection) & Chr(10)

    msg = msg & "選區之和"& WorksheetFunction.Sum(Selection)

    MsgBox msg

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Call 選區統計

End Sub

                      ii.             將儲存格資料轉換成首字母大寫:帶有參數的sub過程

Sub 轉換(target)

Selection(1) = StrConv(target, vbProperCase)

End Sub

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.