當前位置:首頁 » 編程語言 » 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


試下