這個**的主要功能是:根據輸入的關鍵字找到資料庫中,正確的公司名,生成乙個下拉列表,再根據正確的公司名,找到對應的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也可以用於在建構函式中呼叫其他建構函式 注意 只能定義在建構函式的第一行,因為初始化...