在我们公司最常用的软件是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打下坚实的基础.
2. VB具有自己的开发环境,而VBA必须寄生于已有的应用程序.
3. 要运行VB开发的应用程序,用户不必安装VB,因为VB开发出的应用程序是可执行文件(*.EXE),而VBA开发的程序必须依赖于它的"父"应用程序,例如EXCEL.
尽管存在这些不同,VBA和VB在结构上仍然十分相似.事实上,如果你已经了解了VB,会发现学习VBA非常快.相应的,学完VBA会给学习VB打下坚实的基础.
如何进入VBA模式?
新建EXCEL表格,按下ALT+F11,如图
打开之后如何编写呢?这里有两种方法:
1.双击表格名,直接编写
2.右键—>插入—>模块
个人习惯使用第二种方法,用第二种方法模块化比较清晰,修改方便,出错时容易查找故障
我们先来看一个做好的VBA代码
我们一段一段分析
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
这一段是定义菜单和下拉菜单选项的语句,在菜单栏里可以自己定义选项
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 /定义变量
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)
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查询数据库
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的教程给大家。如还有不明白的地方请留言给我。
转载于:https://blog.51cto.com/komichu/163371