隨便學的VBA編程

輸入輸出

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)等python

程序控制

  • 1.搞條件判斷:app

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.搞循環spa

for....next
圖片描述excel

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+1code

Public Function fun(x)
fun = x ^ 2 + 1
End Function

在excel直接在空格打=fun(3)之類可調用自定義函數(跟python好像啊啊啊啊)
2.例:生成1——10的隨機數orm

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
相關文章
相關標籤/搜索