程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> VBA續噓噓,vba續噓

VBA續噓噓,vba續噓

編輯:關於.NET

VBA續噓噓,vba續噓


 

什麼是VBA?它有什麼作用?

 A.實現Excel中沒有實現的功能。

 B.提高運行速度。

 C.編寫自定義函數。

 D.實現自動化功能。

 E.通過插入窗體做小型管理軟件。

VBA在哪裡存放的?怎麼運行?

 A.模塊中

   在Excel 2010中若沒有“開發工具”項,通過“文件”——“選項”——“自定義功能區”——選中“開發工具”——“確定”(圖1)。

(注:為了提高word2010中插入的圖片的質量,“文件”——“選項”——“高級”——選中“不壓縮文件圖像質量”——“確定”。)

 

圖1 選中“文件”—“選項”

圖2 ”自定義功能區”—“開發工具”——“確定”

 

圖3 最終的界面多出了“開發工具”選項卡

 

                                                               圖4 代碼存放在“模塊”中

B.運行宏

單擊向右的綠三角,即可以運行。

 

   

                                                   圖5 右綠三角運行  

                                                          圖6  選中test並“運行”

 

                                                    圖7 運行結果

3.什麼是宏?宏和VBA有什麼關系?

 宏(Macro),是一種批量處理。

 宏通常既可以錄制又可以手動編程,而VBA一般是通過編程完成。宏可以和VBA相結合使用。

4.錄制一個宏。

  A.“開發工具”——“錄制宏”——宏名為“輸入100”——“錄制”——在A1單元格中輸入100——“停止”。

  B.“宏”——選中“輸入100”——“執行”。

  

5.編寫一個宏。

  A.“開發工具”——“Visual Basic”——“視圖”——“工程資源管理器”——“插入”——“模塊”——在右側輸入代碼:

  

  B. 單擊綠右三角即可運行。或者關閉VBA編輯窗口,單擊“宏”——選中“test”——“執行”。

 

6.VBA語句

  A.宏程序語句。

   

  B.函數程序語句

  

 C.在程序中應運語句。

  

D.循環語句。

  

7.VBA對象

  A.工作簿對象

     Workbooks 代表工作簿集合,所有的工作簿,Workbooks(N),表示已打開的第N個工作簿

     Workbooks ("工作簿名稱")

     ActiveWorkbook 正在操作的工作簿

     ThisWorkBook '代碼所在的工作簿

  B.工作表對象

     Sheets("工作表名稱")

     Sheet1 表示第一個插入的工作表,Sheet2表示第二個插入的工作表....

     Sheets(n) 表示按排列順序,第n個工作表

     ActiveSheet 表示活動工作表,光標所在工作表

     worksheet 也表示工作表,但不包括圖表工作表、宏工作表等。

  C.單元格對象

     cells 所有單元格

     Range ("單元格地址")

     Cells(行數,列數)    Range(“B3”)和Cells(3,2)表示相同的單元格

     Activecell 正在選中或編輯的單元格

     Selection 正被選中或選取的單元格或單元格區域

8. VBA屬性

    VBA屬性就是VBA對象所具有的特點,表示某個對象的屬性如下:對象.屬性=屬性值

    Sub ttt()

      Range("a1").Value = 100     ’給單元格a1填充數值100

    End Sub

                                                                                                                                    

    Sub ttt1()

      Sheets(1).Name = "工作表改名了"   ’給工作簿重命名為“工作表改名了”

    End Sub

                                                                                                                                       

    Sub ttt2()

       Sheets("Sheet2").Range("a1").Value = "abcd"   ’給sheet2工作表的a1單元格填充字符串“abcd”

    End Sub

                                                                                                                                        

      Sub ttt3()

     ’單元格的內部的填充色

          Range("A2").Interior.ColorIndex = 3  ’將A2單元格的背景顏色設置為紅色

         Range("A2").Font.ColorIndex = 3      ’將A2單元格的字體顏色設置為紅色

      End Sub

                                                                                                                                           

9.VBA方法

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

   對象.方法  參數名稱:=參數值

                                                                                                                                            

  Sub ttt4()

      ’Range("A1").Copy Destination:= Range("A2")

      Range("A1").Copy Range("A2")   ’將A1中的內容復制到A2

  End Sub

                                                                                                                                            

  Sub ttt5()

    Sheet1.Move before:=Sheets("Sheet3")   ’將sheet1表移動到sheet3之前

  End Sub

                                                                                                                                           

10.在一個鄉政府的文件中要求將Excel中一個表格的身份證號,配對並填充到另一個表中。宏代碼如下:

     Sub 配對()

      Dim I, J As Integer

      For I = 3 To 225

           For J = 4 To 930

               If Sheets("Sheet4").Range("b" & I).Value = Sheets("黃門鄉").Range("b" & J).Value Then   

                     Sheets("Sheet4").Range("e" & I).Value = Sheets("黃門鄉").Range("d" & J).Value

              End If

         Next J

       Next I

     End Sub

     ’竟然沒寫入End IF,提示錯誤“Next 缺少 For”

11.判斷語句

   A.if判斷語句

                                                                                                                           

     Sub 判斷1() '單條件判斷

       If Range("a1").Value > 0 Then

            Range("b1") = "正數"

       Else

            Range("b1") = "負數或0"

       End If

     End Sub

  B.IIF判斷語句

                                                                                                                            

    Sub 判斷4()

        Range("a3") = IIf(Range("a1") <= 0, "負數或零", "負數")

    End Sub

  C.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

D.區間判斷

                                                                                                                                     

  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

                                                                                                                                  

12.循環語句

   A.單語句代碼

     Sub t1()

      Range("d2") = Range("b2") * Range("c2")   ’將b2單元格與c2單元格相乘並賦值給d2單元格

      Range("d3") = Range("b3") * Range("c3")   ’將b3單元格與c3單元格相乘並賦值給d3單元格

      Range("d4") = Range("b4") * Range("c4")   ’將b4單元格與c4單元格相乘並賦值給d4單元格

      Range("d5") = Range("b5") * Range("c5")   ’將b5單元格與c5單元格相乘並賦值給d5單元格

      Range("d6") = Range("b6") * Range("c6")   ’將b6單元格與c6單元格相乘並賦值給d6單元格

     End Sub

  B.For each 循環語句

    Sub s1()

      Dim rg As Range

      For Each rg In Range("a1:b7,d5:e9")

        If rg = "" Then

           rg = 0

        End If

      Next rg

    End Sub

   ’注:在a1到b7單元區域和d5到e9單元格區域中的遍歷所有單元格,若為空,就賦值0。

C、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

   注:將10000行數據中每隔3行的b列和c列相乘賦值給d列。

D、For Each語句(應用offset方法來制定單元格)

   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

   ’注:offset就是偏移,針對d2而言,Offset(0, -1)指的就是向左移動1個單元格,即c2;而Offset(0, -2)指的就是向左移動2個單元格,即b2;第一個參數是垂直移動,正為向上,負為向下;第二個參數是水平移動,正為向右,負為向左。

   

                圖12 offset函數分析圖

E.Do ……Loop Until語句

   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

   ’注:Cell(行,列),即上文中的x指的是行。將第二列和第三列相乘賦值給第四列。

F.Do While……Loop語句

   Sub t5()

    x = 1

    Do While x < 18

      x = x + 1

      Cells(x, 4) = Cells(x, 2) * Cells(x, 3)

    Loop

   End Sub

   ’注:Cell(行,列),即上文中的x指的是行。將第二列和第三列相乘賦值給第四列。

G.Do ……Loop Until語句

   Sub s2()

    Dim x As Integer

    Do

      x = x + 1

      If Cells(x + 1, 1) <> Cells(x, 1) + 1 Then

         Cells(x, 2) = "斷點"

         Exit Do

      End If

    Loop Until x = 14

   End Sub

   ’判斷第1列中的數據不連續,就在其後的單元格輸入一個“斷點”。

13. 學習變量

   A、什麼是變量?

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

     Dim m As Integer

     Sub t1()

       Dim X As Integer 'x就是一個整形變量

       For X = 1 To 10

         Cells(X, 1) = X

        Next X

      End Sub

   B、小盒子裡可以放什麼?

 

      1、放數字   2、放文本

        Sub t2()

       Dim st As String    ’st存放字符串

       Dim X As Integer    ’X存放整數類型

       For X = 1 To 10

        st = st & "Excel精英培訓"

       Next X

       End Sub

     3、 放對象

       Sub t3()

        Dim rg As Range      ’rg是單元格類型

         Set rg = Range("a1") ’Set關鍵詞就是給對象變量指定值

          rg = 100

        End Sub

    4、 放數組

       Sub t4()

          Dim arr(1 To 10) As Integer, X As Integer  

          For X = 1 To 10

            arr(X) = X

          Next X

       End Sub

      ’數組arr(1),arr(2),arr(3)……arr(10)都是整形類型

C、變量的類型和聲明

   1 變量的類型

     (1)整型(Integer):

          表示-32768至32767之間的整數           例如:10   110   20

     (2)長整型(Long):

          表示-2,147,483,648至2,147,483,647之間的整數

           例如:長整型的書寫:    23454444554     

     (3)單精度實型(Single):

           有效數為7位 表示-3.37E+38至3.37E+38之間的實數

     (4)雙精度實型(Double):

           有效數為15位

     (5)字符型(String)

         在VB中字符串常量是用雙引號“ ”括起的一串字符,例 如"ABC","abcdefg","123","0","VB程序設計"等。

    (6) 邏輯型(Boolean)

         邏輯型又稱布爾型,其數據只有True(真)和False(假)兩個值

    (7)日期型(Date)

         表示日期和時間

         用兩個“#”符號把日期和時間的值括起來       如:#08/20/2001#、#2001-08-20#

   2 為什麼要聲明變量

     變量通過索引可以存儲更多的值,在循環結構中的作用大。

   3 聲明變量

      dim public

D、變量的存活周期

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

       '如t1

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

 

         Sub t6()

            m = 1

         End Sub

         

        Sub t5()

          MsgBox m

          m = 7

         End Sub

 

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

       ' public 變量

         Sub t7()

           MsgBox qq

         End Sub

 E、變量的釋放

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

14.函數與公式

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

Option Explicit

     Sub t1()

       Range("d2") = "=b2*c2"   ’將b2乘以c2賦值給d2

     End Sub

     

     Sub t2()

      Dim x As Integer

      For x = 2 To 6

       Cells(x, 4) = "=b" & x & "*c" & x     ’將b列乘以c列賦值給d列

      Next x

     End Sub

     

 

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

     Sub t3()

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

     End Sub

     注:在A2:A6單元格區域中,找到b項,共兩個,將所對應的B列中的單元格值相加,即3+5=8。

      

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

    Sub t4()

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

End Sub

’注:將b列和c列相乘的結果

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

     Sub t5()

         Range("d16") = Evaluate("=SUMIF(A2:A6,""b"",B2:B6)")

         Range("d9") = Evaluate("=SUM(B2:B6*C2:C6)")

     End Sub

E、借用工作表函數

     Sub t6()

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

     End Sub

F、利用VBA函數

     Sub t7()

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

     End Sub

G、編寫自定義函數

      Function wn()

         wn = Application.Caller.Parent.Name

      End Function

15. VBE編輯器

A、工程窗口

    a 顯示工作簿工作表對象

    b 窗體

    c 模塊

    d 類模塊

range("a1")=10

'對應工程窗口的對象和模板,顯示其所具體的一些特征。

    

B、代碼窗口

    a 注釋文字的設置

    b 代碼縮進的設置

    c 代碼強制轉行的設置

    d 代碼運行和調試

         '逐句運行

         '設置斷點

    e 對象列表框和過程列表框

 C、立即窗口

立即窗口可以把運行過程中的值立即顯示出來,主要用於程序的調試

    Sub d()

     Dim x As Integer, st As String

     For x = 1 To 10

        st = st & Cells(x, 1)

        Debug.Print "第" & x & "次運行結果:" & st

     Next x

    End Sub

 D、本地窗口

   '在本地窗口中可以顯示運行中斷時對象信息、變量值、數組信息等

   Sub d1()

     Dim x As Integer, k As Integer

     For x = 1 To 10

        k = k + Cells(x, 1)

     Next x

   End Sub

16.VBA分支語句與End語句

   

 

 A、END語句

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

B、 Exit語句:退出指定的語句

      a、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

      b、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

       c、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

     d、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

  C、VBA分支語句

     Option Explicit

     a、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

    注:“100:”就是一個Goto語句可以跳入的標志。“Len(sr)=0”表示輸入框沒有輸入,“Len(sr) = 5”表取消。其實質就是“false”是5個字符。

       

b、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    '跳到gosub 100 這一句

  End Sub

c、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

d、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

 e、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

   End Sub

 

 

17、Excel文件操作的幾個概念

    A、excel文件和工作簿概念

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

      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

                                                           

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

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

 

   B、工作簿窗口

       Windows("A.xls"),A工作簿的窗口,使用windows可以設置工作簿窗口的狀態,如是否隱藏等。

       Sub t3()

          Windows("A.xls").Visible = False

       End Sub

                                                                                          

       Sub t4()

        Windows(2).Visible = True

       End Sub

                                                                                          

18、Excel文件的操作

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

     Sub W1()

     If Len(Dir("d:/A.xls")) = 0 Then

       MsgBox "A文件不存在"

     Else

       MsgBox "A文件存在"

     End If

    End Sub

  B、 判斷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

C、excel文件新建和保存

   Sub W3()

     Dim wb As Workbook

     Set wb = Workbooks.Add

       wb.Sheets("sheet1").Range("a1") = "abcd"

     wb.SaveAs "D:/B.xls"

  End Sub

D、 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

E、 excel文件保存和備份

   Sub w5()

      Dim wb As Workbook

      Set wb = ThisWorkbook

      wb.Save

      wb.SaveCopyAs "D:/ABC.xls"

    End Sub

 F、 excel文件復制和刪除

    Sub W6()

      FileCopy "D:/ABC.XLS", "E:/ABCd.XLS"

      Kill "D:/ABC.XLS"

End Sub

19、工作表的概念

   A、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

                                                                                

  20、工作表的操作

     A、判斷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  

     B、 excel工作表的插入

        Sub s2()

          Dim sh As Worksheet

          Set sh = Sheets.Add

           sh.Name = "模板"

          sh.Range("a1") = 100

        End Sub

     C、 excel工作表隱藏和取消隱藏

        Sub s3()

         Sheets(2).Visible = True

        End Sub

     D、 excel工作表的移動

        Sub s4()

         Sheets("Sheet2").Move before:=Sheets("sheet1") 'sheet2移動到sheet1前面

         Sheets("Sheet1").Move after:=Sheets(Sheets.Count) 'sheet1移動到所有工作表的最後面

        End Sub

    E、 excel工作表的復制

       Sub s5() '在本工作簿中

          Dim sh As Worksheet

           Sheets("模板").Copy before:=Sheets(1)

           Set sh = ActiveSheet

              sh.Name = "1日"

             sh.Range("a1") = "測試"

        End Sub

    F、工作表的保存

       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

   G、 保護工作表

        Sub s7()

           Sheets("sheet2").Protect "123"

        End Sub

        Sub s8() '判斷工作表是否添加了保護密碼

           If Sheets("sheet2").ProtectContents = True Then

             MsgBox "工作簿保護了"

           Else

             MsgBox "工作簿沒有添加保護"

           End If

        End Sub

   H、工作表刪除

       Sub s9()

           Application.DisplayAlerts = False

              Sheets("模板").Delete

           Application.DisplayAlerts = True

       End Sub

  I、工作表的選取

       Sub s10()

            Sheets("sheet2").Select

        End Sub

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved