4

输入输出

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

叫我瞄大人
467 声望81 粉丝

喜欢追星的非科班的编程爱好者


引用和评论

0 条评论