vba for excel 随笔
q1: excel 没有vba入口
1. 快捷键:Alt + F11
2. 调出开发工具
1. 打开文件后,依次点击菜单项【文件】-【选项】; 2、在“Excel”选项界面中点击左侧的【自定义功能区】; 3、在自定义功能区主选项卡下,找到【开发工具】,打上钩,然后确定;
range, cells
表示单元格时:range("A1")表示第一行第一列的单元格,实质上于cells(1,1)效果一样。
表示连续的区域:第一是range("起始单元格","结束单元格"),第二是range("起始单元格:结束单元格")
Range("a1", "b4").Select Range("a2:b4").Select
表示不连续的区域:range("起始单元格1:结束单元格1,起始单元格2:结束单元格2")
Range("a1:b2,c3:d4").Select
表示行和列:例如,我想选择第一行,则可以这样range("1:1"),如果想表示第一列range("a:a")
Range("1:1").Select
Range("a:a").Select
for each
Dim cell As Range For Each cell In Sheet2.Range("a1:b3") MsgBox cell.value Next cell
comboBox
显示多列内容
rowsource属性:可以从工作表中导入数据 。
Columnheads属性:显示列标题,只在引用工作表数据源时才有效,而且数据源不能包括标题行。
ColumnCount属性:设置组合框可显示的列数。
TextColumn属性:选取多列时显示第N列的内容。
BoundColumn属性:指定返回第N列的值,作为窗体的数值。
ListRows属性设置,不含标题行
ColumnWidths属性:设置下拉列表的列宽,可以用三种单位:厘米、磅、英寸。
ShowDropButtonWhen 属性:可以设置是否显示下拉按钮图标。如果写了获得焦点自动打开下拉列表的代码,似乎不设置也行,但有图标会比较清晰。
DropButtonStyle 属性:设置下拉按钮的类型。
VBA sub 与 function 的区别
sub称为过程, function称为函数,他们之间的唯一区别是function有返回值。
完全可以把sub写成function,只要不用function的返回值就可以了。C语言就只有函数而没有过程,因此一般情况下都可以用function来代替sub。
但这两段代码对于excel的运行位置不同。sub会出现在宏里,而function会出现在插入函数中。
函数和过程的调用---无参数时不能带括号!---需要使用返回值时带括号
case
VBA 比较运算符
| S / N | 运算符 | 说明 | 范例 | 输出 | | 1 | = | 相等:检查两个值是否相等。 它也用作赋值运算符 | 如果 x = z | 如果它们相等则返回 true,否则返回 false | | 2 | < | 小于:此运算符用于减去数字 | 如果 x < z 则 | 如果 x 小于 z,则返回 true,否则返回 false | | 3 | > | 大于:此运算符用于将数字相乘 | 如果 x > z 则 | 如果 x 大于 z,则返回 true,否则返回 false | | 4 | < > | 不等于:此运算符用于除数 | 如果 x < > z | 如果它们不相等,则返回 true,否则返回 false | | 5 | < = | 小于或等于: | 如果 x < = z | 如果 x 小于或等于 z,则返回 true,否则返回 false | | 6 | > = | 大于或等于: | 如果 x > =则 | Returns true if x is greater than z, else it returns false |
array
数组清零:erase
InStr
InStr()
函数返回一个字符串第一次出现在一个字符串,从左到右搜索。返回搜索到的字符索引位置。
语法
InStr([start,]string1,string2[,compare])
- Start - 一个可选参数。指定搜索的起始位置。搜索从第一个位置开始,从左到右。
- String1 - 必需的参数。要搜索的字符串。
- String2 - 必需的参数。要在String1中搜索的字符串。
- Compare - 一个可选参数。指定要使用的字符串比较。它可以采取以下提到的值:
- 0 = vbBinaryCompare - 执行二进制比较(默认)
- 1 = vbTextCompare - 执行文本比较
示例
参考以下代码 -
Private Sub Constant_demo_Click() Dim Var As Variant Var = "Microsoft VBScript" MsgBox ("Line 1 : " & InStr(1, Var, "s")) MsgBox ("Line 2 : " & InStr(7, Var, "s")) MsgBox ("Line 3 : " & InStr(1, Var, "f", 1)) MsgBox ("Line 4 : " & InStr(1, Var, "t", 0)) MsgBox ("Line 5 : " & InStr(1, Var, "i")) MsgBox ("Line 6 : " & InStr(7, Var, "i")) MsgBox ("Line 7 : " & InStr(Var, "VB")) End Sub
当你执行上面的函数时,它会产生下面的输出。
Line 1 : 6 Line 2 : 0 Line 3 : 8 Line 4 : 9 Line 5 : 2 Line 6 : 16 Line 7 : 11
byVal 和 byRef 区别
ByVal是by Value, 也就是值传递
ByRef是by Reference,也就是引用传递
在VBA中默认是ByRef的
byref ,被调用程序 按地址传递,传回主程序的参数,回调时会受影响。
按地址传递(ByRef),是指主程序直接将数据交给子过程(过程中定义传递方式),在过程中修改、调试、返回给主程序,主程序输出的是修改后的值。
VBA默认按地址传递,方便管理?
byval ,被调用程序 按值传递,传回主程序的参数,回调时会不受改变。
按值传递(Byval),是指将主程序的值(副本一份)给子过程,过程对副本操作,主程序输出的仍是原值。若想输出值传递后的值,可在子过程中设置输出。
Function Test1(ByVal a As Long) As Long a = a + 1 Test1 = a End Function Function Test2(ByRef a As Long) As Long a = a + 1 Test2 = a End Function Function Test3(a As Long) As Long a = a + 1 Test3 = a End Function Sub zz() Dim i As Long i = 10 MsgBox (Test1(i)) MsgBox (i) MsgBox (Test2(i)) MsgBox (i) MsgBox (Test3(i)) MsgBox (i) End Sub 结果是 11, 10, 11, 11, 12, 12
数据类型与字符
Dim FirstName$
上面的声明和Dim FirstName As String是一样的。
Set 语句
conf_field(conf_no_构建表, 1) = "构建表"