在我们公司最常用的软件是EXCEL,其实很多企业使用EXCEL的频率都很高,但对于我们IT来说EXCEL并不只是做表格、计算数据用的,更多的是自己编写宏(VBA)来查询各个商业部门所需要的数据。如果大家工作的公司里有数据库,那么用宏编写的EXCEL来查询数据就再好不过的了。
 
那么VB和VBA有什么不同呢?
1. VB是设计用于创建标准的应用程序,而VBA是使已有的应用程序(EXCEL等)自动化
2. VB具有自己的开发环境,而VBA必须寄生于已有的应用程序.
3. 要运行VB开发的应用程序,用户不必安装VB,因为VB开发出的应用程序是可执行文件(*.EXE),而VBA开发的程序必须依赖于它的"父"应用程序,例如EXCEL.
尽管存在这些不同,VBA和VB在结构上仍然十分相似.事实上,如果你已经了解了VB,会发现学习VBA非常快.相应的,学完VBA会给学习VB打下坚实的基础.
 
如何进入VBA模式?
新建EXCEL表格,按下ALT+F11,如图
大家一起学习用VBA查询数据_休闲
打开之后如何编写呢?这里有两种方法:
1.双击表格名,直接编写
2.右键—>插入—>模块
个人习惯使用第二种方法,用第二种方法模块化比较清晰,修改方便,出错时容易查找故障
 
大家一起学习用VBA查询数据_休闲_02
 
我们先来看一个做好的VBA代码
 
大家一起学习用VBA查询数据_VBA_03
 
 
我们一段一段分析

Sub OpenMyMenu()
    
    Dim Menu As CommandBarPopup
    Dim Cmd As CommandBarControl
     Dim Cmd1 As CommandBarControl    /定义变量名
   
Set Menu = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup, before:=10, temporary:=True)
     Menu.Caption = "Information_Update"    /定义菜单名叫  Information_Update
     Menu.BeginGroup = True
Set Cmd = Menu.Controls.Add(Type:=msoControlButton)
    Cmd.Caption = "Update_Information"
    Cmd.OnAction = "Update_Information"   /点击后显示选项为 Update_Information
   
Set Cmd = Nothing
Set Menu = Nothing
    End Sub
 
这一段是定义菜单和下拉菜单选项的语句,在菜单栏里可以自己定义选项
 
大家一起学习用VBA查询数据_宏_04
 
 
 
Private Function conn3() As String
conn3 = "Provider=MSDAORA.1;Persist Scurity Info=False; user id=222;password=111;data source=ST124"
End Function
 
这是连接ORACLE数据库的语句,连接其他数据库的语句:
1. Visual Foxpro
            [PROVIDER=MSDASQL.1]; ’或者为MSDASQL
            DRIVER={Driver Name};
            SourceDB=Path;
            SourceType=DBF
            例如:
            cnna.ConnectionString = “PROVIDER=MSDASQL; ”
            + “DRIVER={Microsoft Visual Foxpro Driver};”
            + “SourceDB=D:\data\;”
            + “SourceType=DBF”
            2.SQL Server
            [PROVIDER=MSDASQL;]
            DRIVER={Driver Name};
            SERVER=server;
            DATABASE=database;
            UID=user;
            PWD=password
            例如:
            cnnb.ConnectionString = “PROVIDER=
            MSDASQL;”
            + “DRIVER={SQL Server};”
            + “SERVER=servera;”
            + “DATABASE=pubs;”
            + “UID=sa;”
            + “PWD=yyuui”
            3. Sybase数据库
            [PROVIDER=MSDASQL;]
            DRIVER={Driver Name};
            SRVR=server; ’必须是SRVR,不能是SERVER
            DB=database; ’可以是DB,也可以是DATABASE
            DSN=; ’可以省略
            UID=user;
            PWD=passwod;
            PERSIST SECURITY INFO=False
            例如:
            cnnc.ConnectionString=
            “PROVIDER=MSDASQL;”
            + “DRIVER={Sybase System 11};”
            + “SRVR=serveru; ”
            + “DSN=;”
            + “DB=dataa;”
            + “UID=sa;”
            + “PWD=dqwe;”
            + “PERSIST SECURITY INFO=False”
            4. Oracle数据库
            [PROVIDER=MSDASQL;]
            DRIVER={Driver Name};
            SERVER=server;
            databasename=database;
            databasefile=path;
            DSN=;
            UID=user;
            PWD=password;
            例如:
            cnnd.ConnectionString =
            “PROVIDER=MSDASQL; ”
            + “DRIVER={Microsoft ODBC for Oracle};”
            + “SERVER=Webserver;”
            + “DSN=;”
            + “databasename=dataall;”
            + “databasefile=d:\data\;”
            + “UID=dba;”
            + “PWD=killer”
 
Sub Update_Information()
On Error Resume Next
Dim i As Integer
Dim j As Integer
Dim s_date As String  
 /定义变量
i = 0
Set rst = New ADODB.Recordset
ActiveSheet.Name = "sheet1" /激活工作表
Worksheets("sheet1").Range("a4:k7000").ClearContents /清空单元格
With Worksheets(ActiveSheet.Name)
    rst.Open "select section_no,item_no,name, start_stock from items   order by section_no", conn3, adOpenKeyset, adLockReadOnly
     rst.MoveFirst  
  /用SQL查询数据库

    Do While Not rst.EOF
         .Cells(4 + i, 1) = rst.Fields("section_no") /从第四行第一个单元格开始赋值
        .Cells(4 + i, 2) = rst.Fields("item_no")
        .Cells(4 + i, 3) = rst.Fields("name")
        .Cells(4 + i, 4) = rst.Fields("start_stock")  /把结果复制到相应的单元格里,如A1就代表(1,1)以此推类
        rst.MoveNext
       i = i + 1
   
    Loop
   
    rst.Close
End With
End Sub
至此,这个宏就做好了。其实用VBA查询数据最重要的是SQL这一块,过几天我再发个关于SQL的教程给大家。如还有不明白的地方请留言给我。