Excel VBA高階程式設計 關鍵字查詢資料庫

2021-09-24 21:14:39 字數 2509 閱讀 9291

這個**的主要功能是:根據輸入的關鍵字找到資料庫中,正確的公司名,生成乙個下拉列表,再根據正確的公司名,找到對應的no生成下拉列表

本工作薄實現的功能:

1、根據關鍵字模糊查詢

2、自動講搜尋內容生成下拉列表

3、在選中後自動提取出id資訊

附件**:

private sub worksheet_change(byval target as range)

dim wherestr$, sql$, conn, mr&, j%, k%, l%, n&, z

dim i, m, com, x as long, w1 as string

dim arr, t as long

dim d1, d2 as object

set d1 = createobject("scripting.dictionary")

set d2 = createobject("scripting.dictionary")

j = target.row

on error resume next

'根據關鍵字搜尋匹配資料,寫入到sheet3

if target.count = 1 and not intersect(range("k2:l65536"), target) is nothing then

wherestr = wherestr & iif(cells(j, 12) = "", "", " and [no] like '%" & cells(j, 12) & "%'")

wherestr = wherestr & iif(cells(j, 11) = "", "", " and [company] like '%" & cells(j, 11) & "%'")

mr = sheet3.cells(rows.count, 1).end(xlup).row

if mr > 2 then sheet3.range("a1:g" & mr).clear

if wherestr <> "" then

set conn = createobject("adodb.connection")

conn.open "provider=microsoft.ace.oledb.12.0;extended properties='excel 12.0;hdr=yes';data source=" & thisworkbook.fullname

sql = "select * from [元資料$d1:f] where" & mid(wherestr, 5)

[sheet3!a1].copyfromrecordset conn.execute(sql)

conn.close

set conn = nothing

end if

end if

'根據sheet3中的資料,生成資料字典

com = sheet3.range("b2").currentregion

for m = 2 to ubound(com)

if d1(com(m, 2)) = "" then

d1(com(m, 2)) = com(m, 3)

d2(com(m, 2)) = com(m, 1)

else

d1(com(m, 2)) = d1(com(m, 2)) & "," & com(m, 3)

end if

next m

'生成下拉列表

with target.validation

if not intersect(target, [j2:j65536]) is nothing then '觸發公司名單元格生成下拉列表

.delete

if not target.value <> "" then

.add type:=xlvalidatelist, formula1:=join(d1.keys, ",")

end if

target.offset(, -1).value = d2(target.value)

elseif not intersect(target, [h2:h65536]) is nothing and target.offset(, 2) <> "" then '觸發no單元生成下拉列表

.delete

if not target.value <> "" then

.add type:=xlvalidatelist, formula1:=d1(target.offset(, 2).value)

end if

end if

end with

dic.removeall

end sub

程式設計 關鍵字解釋

一 volatile 推薦乙個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用儲存在暫存器裡的備份。下面是volatile變數的幾個例子 1 並行裝置的硬體暫存器...

new關鍵字 this關鍵字 base關鍵字

使用new,所做的三件事 1.類是引用物件,引用物件是在堆中開闢空間 在堆中開闢空間 2.在開闢的堆空間中建立物件 3.呼叫物件的構建函式 4.隱藏父類成員 子類的成員可以與隱藏從父類繼承的成員,類似於重寫。public new void sayhello this關鍵字的使用 1.代表當前類的物件...

this關鍵字 static關鍵字

1.當成員變數和區域性變數重名,可以用關鍵字this來區分 this 代表物件,代表那個物件呢?當前物件 this就是所在函式所屬物件的引用 簡單說 那個物件呼叫了this所在的函式,this就代表哪個物件 this也可以用於在建構函式中呼叫其他建構函式 注意 只能定義在建構函式的第一行,因為初始化...