A. vba如何调用Access的查询,并显示查询结果
当然可以,用DAO,可以在VB添加DAO组件。
然后,定义参数
'Database Connection
Dim cn As Workspace
Dim db As Database
Dim Rs As Recordset
Dim YOURPWD$, strsql$, sContent$
'设置数据库
Set cn = DBEngine.Workspaces(0)
Set db = cn.OpenDatabase(sDbPath, False, False, ";pwd=" & YOURPWD)
'打开数据库
strSQL = "Select * From YourTable"
Set Rs = db.OpenRecordset(strSQL, , dbReadOnly)
'取出一个不为NULL的字符串字段值
sContent = trim$(Rs!Item1)
--------------------------------------------------------------
'使用前提在VB中加入VB组件
Dim xlsApp As Object, xlsBook As Object, xlsSheet As Object
Dim Row&, Col&
On Error GoTo ExcelInport_Err
'创建应用Excel程序
Set xlsApp = CreateObject("Excel.Application")
'Excel WorkBook 的添加
Set xlsBook = xlsApp.Workbooks.Add
’取得活动的Excel Sheet
Set xlsSheet = xlsBook.ActiveSheet
'Excel Sheet的标题
xlsSheet.Name = "Your Sheet Name"
'Excel Sheet 内容的填充
With xlsSheet
Row = 1
'行
Col = 1
'列
.Cells(Row, Col).Value = "Your Fill Content"
End With
‘Excel
xlsApp.Visible = True
Set xlsSheet = Nothing
Set xlsBook = Nothing
Set xlsApp = Nothing
Exit Sub
ExcelInport_Err:
'关闭时没有消息框
xlsApp.DisplayAlerts = False
xlsApp.Quit
Set xlsApp = Nothing
B. ACCESS里打开某数据库后如何用VBA引用表、记录及字段值
在
Access
2003
中,您可以使用
Visual
Basic
编辑器查看当前选择的
VBA
引用。为此,请按照下列步骤操作:
启动
Access
2003。
打开一个
Access
数据库。
按
ALT+F11
打开
Visual
Basic
编辑器。
在
Visual
Basic
编辑器窗口中,单击“工具”菜单上的“引用”。在“引用”对话框中,您可以看到所选的引用。注意
当选择了一个引用后,您还可以查看有关使用该引用必须加载的文件的信息。相关文件可能是类型库、对象库或控件库。每个引用的相关文件会根据“引用”对话框中显示的信息进行加载。但是,如果找不到相应的文件,Access
2003
将在计算机上的其他位置搜索它。对于所选的每个
VBA
引用,Access
2003
都会执行以下任务:
Access
验证是否已加载了引用的文件。
如果当前未加载引用的文件,Access
将验证
RefLibPaths
注册表项是否存在。
如果
RefLibPaths
注册表项存在,Access
将搜索与引用具有相同名称的命名值。如果有匹配的命名值,则
Access
将从命名值中提及的路径加载引用。注意
您可以将
RefLibPaths
注册表项手动添加到注册表中,然后可以添加
RefLibPaths
注册表项下任何外接程序或任何库的名称和位置。为此,请按照下列步骤操作。
单击“开始”,然后单击“运行”。
在“打开”框中,键入
regedit,然后单击“确定”。
在“注册表编辑器”窗口中,找到以下注册表项:HKEY_LOCAL_MACHINE\Software\Microsoft\Office\11.0\Access
右键单击“Access”注册表项,指向“新建”,然后单击“项”。
将新创建的项命名为
RefLibPaths。
单击“RefLibPaths”。
右键单击右窗格中的任意位置,然后单击“字串值”。
使用与
VBA
引用相同的名称命名新创建的字符串值。
右键单击您在第
8
步中创建的字符串值,然后单击“修改”。
在“编辑字符串”对话框中,键入必须加载的文件的位置以与
VBA
中的引用对应。注册表值名称必须是文件名加扩展名。位置(数值数据)必须是路径加文件名。例如,如果设置对
Northwind
示例数据库的引用,则可以添加以下值:
数值名称:Northwind.mdb
数值数据:C:\Program
Files\Microsoft
Office\Office11\Samples\Northwind.mdb
重复第
7
步到第
10
步,将适当的外接程序或库的名称和位置作为字符串值添加。
在“文件”菜单上,单击“退出”。如果
RefLibPaths
注册表项不存在或未包含正确的引用,则
Access
使用“SearchPath”API
搜索引用的文件。将执行以下搜索:
搜索范围说明
应用程序目录
Msaccess.exe
的位置。
当前目录在“文件”菜单上单击“打开”时所看到的目录。
系统目录
Windows
文件夹或
WINNT
文件夹中的
System
文件夹和
System32
文件夹。
WinDir
操作系统文件在其中运行的文件夹。这通常是
Windows
文件夹或
WINNT
文件夹。
PATH
环境变量此系统变量包含系统可直接访问的一组文件夹。Microsoft
Windows
NT
4.0:在控制面板中,双击“系统”,然后单击“环境”选项卡。PATH
变量显示在“系统变量”列表中。Microsoft
Windows
2000
或
Microsoft
Windows
Server
2003:在控制面板中,双击“系统”,单击“高级”选项卡,然后单击“环境变量”。PATH
显示在“系统变量”列表中。
文件目录包含
.mdb
文件、.mde
文件、.adp
文件或
.ade
文件的文件夹和任何子文件夹。注意
如果您要引用的文件位于上表中提到的任何目录中,则
Access
不需要
RefLibPaths
注册表项。如果
Access
2003
无法找到相关引用,当您编译项目或尝试运行某个过程时,将收到以下错误信息:
Your
Microsoft
Office
Access
database
or
project
contains
a
missing
or
broken
reference
to
the
file
file
name.*
To
ensure
that
your
database
or
project
works
properly,
you
must
fix
this
reference.
注意
在数据库已打开的情况下,对于每个无法找到的引用,您都会收到一次前面提及的错误信息。例如,如果您打开了
MyDatabase.mdb
并且
MyDatabase.mdb
丢失了对
Microsoft
Calendar
控件和
Microsoft
DAO
库的引用,则您会收到两条错误信息,丢失的每个引用对应一条错误信息。如果您未修复这些引用,那么当您关闭数据库然后再重新打开时,您将再次收到这些错误信息。如果您修复了这些引用并保存了数据库,则下次打开该数据库时就不会收到这些错误信息了。BrokenReference
属性Access
的
Application
对象具有一个
BrokenReference
属性,该属性可以告诉您是否有任何引用出现了错误。若要检查
BrokenReference
属性,请按照下列步骤操作:
启动
Access
2003。
打开一个
Access
数据库。
按
ALT+F11
打开
Visual
Basic
编辑器。
按
CTRL+G
组合键打开“立即”窗口。
在“立即”窗口中,键入以下命令,然后按
Enter
键:?Application.BrokenReference请注意,如果存在丢失的引用,Application
对象的
BrokenReference
属性将返回“True”。否则,BrokenReference
属性将返回“False”。
C. VBA 连接Access数据库查询
你数据对不上是少数据吗?你的语句中用了like,但没有通配符,试试修改
sqls = "SELECT * FROM NDYX where FIELD(0) like'*" & a & "*'" '定义SQL查询命令字符串"
D. EXCEL VBA 打开Access数据库文件
一、导入方法:
Sub 把Excel数据插入数据库中()
Dim conn As ADODB.Connection
Dim WN As String
Dim TableName As String
Dim sSql As String
Dim tStr As String
'数据库名,请自行修改,路径与当前工作簿在同一目录
WN = "进销存表.mdb"
'数据库的表名与当前工作表名一致
TableName = ActiveSheet.Name
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;" & _
"Extended Properties=Excel 8.0;" & _
"Data Source=" & ThisWorkbook.Path & "\" & ActiveWorkbook.Name
conn.Open
If conn.State = adStateOpen Then
sSql = "Insert Into [;DataBase=" & ActiveWorkbook.Path & "\" & WN & "]." & TableName & " Select * From [" & ActiveSheet.Name & "$]"
conn.Execute sSql
MsgBox "成功把数据插入到“" & TableName & "”中!", , "http://excelba.com"
conn.Close
End If
Set conn = Nothing
End Sub
二、EXCEL的使用技巧:
(1) 分数的输入
如果直接输入“1/5”,系统会将其变为“1月5日”,解决办法是:先输入“0”,然后输入空格,再输入分数“1/5”。
(2) 序列“001”的输入
如果直接输入“001”,系统会自动判断001为数据1,解决办法是:首先输入“'”(西文单引号),然后输入“001”。
(3) 日期的输入
如果要输入“4月5日”,直接输入“4/5”,再敲回车就行了。如果要输入当前日期,按一下“Ctrl+;”键。
(4) 填充条纹
如果想在工作簿中加入漂亮的横条纹,可以利用对齐方式中的填充功能。先在一单元格内填入“*”或“~”等符号,然后单击此单元格,向右拖动鼠标,选中横向若干单元格,单击“格式”菜单,选中“单元格”命令,在弹出的“单元格格式”菜单中,选择“对齐”选项卡,在水平对齐下拉列表中选择“填充”,单击“确定”按钮。
(5) 多张工作表中输入相同的内容
几个工作表中同一位置填入同一数据时,可以选中一张工作表,然后按住Ctrl键,再单击窗口左下角的Sheet1、Sheet2......来直接选择需要输入相同内容的多个工作表,接着在其中的任意一个工作表中输入这些相同的数据,此时这些数据会自动出现在选中的其它工作表之中。输入完毕之后,再次按下键盘上的Ctrl键,然后使用鼠标左键单击所选择的多个工作表,解除这些工作表的联系,否则在一张表单中输入的数据会接着出现在选中的其它工作表内。
(6) 不连续单元格填充同一数据
选中一个单元格,按住Ctrl键,用鼠标单击其他单元格,就将这些单元格全部都选中了。在编辑区中输入数据,然后按住Ctrl键,同时敲一下回车,在所有选中的单元格中都出现了这一数据。
(7) 在单元格中显示公式
如果工作表中的数据多数是由公式生成的,想要快速知道每个单元格中的公式形式,以便编辑修改,可以这样做:用鼠标左键单击“工具”菜单,选取“选项”命令,出现“选项”对话框,单击“视图”选项卡,接着设置“窗口选项”栏下的“公式”项有效,单击“确定”按钮(如图2)。这时每个单元格中的分工就显示出来了。如果想恢复公式计算结果的显示,就再设置“窗口选项”栏下的“公式”项失效即可。
(8) 利用Ctrl+*选取文本
如果一个工作表中有很多数据表格时,可以通过选定表格中某个单元格,然后按下Ctrl+*键可选定整个表格。Ctrl+*选定的区域为:根据选定单元格向四周辐射所涉及到的有数据单元格的最大区域。这样我们可以方便准确地选取数据表格,并能有效避免使用拖动鼠标方法选取较大单元格区域时屏幕的乱滚现象。
(9) 快速清除单元格的内容
如果要删除内容的单元格中的内容和它的格式和批注,就不能简单地应用选定该单元格,然后按Delete键的方法了。要彻底清除单元格,可用以下方法:选定想要清除的单元格或单元格范围;单击“编辑”菜单中“清除”项中的“全部”命令,这些单元格就恢复了本来面目。
E. 用VBA如何获取access数据库中字段的数据类型
1、打开相应的access数据库。
2、在左边的对象栏里单击模块,观察右边的窗口,如果里面有模块,可以双击打开。如果没有新建一个模块,然后双击打开。
3、粘贴以下代码并运行、观察立即窗口。
PrivateSubaaaa()
DimTableNameAsString,FieldNameAsString,iAsInteger
TableName="tb1"'表名tb1
FieldName="编号"'字段名编号
SelectCaseCurrentDb.TableDefs(TableName)(FieldName).Type
CasedbBoolean
Debug.Print"是/否"
CasedbByte
Debug.Print"数字(字节)"
CasedbInteger
Debug.Print"数字(整型)"
CasedbLong
If(CurrentDb.TableDefs(TableName)(FieldName).AttributesAnddbAutoIncrField)=dbAutoIncrFieldThen
Debug.Print"自动编号(长整型)"
Else
Debug.Print"数字(长整型)"
EndIf
CasedbSingle
Debug.Print"数字(单精度)"
CasedbDouble
Debug.Print"数字(双精度)"
CasedbDecimal
Debug.Print"数字(小数)"
CasedbCurrency
Debug.Print"货币"
CasedbDate
Debug.Print"日期/时间"
CasedbText
Debug.Print"文本"
CasedbMemo
If(CurrentDb.TableDefs(TableName)(FieldName).AttributesAnddbHyperlinkField)=dbHyperlinkFieldThen
Debug.Print"超链接"
Else
Debug.Print"备注"
EndIf
CasedbGUID
Debug.Print"自动编号(自动复制ID)"
EndSelect
EndSub
F. 利用VBA从Access数据库中查找数据
打开VBA编辑器的两种方式:
Excel → 开发工具 → Visual Basic:打开VBE后,点击插入,选择模块,就可以在该项目下新建一个空白模块。
Excel → 开发工具 → 插入 → 控件 → 右键控件 → 指定宏:可以直接将宏绑定到控件上,然后进行编辑。
进行编写代码前的准备工作:
Visual Basic → 工具 → 引用:引用 Microsoft ActiveX Data Objects 2.x Library,否则运行代码会报“用户定义类型未定义”提示。
Excel中用VBA根据输入的日期从Access数据库中提取相应的数据并插入到Excel表中:
G. VBA查询access数据库
库名与表名,你自己改下啊!
一、连接2003
SubAC()
DimcnnAsNewConnection
DimrsAsNewRecordset
DimsqlAsString
DimqxAsString
qx="金牛"
cnn.Open"Provider=Microsoft.Jet.Oledb.4.0;dataSource="&ThisWorkbook.Path&"数据库.mdb"
sql="select*from[宏站]"
rs.Opensql,cnn
'复制字段名
Fori=1Tors.Fields.Count
Cells(1,i)=rs.Fields(i-1).Name
Nexti
'复制全部数据
Range("A2").CopyFromRecordsetrs
rs.Close
cnn.Close
EndSub
二、连接2007
SubAC()
DimcnnAsNewConnection
DimrsAsNewRecordset
DimsqlAsString
DimqxAsString
qx="金牛"
cnn.Open"Provider=Microsoft.Ace.OleDB.12.0;dataSource="&ThisWorkbook.Path&"数据库.accdb"
sql="select*from[宏站]'"
rs.Opensql,cnn
[a1].CopyFromRecordsetrs
EndSub
记得引用:
H. 如何用excel vba访问加密的access
可以,前提是你要知道数据库密码。
Sub open_database()
Set wsMainWs = DBEngine(0)
Set mydBase = wsMainWs.OpenDatabase(ThisWorkbook.Path & "\UsersBase.mdb", True, False, "ms access;pwd=123456")
End Sub
上述过程中假设你的数据库名为 UsersBase.mdb(access格式),放在与你当前打开的工作薄文件同目录下。123456 是你打开数据库的密码。
I. access2007怎么设置打开数据库后进行操作的VBA代码
解析如下:
Public Function KillMe() As Boolean
Dim mPath As String
On Error GoTo InIDE
如果发生错误,则跳转到inIDE。但由于inIDE后紧跟End Function,也就是说发生错误结束函 数。
mPath = CurrentProject.Name
将您正在操作的对象(即您的access数据库)的名称赋予变量mPath。实际上这句有些多余,因为下面几句随即将路径赋予了mPath。
If Right$(CurrentProject.Path, 1) = "\" Then
mPath = CurrentProject.Path
Else
mPath = CurrentProject.Path & "\"
End If
上面的假如语块,保证路径后面有反斜杠(即\)。
Open mPath & "Demon.bat" For Output As #1
以顺序输出(Output表示顺序输出,如果再有文件写入,将写在该文件内容之后)的方法将……\Demon.bat 文件输出到文件号为1的缓存区;如果不存在这个文件,则在这个路径下新建一个Demon.bat 文件,并且也输出到文件号为1的缓存区,当然此时文件内容为空。我感觉电脑里本身不存在……\Demon.bat这个批处理文件(后缀bat市批处理文件,它是一个可执行的文件),否则它直接给出绝对路径而不会用mPath变量了。
Print #1, ":Repeat" & vbCrLf & _
"del """ & mPath & CurrentProject.Name & "" & vbCrLf & "" _
; "if exist """ & mPath & CurrentProject.Name & """ goto Repeat " & vbCrLf & _
"del %0"
Print #1, 内容,就是将后面的内容写入文件号1的缓存区,实际上就是将内容写入Demon.bat这个文件。具体内容是:(vbCrLf表示回车换行)
【 :Repeat
del (路径)\您的access数据库
if exist"(路径)\您的access数据库" goto Repeat
del %0】
具体的批处理代码意思好久没用了有些模糊了,上面【】内基本意思是:删除你的access数据库,如果数据库一直存在没被删除,则返回:Repeat语句,继续删除,直至删除。
Close #1
关闭文件号1的缓存区,实际上就是保存了Demon.bat内容。
Shell mPath & "Demon.bat", vbHide
Shell表示 以异步方式(我们平时代码是一步一步执行的,这行代码没执行完是不会执行下一行代码的,但异步方式,你执行……\Demon.bat的代码,其后的代码继续执行,结合你前面的代码内容,就是一方面执行Demon.bat代码,同时继续执行Application.Quit acQuitSaveNone这句代码)执行……\Demon.bat文件,并且以隐藏状态方式执行(你看不到Demon.bat文件的DOS窗口)。现在我们就会明白为什么【】里要用到if exist……这句了?由于两段代码同时运行,你的access数据库有可能更迟运行完(就是还没卸载完),一个打开的程序(没卸载完就还处于打开状态)是不能被删除的,通过goto Repeat反复等待,一旦卸载完即删除。
InIDE:
End Function
纵观整个代码,总体的意思是:当你关闭你的access数据库时,整个数据库莫名其妙悄无声息的被删除了。你看看函数的名称Killme(即"删除本身"),Kill me杀死自己,体现了编程者的用意。再看看Demon.bat中的Demon的意思,妖魔、鬼怪、灵异,如果用户不知情,程序莫名其妙没了,还以为发生了灵异事件了。
它的意义是:
1、消极意义:把这些代码植入别人的程序,那就坑爹了。
2、积极意义:(1)如果某些文字、图片等等你只想让别人看一次,你可以植入这些代码,这样别人在access程序里看一次后,就不可能再看第二次了,电影里常常有这些画面。(2)可以在这个代码内加上触发内容,比如在你的例子中加入假如:
Private Sub Form_Unload(Cancel As Integer)
if date()=#2013-10-01# then
KillMe
end if
Application.Quit acQuitSaveNone
End Sub
这样,当系统日期到达2103年10月1日是就会发生自行删除事件了,假如你有一个花了大心思做的access软件,让别人试用,到10月1日前要他付费,如果不付费你不用对他的数据库操作,它就会自行删除了,保证了版权。