VBA常用代码(自定义带参数的sub过程)

看了这么多VBA代码,相信你应该比较熟悉这个结构了:

1
2
3
Sub 过程名()
..........
End Sub

前面也讲过,这在VBA里面称为“一个过程”。所有需要做的操作都包含在过程中,也就是夹在Sub 过程名()End Sub之间。
我们之前看到的代码,无一例外,Sub 过程名()的括号中是空的,也就是不带任何参数的,实际使用时,可能存在与外部交互,也就是sub过程中的用到的变量,需要从外部输入才能确定的情况,那该怎么办?
解决办法就是:自定义一个待参数的sub过程。按照惯例,先上代码:

1
2
3
4
5
6
7
8
9
10
11
12
Sub 创建表(str As String)
Dim sht As Worksheet
For Each sht In Sheets
If sht.Name = str Then
k = 1
End If
Next
If k = 0 Then
Sheets.Add after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = str
End If
End Sub

上述代码的意思就是,新建工作表,并将工作表命名为str,前提是当现有文件中存在同名str的工作表时,不创建。
为什么要自定义这种带参数的sub过程呢,刚才上面提到了一点,下面再通过具体的例子,理解一下:

1
2
3
4
5
Sub 创建工作表并命名()
Dim str As String
str = InputBox("请输入要创建工作表的名字")
Call 创建表(str)
End Sub

上述代码中,InputBox("请输入要创建工作表的名字")就会弹出一个对话框,让你输入要创建的工作表的名字,当输入完成,点击确定后,你输入的内容就会被赋值给str这个变量。接着代码继续向下执行Call 创建表(str),意思就是调用之前写好的过程Sub 创建表(str As String),同时将str这个变量作为参数输入到这个sub过程中。
最后,执行的效果就是在当前EXCEL工作簿文件中新建了一张名字为“str”的工作表。比如你但是输入的工作表名字是:“我的工作表”,那么工作簿里就会新建一个名字为“我的工作表”的新表。不行,就试试呗。

另外,仔细观察一下新建的那张表处于的位置,无论原有文件中有多少张工作表,新建的表始终处于所有表的最后面,知道为什么吗?
答案就在上面的某一行代码里,找找看吧。