当前位置:首页 » 编程语言 » sql和excel的宏
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql和excel的宏

发布时间: 2023-08-19 00:03:12

⑴ 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


试下