最近需要帮忙用EXCEL记一些账目,为了提高效率,稍微学习下了VBA进行编程,笔记之。



在EXCEL中按alt+F11就能跳到VB的开发界面

变量定义:

Dim        变量as 类型   '定义为局部变量,如 Dim          xyz as integer
Private    变量as 类型   '定义为私有变量,如 Private       xyz as byte
Public     变量as 类型   '定义为公有变量,如 Public        xyz as single
Global    变量as 类型   '定义为全局变量,如 Globlal       xyz as date
Static      变量as 类型   '定义为静态变量,如 Static         xyz as double

注释: Rem 注释内容    或者 ' 注释内容   (行注释)
将窗体的showmodal设置为false 即可在运行窗体的同时编辑EXCEL  即 无模态窗体
关系运算符  等于 用=  不等于用 <>  逻辑运算  and or not xor eqv(逻辑等) imp(隐含)

变量类型

String、byte 、boolean 、integer、 long 、single(单精度) 、double date(日期)、

currency(货币)、 decimal(小数点型)、 variant(变量型)、object(对象型)

 控件传递:

Private Function NumberCheck(tb As MSForms.textBox) As Boolean
    MsgBox (tb.Text)
End Function

调用

 re = NumberCheck(textBox)

注意 如果function有返回值一定要有个变量去保存它,不然会提示404错误 要求对象

通过异常判断worksheet的是否存在

On Error GoTo A
     s = Worksheets(ShopNum.Text).Cells(1, 1)
     Exit Function
A:
    MsgBox ("请输入正确的商户")

textbox的换行

    在运行阶段,可以通过在需要换行的地方按住Ctrl+Enter或者Shift+Enter组合键强制换行。
也可以通过代码将多行文本赋值给文本框。
如下所示:
Me.TextBox1.Text = "a" & vbNewLine & "b"
Me.TextBox1.Text = "a" & vbCr & "b"
Me.TextBox1.Text = "a" & vbCrLf & "b"
Me.TextBox1.Text = "a" & vbLf & "b"
vbNewLine、 vbCr 、vbCrLf 、vbLf 4个VB常量都可以表示换行。

关于0

在EXCEL的cell里的值显示为0

但是通过

 Dim myNumber As Single
 myNumber = Worksheets("总分核对").Cells(1, 6)
 textbox.Text = myNumber

这样设置后 textbox显示出来的不一定为0 ,可能为一个很小的数,

我猜这应该是精度问题

窗体的初始化事件

Private Sub UserForm_Initialize()
    MsgBox ("记得选择  [借方输入]  还是  [贷方输入] 哦!")
End Sub

使用with语句提高效率,当时对同一个sheet有多个赋值操作 比如 worksheets("219").Cells(i, 7).value = 1 ....要调用多次,这样效率有点低,明显会感觉变慢

改为如下便可提高程序执行效率:

with worksheets("219")

       .Cells(i,7).value = 1

end with

Worksheets("汇总").Cells(i, 1).value = intTmp

Dim isDone(10) as Integer

使用数组的时候要记得重新初始化

Erase isDone

比如:

For i=1 to 10

       Dim isDone(10) as Integer

       isDone(i) = 1

Next

酱紫的话 isDone不会每次都自己初始化,最后isDone全部为1