VBA學習筆記-01

VBA學習筆記

筆記摘抄自EXCEL精英培訓-藍色幻想

VBA學習筆記01(鏈接)
VBA學習筆記02 (鏈接)

目錄

CH1 VBA基礎知識

CH2 VBA函數與公式

CH3 VBE編輯器

CH4 分支與END語句

CH5 文件操作

<br />


<br />

CH1 VBA基礎知識

一、VBA對象:

VBA中的對象其實就是我們操作的具有方法、屬性的excel中支持的對象
Excel中的幾個常用對象表示方法

1、工作簿

 Workbooks 代表工作簿集合,所有的工作簿,Workbooks(N),表示已打開的第N個工作簿
 Workbooks ("工作簿名稱")
 ActiveWorkbook 正在操作的工作簿
 ThisWorkBook 代碼所在的工作簿      

2、工作表

  Sheets("工作表名稱")
  Sheet1 表示第一個插入的工作表,Sheet2表示第二個插入的工作表....
  Sheets(n) 表示按排列順序,第n個工作表
  ActiveSheet 表示活動工作表,光標所在工作表
  worksheet 也表示工作表,但不包括圖表工作表、宏工作表等。

3、單元格

   cells 所有單元格
   Range ("單元格地址")
   Cells(行數,列數)
   Activecell 正在選中或編輯的單元格
   Selection 正被選中或選取的單元格或單元格區域

二、VBA方法和屬性

1.VBA屬性:VBA屬性就是VBA對象所具有的特點。表示某個對象的屬性的方法是。

    對象.屬性=屬性值        
  Sub ttt()
       Range("a1").Value = 100
 End Sub

2.VBA方法

VBA方法是作用于VBA對象上的動作
表示用某個方法作用于VBA的對象上,可以用下面的格式:

  Sub ttt4()  
     牛排.做 熟的程度:=七成熟     
    Range("A1").Copy Range("A2")
 End Sub

三、VBA語句

1.宏程序語句:運行后可以完成一個功能

Sub test()  開始語句

  Range("a1") = 100

End Sub   結束語句

2.函數程序語句:運行后可以返回一個值

Function shcount()

shcount = Sheets.Count

End Function

3.在程序中應用的語句

 Sub test2()

    Call test

  End Sub

 Sub test3()

   For x = 1 To 100   for next 循環語句
      Cells(x, 1) = x
   Next x

 End Sub

4.判斷語句

(1)IF判斷語句

     Sub 判斷()        單條件判斷
        If Range("a1").Value > 0 Then
           Range("b1") = "正數"
       Else
           Range("b1") = "負數或0"
      End If
    End Sub

Sub 判斷2() 多條件判斷
   If Range("a1").Value > 0 Then
      Range("b1") = "正數"
   ElseIf Range("a1") = 0 Then
      Range("b1") = "等于0"
   ElseIf Range("B1") <= 0 Then
      Range("b1") = "負數"
   End If
End Sub

Sub 多條件判斷2()
  If Range("a1") <> "" And Range("a2") <> "" Then
     Range("a3") = Range("a1") * Range("a2")
  End If
 End Sub

(2)IFF函數判斷

Sub 判斷4()
   Range("a3") = IIf(Range("a1") <= 0, "負數或零", "負數")
End Sub

(3)select判斷

Sub 判斷1() 單條件判斷
  Select Case Range("a1").Value
 Case Is > 0
   Range("b1") = "正數"
Case Else
 Range("b1") = "負數或0"
End Select
End Sub

    Sub 判斷2() 多條件判斷
       Select Case Range("a1").Value
        Case Is > 0
               Range("b1") = "正數"
      Case Is = 0
             Range("b1") = "0"
      Case Else
             Range("b1") = "負數"
    End Select
  End Sub

    Sub 判斷3()
       If Range("a3") < "G" Then
             MsgBox "A-G"
       End If
    End Sub

(4)判斷范圍

    Sub if 區間判斷()
        If Range("a2") <= 1000 Then
            Range("b2") = 0.01
        ElseIf Range("a2") <= 3000 Then
            Range("b2") = 0.03
        ElseIf Range("a2") > 3000 Then
          Range("b2") = 0.05
        End If
    End Sub

    Sub select區間判斷()
       Select Case Range("a2").Value
       Case 0 To 1000
             Range("b2") = 0.01
       Case 1001 To 3000
           Range("b2") = 0.03
       Case Is > 3000
           Range("b2") = 0.05
       End Select
    End Sub

5.循環語句

(1)

    Sub t1()
      Range("d2") = Range("b2") * Range("c2")
      Range("d3") = Range("b3") * Range("c3")
      Range("d4") = Range("b4") * Range("c4")
      Range("d5") = Range("b5") * Range("c5")
      Range("d6") = Range("b6") * Range("c6")
    End Sub

(2)FOR <循環變量>=<初值>to<終值> [step 步長]
<循環體>
[EXIT FOR]
<循環體>
NEXT [循環變量]

  Sub t2()
      Dim x As Integer
       For x = 10000 To 2 Step -3
            Range("d" & x) = Range("b" & x) * Range("c" & x)
       Next x
  End Sub

(3)

   Sub t3()
        Dim rg As Range
       For Each rg In Range("d2:d18")
              rg = rg.Offset(0, -1) * rg.Offset(0, -2)
       Next rg
  End Sub

(4) do[ while 邏輯表達式]
<循環體>
[EXIT DO]
<循環體>
loop [while 邏輯表達式]

    Sub t4()
          Dim x As Integer
               x = 1
         Do
             x = x + 1
             Cells(x, 4) = Cells(x, 2) * Cells(x, 3)
         Loop Until x = 18
    End Sub

(5)

    Sub t5()
           x = 1
           Do While x < 18
                 x = x + 1
                 Cells(x, 4) = Cells(x, 2) * Cells(x, 3)
           Loop
    End Sub

6.變量

(1)什么是變量?
所謂變量,就是可變的量。就好象在內存中臨時存放的一個小盒子,這個小盒子放的什么物體不固定。

  Sub t1()
        Dim X As Integer x就是一個變量
        For X = 1 To 10
                Cells(X, 1) = X
        Next X
  End Sub

(2)變量的類型和聲明

A.變量的類型

byte 字符型(0-255)
integer 整數型(-32768-32767)
long 長整數型
single 單精度浮點型
double 雙精度浮點型
currency 貨幣型
decimal 小數型
string 字符串型 (數字 文本)
date 日期型
boolean 布爾型 (邏輯判斷)
variant 萬能型

B.聲明變量

  dim 變量名 as 數據類型
  
  dim str as string

C.如給文本、數值、日期等數據型變量賦值
let 變量名稱 =數據
如給對象變量(object型,如單元格)賦值
set 變量名稱=對象
e.g

    set rng=worksheets("sheet1").range("a1")
    rng.value="歡迎"

使用常量
const 變量名稱 as 數據類型-數值

   const p as single =3.14

(3)變量的存活周期

1 過程級變量:過程結束,變量值釋放

   如t1

2 模塊級變量:變量的值只在本模塊中保持,工作簿關閉時隨時釋放
例5

     Sub t6()
        m = 1
     End Sub
     Sub t5()
      MsgBox m
      m = 7
     End Sub

3 全局級變量: 在所有的模塊中都可以調用,值會保存到EXCEL關閉時才會被釋放。

   public 變量
   
     Sub t7()
       MsgBox qq
     End Sub

(4)變量的釋放

一般情況下,過程級變量在過程運行結束后就會自動從內存中釋放,而只有一些從外部借用的對象變量才需要使用set 變量=nothing進行釋放。
<br />


<br />

CH2 VBA函數與公式

一、在單元格中輸入公式

1、用VBA在單元格中輸入普通公式

 Sub t1()
   Range("d2") = "=b2*c2"
 End Sub
 
 Sub t2()
  Dim x As Integer
  For x = 2 To 6
   Cells(x, 4) = "=b" & x & "*c" & x
  Next x
 End Sub

2、用VBA在單元格輸入帶引號的公式

 Sub t3()
 
       Range("c16") = "=SUMIF(A2:A6,""b"",B2:B6)" 遇到單引號就把單引號加倍
 
 End Sub

3、用VBA在單元格中輸入數組公式

Sub t4()
  Range("c9").FormulaArray = "=SUM(B2:B6*C2:C6)"
End Sub

二、利用單元格公式返回值

 Sub t5()
     Range("d16") = Evaluate("=SUMIF(A2:A6,""b"",B2:B6)")
     Range("d9") = Evaluate("=SUM(B2:B6*C2:C6)")
 End Sub

三、借用工作表函數

 Sub t6()
    
    Range("d8") = Application.WorksheeFunction.CountIf(Range("A1:A10"), "B")
    
 End Sub

四、利用VBA函數

 Sub t7()
 
  Range("C20") = VBA.InStr(Range("a20"), "E")

 End Sub    

五、編寫自定義函數

  Function wn()
     wn = Application.Caller.Parent.Name
  End Function

<br />


<br />

CH3 VBE編輯器

  • 1.注釋文字 :文字前加單引號
  • 2.強制轉行 空格+下劃線
  • 3.調試工具欄: 逐語句運行或按F8
  • 4.設置斷點:STOP
  • 5.立即窗口: debug.print "第“&X&”運行結果“ 顯示某步程序運行結果
  • 6.本地窗口:顯示運行中斷時對象信息
    <br />

<br />

CH4 分支與END語句

一、END語句

作用:強制退出所有正在運行的程序。

二、Exit語句

退出指定的語句

1、Exit Sub

 Sub e1()
 Dim x As Integer
    For x = 1 To 100
      Cells(1, 1) = x
      If x = 5 Then
        Exit Sub
      End If
     Next x
  Range("b1") = 100
 End Sub

2、Exit function

 Function ff()
 Dim x As Integer
    For x = 1 To 100
      If x = 5 Then
        Exit Function
      End If
     Next x
  ff = 100
 End Function

3、Exit for

Sub e2()     
 Dim x As Integer
    For x = 1 To 100
      Cells(1, 1) = x
      If x = 5 Then
        Exit For
      End If
     Next x
     
   Range("b1") = 100
 End Sub

4、Exit do

 Sub e3()
 Dim x As Integer
   Do
     x = x + 1
      Cells(1, 1) = x
      If x = 5 Then
        Exit Do
      End If
   Loop Until x = 100
   Range("b1") = 100
 End Sub

三、分支語句

1.Goto語句,跳轉到指定的地方

 Sub t1()
      Dim x As Integer
      Dim sr
      100:
            sr = Application.InputBox("請輸入數字", "輸入提示")
     If Len(sr) = 0 Or Len(sr) = 5 Then GoTo 100
  End Sub

2.gosub..return ,跳過去,再跳回來

Sub t2()
      Dim x As Integer
      For x = 1 To 10
             If Cells(x, 1) Mod 2 = 0 Then GoSub 100
      Next x
 Exit Sub
 100:
         Cells(x, 1) = "偶數"
     Return
End Sub

3.on error resume next 遇到錯誤,跳過繼續執行下一句

 Sub t3()
  On Error Resume Next
  Dim x As Integer
    For x = 1 To 10
      Cells(x, 3) = Cells(x, 2) * Cells(x, 1)
  Next x
 End Sub

4.on error goto 出錯時跳到指定的行數

Sub t4()
    On Error GoTo 100
    Dim x As Integer
    For x = 1 To 10
        Cells(x, 3) = Cells(x, 2) * Cells(x, 1)
    Next x
 Exit Sub
 100:
         MsgBox "在第" & x & "行出錯了"
End Sub

5.on error goto 0 取消錯誤跳轉

    Sub t5()
            On Error Resume Next
            Dim x As Integer
            For x = 1 To 10
            If x > 5 Then On Error GoTo 0
                Cells(x, 3) = Cells(x, 2) * Cells(x, 1)
          Next x
     Exit Sub

<br />


<br />

CH5 文件操作

一、常用概念

1.excel文件和工作簿

excel文件就是excel工作簿,excel文件打開需要excel程的支持

(1) Workbooks 工作簿集合,泛指excel文件或工作簿

Workbooks("A.xls"),名稱為A的excel工作簿

Sub t1()
    Workbooks("A.xls").Sheets(1).Range("a1") = 100
 End Sub

workbooks(2),按打開順序,第二個打開的工作簿。

  Sub t2()
    Workbooks(2).Sheets(2).Range("a1") = 200
 End Sub

(2)ActiveWorkbook ,當打開多個excel工作簿時,你正在操作的那個就是ActiveWorkbook(活動工作簿)

(3)Thisworkbook,VBA程序所在的工作簿,無論你打開多少個工作簿,無論當前是哪個工作簿是活動的,thisworkbook就是指它所在的工作簿。

2.工作簿窗口

Windows("A.xls"),A工作簿的窗口,使用windows可以設置工作簿窗口的狀態,如是否隱藏等。
 Sub t3()
    Windows("A.xls").Visible = False
 End Sub
 Sub t4()
    Windows(2).Visible = True
 End Sub

3.excel工作表的分類

excel工作表有兩大類,一類是我們平常用的工作表(worksheet),另一類是圖表、宏表等。這兩類的統稱是sheets

sheets 工作表集合,泛指excel各種工作表

Sheets("A"),名稱為A的excel工作表

 Sub t1()
    Sheets("A").Range("a1") = 100
 End Sub

workbooks(2),按打開順序,第二個打開的工作簿。

  Sub t2()
    Sheets(2).Range("a1") = 200
 End Sub

ActiveSheet ,當打開多個excel工作簿時,你正在操作的那個就是ActiveSheet

二、 EXCEL文件操作

1 判斷A.Xls文件是否存在

Sub W1()
 If Len(Dir("d:/A.xls")) = 0 Then
   MsgBox "A文件不存在"
 Else
   MsgBox "A文件存在"
 End If
 End Sub

2 判斷A.Xls文件是否打開

Sub W2()
 Dim X As Integer
  For X = 1 To Windows.Count
    If Windows(X).Caption = "A.XLS" Then
      MsgBox "A文件打開了"
      Exit Sub
    End If
  Next
End Sub

3 excel文件新建和保存

Sub W3()
 Dim wb As Workbook
 Set wb = Workbooks.Add
   wb.Sheets("sheet1").Range("a1") = "abcd"
 wb.SaveAs "D:/B.xls"
End Sub

4 excel文件打開和關閉

 Sub w4()
        Dim wb As Workbook
              Set wb = Workbooks.Open("D:/B.xls")
              MsgBox wb.Sheets("sheet1").Range("a1").Value
        wb.Close False
 End Sub

5 excel文件保存和備份

 Sub w5()
      Dim wb As Workbook
       Set wb = ThisWorkbook
        wb.Save
        wb.SaveCopyAs "D:/ABC.xls"
 End Sub

6 excel文件復制和刪除

 Sub W6()
  FileCopy "D:/ABC.XLS", "E:/ABCd.XLS"
  Kill "D:/ABC.XLS"
 End Sub

7.判斷A工作表文件是否存在

Sub s1()
 Dim X As Integer
  For X = 1 To Sheets.Count
    If Sheets(X).Name = "A" Then
      MsgBox "A工作表存在"
      Exit Sub
    End If
  Next
  MsgBox "A工作表不存在"
End Sub
  1. excel工作表的插入

     Sub s2()
        Dim sh As Worksheet
        Set sh = Sheets.Add
        sh.Name = "模板"
        sh.Range("a1") = 100
     End Sub
    

9.excel工作表隱藏和取消隱藏

 Sub s3()
          Sheets(2).Visible = True
 End Sub

10.excel工作表的移動

 Sub s4()
             Sheets("Sheet2").Move before:=Sheets("sheet1")        ‘sheet2移動到sheet1前面
            Sheets("Sheet1").Move after:=Sheets(Sheets.Count)      ’ sheet1移動到所有工作表的最后面
 End Sub

11.excel工作表的復制

 Sub s5() 在本工作簿中
      Dim sh As Worksheet
        Sheets("模板").Copy before:=Sheets(1)
        Set sh = ActiveSheet
        sh.Name = "1日"
        sh.Range("a1") = "測試"
 End Sub

Sub s6() 另存為新工作簿

  Dim wb As Workbook
   Sheets("模板").Copy
   Set wb = ActiveWorkbook
      wb.SaveAs ThisWorkbook.Path & "/1日.xls"
      wb.Sheets(1).Range("b1") = "測試"
      wb.Close True
   End Sub

12.保護工作表

 Sub s7()
        Sheets("sheet2").Protect "123"
 End Sub
 Sub s8() 判斷工作表是否添加了保護密碼
  If Sheets("sheet2").ProtectContents = True Then
    MsgBox "工作簿保護了"
  Else
    MsgBox "工作簿沒有添加保護"
  End If
 End Sub

13.工作表刪除

 Sub s9()
   Application.DisplayAlerts = False
     Sheets("模板").Delete
   Application.DisplayAlerts = True
 End Sub

14.工作表的選取

 Sub s10()
   Sheets("sheet2").Select
 End Sub
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,247評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,520評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,362評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,805評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,541評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,896評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,887評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,062評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,608評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,356評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,555評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,077評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,769評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,175評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,489評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,289評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,516評論 2 379

推薦閱讀更多精彩內容

  • 1.1 VBA是什么 直到90年代早期,使應用程序自動化還是充滿挑戰性的領域.對每個需要自動化的應用程序,人們不得...
    浮浮塵塵閱讀 21,820評論 6 49
  • 本例為設置密碼窗口 (1) If Application.InputBox(“請輸入密碼:”) = 1234 Th...
    浮浮塵塵閱讀 13,723評論 1 20
  • 自從2014年開通[完美Excel]微信公眾號以來,堅持分享已經學習到的Excel和VBA知識和心得,目前已分享文...
    完美Excel閱讀 8,326評論 6 69
  • python學習筆記 聲明:學習筆記主要是根據廖雪峰官方網站python學習學習的,另外根據自己平時的積累進行修正...
    renyangfar閱讀 3,080評論 0 10
  • 第一章 VBA是什么 Visual Basic Application 一個Excel文件就是一個工作簿(Work...
    PyJack閱讀 1,847評論 0 2