输入输出
a = InputBox("what is your name :")
MsgBox ("my name is:") & a
定义变量
dim a as string
数据类型:字节型(Byte),整数型(Integer),长整数型(Long),单精度浮点型(Single),双精度浮点型(Double),货币型(Currency),小数型(Decimal),字符串型(String),日期型(Date),布尔型(Boolean)等
程序控制
1.搞条件判断:
if Then Else(二重)
if Then ElseIf(三重以上选择)
select case....is
Public Sub mysub()
x = InputBox("输入x的值:")
Dim fx As Double
If x <= 0 Then
fx = x ^ 2
ElseIf x <= 1 And x > 0 Then
fx = x ^ 3
ElseIf x > 1 Then
fx = x ^ 4
End If
MsgBox fx
End Sub
2.搞循环
for....next
Public Sub mysub()
Dim i As Integer, xj As String
For i = 2 To 17 Step 1
Select Case Cells(i, "A")
Case Is < 60
xj = "不及格"
Case Is >= 60
xj = "及格"
End Select
Cells(i, "B") = xj
Next i
自定义函数
模块-插入-过程-函数(注意一个模块插一个函数)
1.定义f(x)=x^2+1
Public Function fun(x)
fun = x ^ 2 + 1
End Function
在excel直接在空格打=fun(3)之类可调用自定义函数(跟python好像啊啊啊啊)
2.例:生成1——10的随机数
Public Function fx()
fx = Int(Rnd() * 10) + 1
End Function
VBA的对象
application:应用程序
workbook:工作簿
worksheet:工作表
range:单元格。
例:
'A1单元格为10,完整写法
Worksheets("sheet1").Range("A1").Value = 10
'A2到A3为6
Range("A2:A3") = 6
'更简单的写法[]
[B2] = 2
[C2:C10] = 10
'引用整行
Rows("4:5").Value = 100
'引用整列
Columns("F:G").Value = 88
'合并使用
Union(Range("D2"), Range("E4")) = 7
使用控件的实例
源文件下载:职员信息管理
目标:根据职员的编号或身份证做一个小型的职员信息查找器
代码:
Option Explicit
Dim nrow As Long '定义一个模块级的变量,让该模块里的所有过程都能使用它
Private Sub CmdFind_Click() '单击“查询”按钮时运行程序
'判断按什么方式进行查找
Dim col As Integer
If FindName.Value = True Then
col = 7 '如果按身份证号查找,则查找第7列
Else
col = 1
End If
With Worksheets("职工档案")
Dim rng As Range
'在查找列查找输入的关键字
Set rng = .Columns(col).find(FindText.Value, lookat:=xlWhole)
If Not rng Is Nothing Then '判断是否找到内容匹配的单元格
nrow = rng.Row '取得查找到的单元格的行号
Call findi '运行findi子过程
Else
MsgBox "没有找到符合条件的记录!"
End If
FindText.Value = "" '清除查找框中输入的数据
End With
End Sub
Private Sub CmdAdd_Click() '单击“新增”按钮时运行程序
'判断在对话框中按下哪个按钮
If MsgBox("确定修改“职工档案”中添加该员工的记录吗?", vbQuestion + vbYesNo, "询问") = vbYes Then
'取得第一条空行行号
nrow = Worksheets("职工档案").Range("A1").Range("A1").CurrentRegion.Rows.Count + 1
Call edit '运行edit过程
End If
End Sub
Private Sub CmdDel_Click() '单击“删除”按钮时运行程序
'判断在对话框中按下哪个按钮
If MsgBox("确定将该员工信息移动到“删除”工作表中吗?", vbQuestion + vbYesNo, "询问") = vbYes Then
'取得当前“职工编号”所在的行号
nrow = Worksheets("职工档案").Range("A1:A65536").find(Range("C7").Value, lookat:=xlWhole).Row
'把记录复制到“删除”工作表中
Worksheets("职工档案").Rows(nrow).Copy Worksheets("删除").Range("A65536").End(xlUp).Offset(1, 0)
'删除该条记录
Worksheets("职工档案").Cells(nrow, "A").EntireRow.Delete
End If
End Sub
Private Sub CmdEdit_Click() '单击“修改”按钮时运行程序
'判断在对话框中按下哪个按钮
If MsgBox("确定修改“职工档案”中该员工的信息吗?", vbQuestion + vbYesNo, "询问") = vbYes Then
'取得当前“职工编号”所在的行号
nrow = Worksheets("职工档案").Range("A1:A65536").find(Range("C7").Value, lookat:=xlWhole).Row
Call edit '运行edit过程
End If
End Sub
Private Sub CmdFirst_Click() '单击“第一条”按钮时运行程序
nrow = 2 '行号等于2
Call findi '运行findi过程
End Sub
Private Sub CmdEnd_Click() '单击“最后一条”按钮时运行程序
'取得最后一条记录的行号
nrow = Worksheets("职工档案").Range("A1").CurrentRegion.Rows.Count
Call findi '运行findi过程
End Sub
Private Sub CmdFormer_Click() '单击“上一条”按钮时运行程序
'取得当前“职工编号”所在行的上一行行号
nrow = Worksheets("职工档案").Range("A2:A65536").find(Range("C7").Value, lookat:=xlWhole).Row - 1
Call findi '运行findi过程
End Sub
Private Sub CmdNext_Click() '单击“下一条”按钮时运行过程
'取得当前“职工编号”所在行的下一行行号
nrow = Worksheets("职工档案").Range("A1:A65536").find(Range("C7").Value, lookat:=xlWhole).Row + 1
Call findi '运行findi过程
End Sub
Sub findi() '子过程
'将“职工档案”中nrow行的记录写入“查询”表中
With Worksheets("职工档案")
Range("C7:E7").Value = .Range(.Cells(nrow, 1), .Cells(nrow, 3)).Value
Range("C10:E10").Value = .Range(.Cells(nrow, 4), .Cells(nrow, 6)).Value
Range("C13").Value = .Cells(nrow, 7).Value
Range("E13").Value = .Cells(nrow, 8).Value
Range("C16:E16").Value = .Range(.Cells(nrow, 9), .Cells(nrow, 11)).Value
Range("C19").Value = .Cells(nrow, 12).Value
End With
End Sub
Sub edit() '子过程
'将查询表中的记录添加到nrow行中
With Worksheets("职工档案")
.Cells(nrow, "A").Resize(1, 3) = Range("C7:E7").Value
.Cells(nrow, "D").Resize(1, 3) = Range("C10:E10").Value
.Cells(nrow, 7).Value = Range("C13").Value
.Cells(nrow, 8).Value = Range("E13").Value
.Cells(nrow, 9).Resize(1, 3).Value = Range("C16:E16").Value
.Cells(nrow, 12).Value = Range("C19").Value
End With
End Sub
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。