⑴ excel 宏使用sql语句
1.在宏编辑界面中进行SQL数据查询以及生成报表的代码如下:
Sub Static()
Dim objNewWorkbook As Workbook '定义一个Workbook对象
Set objNewWorkbook = Workbooks.Add(ThisWorkbook.Path & "\模板.xlt") '使用模板文件新建一个EXCEL报表生成文件
Set objConnection = CreateObject("ADODB.Connection") '创建一个ADO连接
objConnection.Open "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties='Excel 8.0;Hdr=yes;Imex=1';Data Source=" & ThisWorkbook.FullName '设置连接字符串
strCommand = "select 施工人, count(*) as 拆电话 from [" & Sheet1.Name & "$] where 施工动作 = '拆' and 专业类型 = '电话' group by 施工人" '查询表单一中的数据源进行统计
?objNewWorkbook.Sheets(1).Range("A3").CopyFromRecordset objConnection.Execute(strCommand)
2.将查询统计结果输出到目的报表文件的表单1的从A3开始的区域中
3.下面代码是调用EXCEL的排序方式进行汉字排序,这里SQL语句中的排序对于汉字排序与期望结果不同
4.使用EXCEL中的排序方法是根据EXCEL版本不同调用有所区别
Select Case Application.Version
Case "11.0":
objNewWorkbook.Sheets(1).Range("A3:M" & CStr(intSumRow - 1)).Sort Key1:=objNewWorkbook.Sheets(1).Range("A3"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
Case "12.0":
objNewWorkbook.Sheets(1).Sort.SortFields.Clear
objNewWorkbook.Sheets(1).Sort.SortFields.Add Key:=Range("A3:A" & CStr(intSumRow - 1)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With objNewWorkbook.Sheets(1).Sort
.SetRange Range("A2:M" & CStr(intSumRow - 1))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Case Else
End Select
objConnection.Close
End Sub
⑵ EXCEL中的VBA SQL查询与数组的运用。
ERP没有定义成熟或非成熟只是原本设计时没有考虑而已,你不防在SQL里加个字段是定义这个的,ERP界面不能对这个字段的修改你就用excel里面记录完后更新到SQL里面,excel表只当成是修改那个字段内容的工具,只有当产品更新时才需要用excel表了,查询就直接用sql。
⑶ vba,sql与excel的关系
1,VBA (Visual Basic for Applications)是Visual Basic的一种宏语言,主要能用来扩展Windows的应用程序的功能,特别是Microsoft Office软件,在word、powerpoint、excel里面都可以用。
2,sql全称是“结构化查询语言(Structured Query Language)”,是用于访问数据库的语言,比如:MS SQL Server、Oracle、MySQL、foxpro,Access对sql也有一定支持,但不够全,SQL与excel关系不大
3、excel就是微软office套件里面专门用于表格、统计、分析处理的软件了
⑷ 在Excel里用宏实现自动生成sql语句的问题
分类: 电脑/网络猜悔 >> 程序设计 >>毁核 其他编程语言
问题描述:
请看我的Bolg里有图片描述,一目了然.blog.sina/u/***********即点击按钮生成5条insert语句,用分号阁开.
知道思路的说下思路,知纤兆掘道细节的最好说详细点啦,先谢谢!
解析:
Const MAX_NUM_ROW = 5000
Const PATH_OUTPUT_ROW = 1
Const PATH_OUTPUT_COL = 2
Const FILE_OUTPUT_ROW = 2
Const FILE_OUTPUT_COL = 2
'Template Info
Const ENTRP_CDE_COL = 1
Const RPT_TMPLT_ID_COL = 2
Const RPT_FMT_TYP_COL = 3
Const FNCTN_ID_COL = 4
Const TMPLT_PATH_COL = 5
Const BNDL_PATH_COL = 6
Const RPT_NAM_GEN_CLASS_COL = 7
Const RPT_DATASOURCE_CLASS_COL = 8
Const ACK_RPT_TMPLT_ID_COL = 9
Const REC_VER_NUM_COL = 10
Const INIT_TIME_COL = 11
Const LAST_UPD_TIME_COL = 12
Const LAST_UPD_BY_COL = 13
Const START_ROW = 5
Private Type Tmplt
ENTRP_CDE As String
RPT_TMPLT_ID As String
RPT_FMT_TYP As String
FNCTN_ID As String
TMPLT_PATH As String
BNDL_PATH As String
RPT_NAM_GEN_CLASS As String
RPT_DATASOURCE_CLASS As String
ACK_RPT_TMPLT_ID As String
REC_VER_NUM As String
INIT_TIME As String
LAST_UPD_TIME As String
LAST_UPD_BY As String
End Type
Dim noOfTmplts As Integer
Dim TmpltArray(MAX_NUM_ROW) As Tmplt
Private Sub CommandButton1_Click()
generateSQL
End Sub
Private Sub generateSQL()
makedir
initData
writeToFile
End Sub
Private Sub makedir()
On Error Resume Next
'Make Directory
MkDir Sheet18.Cells(PATH_OUTPUT_ROW, PATH_OUTPUT_COL)
End Sub
Private Sub initData()
Erase TmpltArray
'Erase TmpltRoleArray
'noOfUserRoles = 0
noOfTmplts = 0
Dim j As Integer
'Lookup all fields
For j = START_ROW To MAX_NUM_ROW
If Sheet18.Cells(j, RPT_TMPLT_ID_COL) = "" Then
Exit For
End If
'Set Template
TmpltArray(noOfTmplts).ENTRP_CDE = Sheet18.Cells(j, ENTRP_CDE_COL)
TmpltArray(noOfTmplts).RPT_TMPLT_ID = Sheet18.Cells(j, RPT_TMPLT_ID_COL)
TmpltArray(noOfTmplts).RPT_FMT_TYP = Sheet18.Cells(j, RPT_FMT_TYP_COL)
TmpltArray(noOfTmplts).FNCTN_ID = Sheet18.Cells(j, FNCTN_ID_COL)
TmpltArray(noOfTmplts).TMPLT_PATH = Sheet18.Cells(j, TMPLT_PATH_COL)
TmpltArray(noOfTmplts).BNDL_PATH = Sheet18.Cells(j, BNDL_PATH_COL)
TmpltArray(noOfTmplts).RPT_NAM_GEN_CLASS = Sheet18.Cells(j, RPT_NAM_GEN_CLASS_COL)
TmpltArray(noOfTmplts).RPT_DATASOURCE_CLASS = Sheet18.Cells(j, RPT_DATASOURCE_CLASS_COL)
TmpltArray(noOfTmplts).ACK_RPT_TMPLT_ID = Sheet18.Cells(j, ACK_RPT_TMPLT_ID_COL)
TmpltArray(noOfTmplts).REC_VER_NUM = Sheet18.Cells(j, REC_VER_NUM_COL)
TmpltArray(noOfTmplts).INIT_TIME = Sheet18.Cells(j, INIT_TIME_COL)
TmpltArray(noOfTmplts).LAST_UPD_TIME = Sheet18.Cells(j, LAST_UPD_TIME_COL)
TmpltArray(noOfTmplts).LAST_UPD_BY = Sheet18.Cells(j, LAST_UPD_BY_COL)
noOfTmplts = noOfTmplts + 1
Next
End Sub
Private Sub writeToFile()
Dim lvOutputPath As String
lvOutputPath = Sheet18.Cells(PATH_OUTPUT_ROW, PATH_OUTPUT_COL) & "\" & Sheet18.Cells(FILE_OUTPUT_ROW, FILE_OUTPUT_COL)
If lvOutputPath = "" Then
MsgBox "File Output Path Missing!"
Exit Sub
End If
fileNum = FreeFile
' Open Output Path
Open lvOutputPath For Output As fileNum
Dim lvUserSql As String
For j = 0 To noOfTmplts - 1
lvUserSql = "INSERT INTO RS_RPT_TMPLT(ENTRP_CDE,RPT_TMPLT_ID,RPT_FMT_TYP,FNCTN_ID,TMPLT_PATH,BNDL_PATH,RPT_NAM_GEN_CLASS,RPT_DATASOURCE_CLASS,ACK_RPT_TMPLT_ID,REC_VER_NUM,INIT_TIME,LAST_UPD_TIME,LAST_UPD_BY) " & _
"values('TF','" & TmpltArray(j).RPT_TMPLT_ID & "','" & TmpltArray(j).RPT_FMT_TYP & "','" & TmpltArray(j).FNCTN_ID & "','" & TmpltArray(j).TMPLT_PATH & "','" & TmpltArray(j).BNDL_PATH & "','" & _
TmpltArray(j).RPT_NAM_GEN_CLASS & "','" & TmpltArray(j).RPT_DATASOURCE_CLASS & "','" & TmpltArray(j).ACK_RPT_TMPLT_ID & "'," & TmpltArray(j).REC_VER_NUM & "," & TmpltArray(j).INIT_TIME & "," & TmpltArray(j).LAST_UPD_TIME & ",'" & TmpltArray(j).LAST_UPD_BY & "');"
Print #fileNum, lvUserSql
Next
Close fileNum
MsgBox "Finished"
Exit Sub
Err_Open_File:
Close lvFileNum
If Err.Number = 76 Then
'Path Not Found
MsgBox Err.Description
Exit Sub
Else
MsgBox Err.Description
Exit Sub
End If
End Sub
⑸ 怎么样才能将EXCEL中的数据用宏导入到SQL库中
你用的什么数据库?
我以Mysql为例说下:
1.用Excel将选中的数据快儿拷贝到一个TXT文本文件中(记得把后面的空格消掉。。),假如存到“D:\data.txt”这个位置里。
2.根据要导入的数据快儿建立MySql数据库和表,然后进入命令提示符里使用命令
load
data
local
infile
'D:\data.txt'
into
table
exceltomysql
fields
terminated
by
'\t';
进行导入操作(table是你建立的表名字)
如果提示找不到D:\data.txt
你就改成D:\\data.txt
⑹ 在excel中用vba实现与sql数据库的数据比较
先建立一个sheet通过数据页签中自其它来源,将数据库中的资料导郑橘樱入。然后再建立一个sheet通过数据页签中的现有伍兆连接,然后通过sql语句就可以比较那两个sheet中的内喊丛容了。以后直接点击刷新数据就可以了
⑺ 我想用Excel宏编写代码来对SQL数据库进行连接和操作,请教详细的步骤或方法,重分!!!!一定加分
参考网上资料:
http://www.access-cn.com/offspace/html/32/n-532.html
一、加载ODBC宏(OFFICE2000光盘有提供)后您就可以使用该函数了。语法及示例详参《OFFICE2000帮助文档》,全篇如下:Office中国社区门户4q_Sz y0[ Z!g
连接到外部数据源并运行工作表中的查询。然后,函数 SQL.REQUEST 以数组形式返回结果,而不必运行宏。如果该函数不存在,就必须安装 Microsoft Excel 的 QDBC 加载宏(XLODBC.XLA)。Office中国社区门户(m1n:jj(alT3^
语法Office中国社区门户}}o%p&I"ev"b
SQL.REQUEST(connection_string,output_ref,driver_prompt,query_text,col_names_logical)
.I3ow{0FKh,]*S'A5V:Eq0
Connection_string 提供信息,如数据源名称、用户标识和口令等。这些信息对于连接数据源的驱动程序是必需的,同时它们必须满足驱动程序的格式要求。下表给出用于 3 个不同驱动程序的 3 个连接串的示例。
#RT"~6e7h&? M!`'J0
oT f'j%o)M0 驱动器 连接串
dBASE DSN=NWind;PWD=test
SQL Server DSN=MyServer;UID=dbayer; PWD=123;Database=Pubs
ORACLE DNS=My Oracle Data Source;DBQ=MYSER VER;UID=JohnS;PWD=Sesame
Office中国社区门户r;}??X7||
7V2\O e&{S I;mIT8N0
在试图连接到数据源之前,必须定义在 connection_string 中使用的数据源名称(DSN)。Office中国社区门户p.D9{8]k }
Z0k0X/@ Q6|#rAP~0 可以以数组或字符串的形式输入 connection_string。但如果 connection_string 超过 250 个字符,必须按数组的形式输入。
4_0M+Hb&At3^0Office中国社区门户b-Q0iI9p)Y
如果函数 SQL.REQUEST 不能使用 connection_string 访问数据源,则返回错误值 #N/A。 Output_ref 对用于存放完整的连接字符串的单元格的引用。如果在工作表中输入函数 SQL.REQUEST,可以忽略 output_ref。
当需要函数 SQL.REQUEST 返回完整的连接串时,可以使用 output_ref(此种情况下,必须在宏表中输入函数 SQL.REQUEST)。Office中国社区门户#^;a#C/b9r~&d
Office中国社区门户K$M'FCJXb
如果省略 output_ref,函数 SQL.REQUEST 不能返回完整的连接串。 Driver_prompt 指定驱动程序对话框的显示时机以及可用的选项。可以使用下表中所描述的数字来描述 driver_prompt。如果省略 driver_prompt,函数 SQL.REQUEST 默认为 2 。
2cX!c0~e5Rl&RT6U0 Office中国社区门户X9d7G _n
Driver_prompt 说明
1 一直显示驱动程序对话框。
2 只有在连接串和数据源说明提供的信息不够充分,以致不能完成连接时,才显示驱动程序对话框。所有对话框选项都可使用。
3 只有在连接串和数据源说明提供的信息不够充分,以致不能完成连接时,才显示驱动程序对话框。如果未指明对话框选项是必需的,这些选项是暗的,不能使用。
4 不显示对话框。如果连接不成功,则返回错误值。
{ |1@Pi)L0Office中国社区门户8_E8q4L9x]6X4J"_/C
Query_text 需要在数据源中执行的 SQL 语句。
如果函数 SQL.REQUEST 不能在指定的数据源中执行 query_text,则返回错误值 #N/A 。Office中国社区门户*`%S Hr+C7e6A1h3f
Office中国社区门户Eg.\*_H)yB
可以将引用连接到 query_text 上来更新查询。在下面的例子中,每次 $A$3 改变,函数 SQL.REQUEST 使用新的数值来更新查询。
"SELECT Name FROM Customers WHERE Balance > "&$A$3&"".
Microsoft Excel 将串长度限制在 255 个字符内。如果 query_text 超过此长度,请在垂直单元格区域中输入查询并使用整个区域作为 query_text。所有单元格的值连接在一起,形成完整的 SQL 语句。 Office中国社区门户 S,m/u(k]
Column_names_logical 指明是否将列名作为结果的第一行返回。如果要将列名作为结果的第一行返回,请将该参数设置为 TRUE。如果不需要将列名返回,则用 FALSE。如果省略 column_names_logical,则函数 SQL.REQUEST 不返回列名。
/q#H@B#Y:ji_0
返回值
如果此函数完成了它的所有功能,则返回查询结果数组或受查询影响的行数。Office中国社区门户WRBy h&O@Pll
Office中国社区门户)z*WnpE1J'E$?.@
如果函数 SQL.REQUEST 不能使用 connection_string 访问数据源,则返回错误值 #N/A。
3u'sr+~9~/yFTfmS0说明
函数 SQL.REQUEST 可以以数组的形式输入。如果以数组形式输入函数 SQL.REQUEST,该函数将返回一个恰好填充选定区域的数组。Office中国社区门户 cq8Xq ]NS
Office中国社区门户(^T%b7@ ]y
如果单元格区域大于结果集,函数 SQL.REQUEST 向返回的数组添加空单元格,直至增加到所需要的大小。
;Y"X;FA,kW0
+Lu"l5@?0 如果结果集大于以数组形式选定的输入区域,函数 SQL.REQUEST 返回整个数组。Office中国社区门户]/y){ Q sIX
Office中国社区门户1c#ZY8`7n$YRp&x
函数 SQL.REQUEST 参数的次序与 Visual Basic for Application 中函数 SQLRequest 的参数次序不同。
Office中国社区门户"C!pK p9O6BnlPj
示例
6c!s3F^-TzT_0
假设需要对名为 DBASE4 的 DBASE 数据库进行查询。如果在单元格中输入下列公式,将会返回查询结果数组,其中第一行是列名:Office中国社区门户B9]4[RqK_wc
SQL.REQUEST("DSN=NWind;DBQ=c:\msquery;FIL=dBASE4", c15, 2,
"Select Custmr_ID, Due_Date from Orders WHERE order_Amt>100", TRUE)二、用“数据”菜单上的“获取外部数据”-“新建数据库查询”向导获取数据库数据。用该向导取得数据后,以后该工作表的数据以后会随数据动态更新(在不移动数据源文件的前提下)。注意:请仔细设置外部数据表的属性,会有更多收获。
以上答案供参考
⑻ 用excel宏,连接sql数据库导出表字段数据到指定列,且加上条件判断后填充单元格
SubMacro2()
DimiAsInteger
DimcnAsNewADODB.Connection
DimrsAsNewADODB.Recordset
DimstrCn,strSQLAsString
strCn="Provider=sqloledb;Server=XX;Database=XX;Uid=sa;Pwd=XX;"
strSQL="SELECTitem_noFROMt_bd_item_infowhereitem_clsno='LB'"
cn.OpenstrCn
rs.OpenstrSQL,cn
Worksheets("sheet1").Unprotect
DoWhileNotrs.EOF
fori=1to[a65536].end(3).row
ifrange("a"&i)<>""andrange("b"&i)=""andrange("c"&i)=""then
range("c"&i)=rs("item_no")
gotoabc
else
endif
next
abc:
rs.MoveNext
Loop
rs.Close
cn.Close
EndSub
试下