二、兩個接口?
1.數據錄入接口:前臺功能使用該接口實現“錄入、保存、查詢、清除、修改”;
2.數據存儲界面:後臺保存數據;輸入接口:
第三,實現方法是1。保存函數Sub Save()'?
保存數據馬可,小猴出品,時間2013-9-5 '?
Dimr1,R2,R3作為帶表的範圍(“數據存儲”)?
設置r2 =。範圍(" a2 ",[a100000]。End(xlUp))結束於?
帶表(“數據錄入”)?設置r1 =。Range("c4:e4,d6:l39 ")?
If isempty(。range ("C4 "))或isempty(。range ("E4")) then '或isempty(。range ("B7: b41 "))新增部門不為空。不成功的MsgBox("編碼和名稱為空,不能保存!") ?不然呢?
設置r3 = r2。查找(。Cells(4,3),,,1)如果不是r3那就什麽都不是?
MsgBox("該代碼已經存在,無法保存。如需修改此信息,請點擊“修改前查詢”)
不然呢?
工作表(“數據存儲”)。行(“2: 35”)。InsertShift: = xldown?
。範圍(" c6:l39 ")。復制?復制數據錄入表體信息?
工作表(“數據存儲”)。範圍(“C2: L2”)。paste special paste:= xlpastevalues?。範圍(“c4”)。復制?復制數據輸入代碼?
工作表(“數據存儲”)。範圍(" A2: A35 ")。paste special paste:= xlpastevalues?。範圍(“e4”)。復制?復制數據條目的名稱?
工作表(“數據存儲”)。範圍(“B2: B35”)。paste special paste:= xlpastevalues?r1。ClearContents?保存數據後,清空錄入界面?
。範圍(“c4”)。如果選擇結束?End If End With End Sub
2.查詢函數Sub Query()'?
查詢篩選宏,小猴出品,時間2013-9-5 ' '?
Dimerow作為整數dim r1,R2作為帶工作表的範圍(“數據輸入”)?設置r1 =。Range("d6:l39 ")?設置r2 =。Range("a6:b39 ")?
Erow = Sheets(“數據存儲”)。[a100000]。結束(xlUp)。排
r1。清除內容
對於中的每個ce。[a2:x2]?
如果ce & lt& gt”“那就ce吧。Value = " * " & ampce & amp"*" ? '添加通配符*實現模糊查詢。
下壹個?
If IsEmpty(。Range("c4 "))或IsEmpty(。Range("e4 "))然後
或者IsEmpty(。Range("b7:b41 "))添加部門不為空,失敗。
MsgBox("編碼和名稱為空,無法查詢!") ?不然呢?
工作表(“數據存儲”)。range(" a 1:l " &;Erow)。AdvancedFilter操作:=xlFilterCopy,CriteriaRange:= _。[c3:e4],CopyToRange:=。[A5:l5],唯壹:=假?
r2。邊框(xlDiagonalDown)。LineStyle = xlNone r2。邊框(xlDiagonalUp)。LineStyle = xlNone
r2。邊框(xlEdgeLeft)。LineStyle = xlNone
r2。邊框(xlEdgeTop)。LineStyle = xlNone
r2。邊框(xlEdgeBottom)。LineStyle = xlNone
r2。邊框(xlEdgeRight)。LineStyle = xlNone r2。邊框(xlInsideVertical)。LineStyle = xlNone
r2。邊框(xlInsideHorizontal)。LineStyle = xlNone
r2。numberformatlocial = ";;;"
對於中的每個ce。[a2:x2]?
如果ce & lt& gt”“那就ce吧。Value = Mid(ce,2,Len(ce) - 2)?'取消“*”通配符?
下壹個?End If End With End Sub
3.Update Sub Update()'?
更新宏,小猴出品,時間2013-9-5?
Dim arr,d作賓語?
Dim r As範圍?
Dim lr & amp,我& amp,j%?
用Sheets ("data entry ")'查詢來修改工作表數據區並將其寫入數組arr?
arr =。範圍(" A7 :D " & amp;。範圍(" A65536 ")。結束(xlUp)。排)?
arr =。Range("a6:l39 ")?
設r =。Range("d6:l39 ")?
以...結尾。
Set d = createobject("腳本。dictionary ")'定義了壹個字典對象?
For I = 1來逐行綁定(arr)'嗎?
If Len(arr(i,2))& lt;& gt0然後‘排出‘總’行,也就是名字服務數據?
如果不存在d.exists(arr(i,1)& amp;arr(i,2)和amparr(i,3))然後d(arr(i,1)& amp;arr(i,2)和amparr(i,3)) = arr(i,4)& amp;Chr(9)和amparr(i,5) _?
& ampChr(9)和amparr(i,6)和ampChr(9)和amparr(i,7)和ampChr(9)和amparr(i,8)和ampChr(9)和amparr(i,9)和ampChr(9)和amparr(i,10)及ampChr(9)和amparr(i,11)& amp;Chr(9)和amparr(i,12)
最後壹句:如果編碼和名稱連接字符串的字典不存在(第壹次出現,這裏的判斷可能是多余的),則將該字符串添加到字典鍵值中,後續的相關屬性字段通過tab連接添加到字典條目中。
結束如果?下壹個?
?帶表(“數據存儲”)?
?Lr =。範圍(" a100000 ")。結束(xlup)。row '數據存儲工作表數據行?
。範圍(“C2 :D”& amp;LR)。特殊單元格(xlcelltypeconstants,23)。“清除內容”清除沒有公式單元格的C列和D列的值?
arr =。range(" A2:l " & amp;Lr)'數據存儲工作表數據區寫數組arr?
For I = 1來逐行綁定(arr)'嗎?
如果d .存在(arr(i,1)& amp;arr(i,2)和ampArr (I,3))如果編碼和名稱連接字符串的字典存在,它存在於Sheet2中。
對於j = 4到12 'D,e,f...壹列壹列的?
如果不是細胞(I,j)。HasFormula Then Cells(i,j) = Split(d(arr(i,1)amp;arr(i,2)),Chr(9))(j - 3)
如果該單元格不包含公式,則將對應於Sheet2的數據寫入該單元格。
。細胞(我?+?1,?j)?=?Split(d(arr(i,1)?& amp?arr(我,?2)?& amp?arr(我,?3)),?Chr(9))(j?-?4)?
下壹個?
結束?如果?
下壹個?
結束?用什麽?
r.ClearContents?
床單(“
數據輸入
").細胞(4,?3).選擇?
MsgBox?("
數據已更新。要查看更新內容,請點擊按鈕進行查詢”)。