標題:
不好意思 新手又來請教 資料比對問題 麻煩各位了
[打印本頁]
作者:
ffntldj
時間:
2011-7-19 22:37
標題:
vba 比對資料問題
不好意思 小弟這問題已經困擾很久 實在想不出來 所以上來求救 ,謝謝大家撥時間幫我看
有兩個excel檔,如附件
book1裡面的c sheet 是我想要建立一個button的地方,按下去之後能夠做以下動作
目的是希望能夠把book2 (b sheet) 裡面的資料 抓到book1的 (a sheet ),
也就是把顏色標出來的地方book2.b.sheet,COPY到book1.a.sheet
附檔的顏色是我後來加上去的,只是為了方便描述 ,
part_id 填完了往右邊儲存格shift一位 依此類推,
ope_no只需抓後三碼 前後需要固定用(),用,號隔開,每個數字都要有 ' '
內容已經簡化,實際上的table資料蠻多,不單只是兩筆, 我認為要用for迴圈 但還很嫩 不太熟 請教各位了
以上 感激不盡
[attach]7060[/attach]
作者:
ffntldj
時間:
2011-7-20 11:06
請問板大 不好意思 再請教一個問題 這樣的需求我可以參考書籍中的哪些function ? 謝謝
作者:
GBKEE
時間:
2011-7-20 11:44
回復
2#
ffntldj
特殊的需求 要自訂函數 你1 樓的需求 說的不清楚 book2 b欄 是遇到ope_no的下一列取3碼後的嗎?
a,d,e.f 如何來的
a 111
part_id 12345
ope_no ('333','444','555','777')
d 444
e 555
f 666
f 777
作者:
ffntldj
時間:
2011-7-20 13:37
板大你好~adef 只是我假設有其他的欄位已經在book1裡面,在book1中主要是去看ope_no 跟part_id 這兩個儲存格右手邊的資料(parit-id---->12345, ope_no ---> 333 444 555 777),這些資料是從book2裡面的b sheet來的,只是在book2 copy過來之後 在book1要做一些修改 ,ope_no 就是要變為 ('333','444','555','777')加上括弧,逗號和分號
partid 則是如果在book2裡面有一個以上的part_id出現時 ,在填入book1的時後,要變成 part id 12345 5678 (5678要填在12345旁邊那個儲存格)
不知道這樣有清楚嗎? 謝謝你 我也會自己在試著寫~
作者:
GBKEE
時間:
2011-7-20 14:20
回復
4#
ffntldj
還是不清楚 ,範例請不要隨便列舉
作者:
Hsieh
時間:
2011-7-20 14:34
回復
4#
ffntldj
就單純把book2的b工作表中part_id對應modify後3碼填入a工作表的第2、3列
Sub nn()
Set d = CreateObject("Scripting.Dictionary")
With Workbooks.Open("D:\book2.xls") '檔案路徑自行修改
With .Sheets("b")
For Each a In .Range(.[A1], .[A65536].End(xlUp))
If a = "part_id" Then mystr = a.Offset(, 1).Text
If a = "modify" Then
If d(mystr) = "" Then
d(mystr) = "'" & Right(a.Offset(, 1), 3) & "'"
Else
d(mystr) = d(mystr) & ",'" & Right(a.Offset(, 1), 3) & "'"
End If
End If
Next
End With
.Close
End With
With Sheets("a")
k = 2
For Each ky In d.keys
.Cells(2, k) = ky
.Cells(3, k) = "(" & d(ky) & ")"
k = k + 1
Next
End With
End Sub
複製代碼
作者:
ffntldj
時間:
2011-7-20 15:21
@超級版主 謝謝你 我在研究一下你的寫法
@版主 抱歉 我在描述清楚一點 謝謝
作者:
ffntldj
時間:
2011-7-20 19:09
謝謝兩位版主, code我已經看完了也看懂了,也自己試著做了一些修改 非常感謝
有兩個問題想請教
第一個問題就是 以下這段code為什麼沒有對應的end if? 是不需要嗎?
If a = "part_id" Then mystr = a.Offset(, 1).Text
第二個問題是
這個code主要是把part_id 可以跟 ope_no去做對應 ,如下表示
part_id y z
('356','456') ('556')
如果我想改成
part_id y z
('356','456','556')
應該是修改以下這一段code,試了一下午,可否再教我一下 感激不盡
If d(mystr) = "" Then
d(mystr) = "'" & Right(a.Offset(, 1), 3) & "'"
Else
d(mystr) = d(mystr) & ",'" & Right(a.Offset(, 1), 3) & "'"
End If
作者:
Hsieh
時間:
2011-7-20 20:55
本帖最後由 Hsieh 於 2011-7-20 20:58 編輯
回復
8#
ffntldj
問題1
IF陳述式的語法兩種
1.
If 判斷式 then 執行陳述式
2.
If 判斷式 then
執行TRUE陳述式
Else
執行False陳述式
End If
問題2
這樣你就不分part_id
只是把所有modify的號碼全寫入同一個儲存格嗎?
Sub nn()
With Workbooks.Open("D:\book2.xls") '檔案路徑自行修改
With .Sheets("b")
For Each a In .Range(.[A1], .[A65536].End(xlUp))
If a = "modify" Then
If mystr = "" Then
mystr = "'" & Right(a.Offset(, 1), 3) & "'"
Else
mystr = mystr & ",'" & Right(a.Offset(, 1), 3) & "'"
End If
End If
Next
End With
.Close
End With
With Sheets("a")
.Cells(3, 2) = "(" & mystr & ")"
End With
End Sub
複製代碼
作者:
ffntldj
時間:
2011-7-20 22:57
謝謝版主你熱心的回覆 真的很感謝
有問題想請教 上面這各code的mystr 不用定義嘛?? 不用用到Dictionary了?這樣寫是定義mystr是矩陣的意思嘛?
我應該是不分part id 把ope_no寫進去儲存格裡沒錯
但是part_id 是要分儲存格的 如下面 y z 這樣
part_id
y z
('356','456','556')
我會好好努力的 謝謝
作者:
ffntldj
時間:
2011-7-21 09:48
to 超級版主 下面的那個功能我寫出來了!! 感謝 那個mystr不用定義那個問題在麻煩你教我一下 謝謝
作者:
Hsieh
時間:
2011-7-21 12:22
回復
10#
ffntldj
抱歉!這是我的習慣不好
mystr未宣告,你可自己加進去
把mystr為字串
未宣告的變數,EXCEL會認為是Variant
會自己判斷應該屬於哪一種變數存在
你可由程式碼逐行中看出mystr的變化
就知道他是甚麼型態的變數了
作者:
ffntldj
時間:
2011-7-21 12:33
了解 謝謝你 目前已用這個架構去建立我想要的功能
另外跟你請問一個問題 如果我想要把輸入改成可以選擇檔案
是不是用application.getopenfilename
試了一下 在 With .Sheets("b") 會有問題
感激不盡
作者:
ffntldj
時間:
2011-7-21 12:35
回復
13#
ffntldj
抱歉沒說清楚 應是以下這段 改成選擇檔案
With Workbooks.Open '("D:\工程師送件範例.xls") '檔案路徑自行修改
作者:
Hsieh
時間:
2011-7-21 13:11
getopenfilename會得到?
workbooks.open括號中是否與你getopenfilename得到的相同?
了解各個指令的參數資料型態,應是你目前最需要清楚的觀念
請利用F8的逐行功能來檢查變數的變化
作者:
ffntldj
時間:
2011-7-22 00:29
本帖最後由 ffntldj 於 2011-7-22 23:18 編輯
回復
15#
Hsieh
我寫出來了~~~ 謝謝 程式碼稍後附上
如下
myfile = workbook.application.getopenfilename ("excel文件(*.xls),*.xls")
with workbooks.open(myfile)
就可以用滑鼠點檔案了
感謝版主~
作者:
ffntldj
時間:
2011-7-23 00:59
標題:
不好意思 新手又來請教 資料比對問題 麻煩各位了
本帖最後由 ffntldj 於 2011-7-23 01:26 編輯
不好意思 實在寫不出來 用了一堆if 跟for 實在好難 有問題想請教,
資料不只三筆 只列出三筆 (附圖如下)
1.如果想把 A sheet裡 mod part以下 action以上 (紅色字體 )裡的資料 填入A1 但是如果資料是重覆 ,則不重複表示 (如A1 sheet) 該怎麼做?
之前是用板大教的
Set d = CreateObject("Scripting.Dictionary")
If a = "Mod part" Then mystr = a.Offset(1,0).Text
但是如果遇到Mod part下面有很多筆 就不知道該怎麼寫了
2. 比對A sheet 和 C sheet裡面的資料,當A sheet裡的紅色跟藍色 , 跟B sheet的
partid欄位
跟
ope_no欄位
都能夠match的話,將對應到的資料放到 B1 sheet裡面 (如B1所示)
[attach]7113[/attach]
附件如下 再麻煩大家了 真是不好意思[attach]7114[/attach]
作者:
GBKEE
時間:
2011-7-23 06:45
本帖最後由 GBKEE 於 2011-7-23 09:23 編輯
回復
1#
ffntldj
比對A sheet 和 C sheet裡面的資料
附黨中沒有C sheet 可以更新嗎?
Sub 解答1Ex()
Dim Rng As Range, Ar, Msg As Boolean
Dim Word_In As String, Word_Out As String
Word_In = "Mod part" '進入字串
Word_Out = "ACTION" '離開字串
Set Rng = Sheets("A").[A1] '尋找字串的起始點
ReDim Ar(0) '重新宣告陣列的維數
Do
If Rng = Word_In Then Msg = True '是進入字串 邏輯值=True
If Rng = Word_Out Then Msg = False '是離開字串 邏輯值=False
If Msg = True And Rng <> Word_In Then '邏輯值=True 且字串不是"進入字串"
' Application.Match(Rng, Ar, 0) '在陣列比對不到同樣的字串 傳回錯誤值
If IsError(Application.Match(Rng, Ar, 0)) Then '傳回錯誤值
If Ar(UBound(Ar)) <> "" Then ReDim Preserve Ar(UBound(Ar) + 1)
'Preserve 保留陣列原有資料的關鍵字
Ar(UBound(Ar)) = Rng 'UBound(Ar) 陣列的最大維數
End If
End If
Set Rng = Rng.Offset(1) '設定 Rng=Rng的下一列
Loop Until Rng = "" '離開 DO 迴圈的條件是 Until(直到) Rng = ""
Sheets("A1").Rows(1) = "" '整列
Sheets("A1").[A1].Resize(1, UBound(Ar) + 1) = Ar 'Resize 儲存格擴充範圍(1列, 欄位:=UBound(Ar) + 1)
End Sub
複製代碼
Sub 解答2Ex()
Dim Rng(1 To 2) As Range, Ar, Msg As Boolean, R As Range
Dim Word_In As String, Word_Out As String, Word_Look As String
Word_In = "Mod part" '進入字串
Word_Out = "ACTION" '離開字串
Word_Look = "MODIFY"
Set Rng(1) = Sheets("A").[A1] '尋找字串的起始點
ReDim Ar(0) '重新宣告陣列的維數
Do
If UCase(Rng(1)) = UCase(Word_In) Then Msg = True '是進入字串 邏輯值=True
If UCase(Rng(1)) = UCase(Word_Out) Then Msg = False '是離開字串 邏輯值=False
If Msg = True And UCase(Rng(1)) <> UCase(Word_In) Then '邏輯值=True 且字串不是"進入字串"
Set Rng(2) = Sheets("a").Columns(1).Find(Word_Look, After:=Rng(1), lookat:=xlWhole, MatchCase:=False) '尋找最接近的 "MODIFY"
If IsError(Application.Match(Rng(1) & Rng(2).Offset(, 1), Ar, 0)) Then '比對不到 "PARTID&OPE_NO"字串 傳回錯誤值
If Ar(UBound(Ar)) <> "" Then ReDim Preserve Ar(UBound(Ar) + 1)
Ar(UBound(Ar)) = Rng(1) & Rng(2).Offset(, 1) 'UBound(Ar) 陣列的最大維數
End If
End If
Set Rng(1) = Rng(1).Offset(1) '設定 Rng(1)=Rng(1)的下一列
Loop Until Rng(1) = "" '離開 DO 迴圈的條件是 Until(直到) Rng(1) = ""
Set Rng(1) = Nothing '釋放變數
For Each R In Sheets("B").Range("a1").CurrentRegion.Rows 'R ->依序在Sheets("B")[A1延伸範圍的每一列
If Not IsError(Application.Match(R.Cells(1) & R.Cells(2), Ar, 0)) Then '陣列中比對到SHEETS("B") A欄&B欄 的字串
If Rng(1) Is Nothing Then Set Rng(1) = R Else Set Rng(1) = Union(Rng(1), R) '設定變數
End If
Next
With Sheets("B1")
.UsedRange.Clear '清除 Sheets("B1")的內容
Rng(1).Copy .[A1]
End With
End Sub
複製代碼
作者:
ffntldj
時間:
2011-7-23 12:55
比對A sheet 和
C sheet
裡面的資料,當A sheet裡的紅色跟藍色 , 跟B sheet的partid欄位跟ope_no欄位
此處打錯 應該是 比對A sheet 和 B sheet ,當A sheet裡的紅色跟藍色 , 跟B sheet的partid欄位跟ope_no欄位
抱歉 程式碼我研究一下
作者:
ffntldj
時間:
2011-7-25 20:31
版主你好
謝謝你的code 讓我獲益良多 很感謝你 code沒有問題 ,但有些地方我看不懂 google過了也還是不會
想直接跟你請教,謝謝
1. If IsError(Application.Match(Rng, Ar, 0)) 這句是"在陣列比對不到同樣的字串 傳回錯誤"
是說 如果ar裡面不是Mod part和ACTION就會傳回值然後往下走嘛?
2. If IsError(Application.Match(Rng(1) & Rng(2).Offset(, 1), Ar, 0)) Then
這邊的ope_no 是用Offset的方式去寫,今天再想一各問題 如果想用欄位名稱(ope_no)去認的話這邊該怎麼改寫?是不是用一個回圈去抓第一列的名字?
3.如果A sheet在比對 B sheet時候, 如果只要B sheet裡PART ID的第一碼到第N碼 (如TMD1213 ,TMD1214)當他等於 A Sheet裡面的值時 ,也要把它抓出來的話 該怎麼做? 這我真的就不會了~~
以上 謝謝
作者:
GBKEE
時間:
2011-7-26 10:37
回復
20#
ffntldj
1. If IsError(Application.Match(Rng, Ar, 0)) 這句是"在陣列比對不到同樣的字串 傳回錯誤" 是說
如果ar裡面不是Mod part和ACTION就會傳回值然後往下走嘛
?
A:
不是的
, 是 Rng 比對 Ar 陣列中(TMD12,TDD13,MDT143,MDT14.....) 到沒有重複的, 然後下面的程式碼 將Rng的值加入 Ar 陣列中
2. If IsError(Application.Match(Rng(1) & Rng(2).Offset(, 1), Ar, 0)) Then
這邊的ope_no 是用Offset的方式去寫,今天再想一各問題 如果想用欄位名稱(ope_no)去認的話這邊該怎麼改寫?是不是用一個回圈去抓第一列的名字?
A:不了解你的意思
3.如果A sheet在比對 B sheet時候, 如果只要B sheet裡PART ID的第一碼到第N碼 (如TMD1213 ,TMD1214)當他等於 A Sheet裡面的值時 ,也要把它抓出來的話 該怎麼做? 這我真的就不會了~~
修改一下,是這樣碼?
Sub 解答2Ex()
Dim Rng(1 To 2) As Range, Ar, Msg As Boolean, R As Range, N As String
Dim Word_In As String, Word_Out As String, Word_Look As String
Word_In = "Mod part" '進入字串
Word_Out = "ACTION" '離開字串
Word_Look = "MODIFY"
Set Rng(1) = Sheets("A").[A1] '尋找字串的起始點
ReDim Ar(0) '重新宣告陣列的維數
Do
If UCase(Rng(1)) = UCase(Word_In) Then Msg = True '是進入字串 邏輯值=True
If UCase(Rng(1)) = UCase(Word_Out) Then Msg = False '是離開字串 邏輯值=False
If Msg = True And UCase(Rng(1)) <> UCase(Word_In) Then '邏輯值=True 且字串不是"進入字串"
Set Rng(2) = Sheets("a").Columns(1).Find(Word_Look, After:=Rng(1), lookat:=xlWhole, MatchCase:=False) '尋找最接近的 "MODIFY"
If IsError(Application.Match(Rng(1) & Rng(2).Offset(, 1), Ar, 0)) Then '比對不到 "PARTID&OPE_NO"字串 傳回錯誤值
If Ar(UBound(Ar)) <> "" Then ReDim Preserve Ar(UBound(Ar) + 1)
Ar(UBound(Ar)) = Rng(1) & Rng(2).Offset(, 1) 'UBound(Ar) 陣列的最大維數
End If
End If
Set Rng(1) = Rng(1).Offset(1) '設定 Rng(1)=Rng(1)的下一列
Loop Until Rng(1) = "" '離開 DO 迴圈的條件是 Until(直到) Rng(1) = ""
Set Rng(1) = Nothing '釋放變數
For Each R In Sheets("B").Range("a1").CurrentRegion.Rows 'R ->依序在Sheets("B")[A1延伸範圍的每一列
N = Mid(R.Cells(1), 1, 4) '篩選準則: PART ID的第一碼到第 4 碼
'Filter(Ar, N, True) ->傳回陣列 包含基於指定篩選準則的一個字串陣列的子集
If UBound(Filter(Ar, N, True)) > -1 Then '-1 陣列中不是空的:有比對到) A欄 的字串
If Rng(1) Is Nothing Then Set Rng(1) = R Else Set Rng(1) = Union(Rng(1), R) '設定變數
End If
Next
With Sheets("B1")
.UsedRange.Clear '清除 Sheets("B1")的內容
Rng(1).Copy .[A1]
End With
End Sub
複製代碼
作者:
ffntldj
時間:
2011-7-26 23:46
你好 謝謝版主跟超級版主的大力幫忙 有這個網站對我來說實在是獲益良多~ 謝謝你們
小弟初學vba 很多東西不會 都是在這努力爬文的 很感謝有這地方
以上的code沒錯 錯的是我自己的觀念 謝謝你們的糾正
14.If IsError(Application.Match(Rng(1) & Rng(2).Offset(, 1), Ar, 0)) Then
這邊抓到的rng(2)是MODIFY 然後用shift去抓ope_no的值,我的意思是 如果不用offset 有什麼方式可以去認他的欄位名稱 ope_no ?
22.For Each R In Sheets("B").Range("a1").CurrentRegion.Rows 'R ->依序在Sheets("B")[A1延伸範圍的每一列
這應該是把b-sheet 一列一列的資料往下抓出來,如果我像上面一樣也是需要抓欄位名稱呢?
(就是當b-sheet part_id 跟 ope_no 都符合時,可以去抓到flow 跟flow1的名稱,然後把它copy到b1 sheet)
不知道這樣的描述看的懂嘛 謝謝版主
作者:
GBKEE
時間:
2011-7-27 09:11
回復
22#
ffntldj
Q1:
如果不用offset 有什麼方式可以去認他的欄位名稱 ope_no ?
A1:
請往看13行: Set Rng(2) = Sheets("a").Columns(1).Find(Word_Look, After:=Rng(1), lookat:=xlWhole, MatchCase:=False) '
尋找最接近的 "MODIFY"
ope_no 在 MODIFY的右邊一欄 當然是用 Rng(2).Offset(, 1) 來表示最簡便, 或是 Sheets("a").Range( "B" & Rng(2).Row) 也可以
Q2:
這應該是把b-sheet 一列一列的資料往下抓出來,
如果我像上面一樣也是需要抓欄位名稱呢?
(就是當
b-sheet part_id 跟 ope_no 都符合時
,可以去抓到flow 跟flow1的名稱,然後把它copy到b1 sheet)
A2:
VBA要抓資料的語法不止一個 ,如上 Sheets("a").Range( "B" & Rng(2).Row) 你可慢慢體會.
作者:
ffntldj
時間:
2011-8-1 22:42
回復
23#
GBKEE
不好意思 研究了一個禮拜 還是很痛苦 很多問題 再來請教~ 謝謝
1 如附檔 A SHEET,之前都沒有空白格開(現在有空白 所以不能用Do ,Loop Until Rng = "",我把它改寫成For each rng(1) in sheet("a").range(sheet(a).[A1],sheet(a)[A65536].End(xlup))
但現在遇到一個問題 之前ACTION 下方只會有一個MODIFY, 現在會有很多個,如果用 Set Rng(2) = Sheets("a").Columns(1).Find(Word_Look, After:=Rng(1), lookat:=xlWhole, MatchCase:=False) '尋找最接近的 "MODIFY"
只會抓的到第一個. 如果ACTION下方 只要是MODIFY SPEC的 我都要抓到 該怎麼做,如下範例
TMD101-E121--240.05
TMD102-E123--240.05
TMD103-E124--240.05
TMC102-E125--240.05
TMD101-E121--240.06
TMD102-E123--240.06
TMD103-E124--240.06
TMC102-E125--240.06
2 SHEET B 是資料庫裡的檔案,本來就有的 ,當a sheet抓出來之後(如上題),要去比對b sheet的資料(part_id 和ope_no欄位),如果確定資料符合就會寫入B1欄位(如B1),但是在B sheet裡面PARTID會有一些只有前六碼符合的資料(如綠色標記),也要將他視為資料符合 這邊的話 不知道怎麼改@@?
3 B1 Sheet的 item0~item3 是當check過a sheet 和b sheet之後 如果資料符合,要將b sheet裡符合的資料 copy 到b1, item4 則是從a的spec id 抓過來(如紫色標記),請問我該怎麼寫?
以上 謝謝各位的教導~~
作者:
GBKEE
時間:
2011-8-4 17:11
回復
24#
ffntldj
試試看
Sub Ex()
Dim f As Range, f1 As Range, Rng As Range, Ar, E As Range, S1 As Integer, S2 As Integer
Dim d1 As Object, d2 As Object
Set d1 = CreateObject("scripting.dictionary") 'Ans:2 -的物件
Set d2 = CreateObject("scripting.dictionary") 'Ans:3 -的物件
With Sheets("A") 'Ans:1 -----
Set f = .Range("A1") '第一個"Mod part"
Do
Set f1 = .Columns(1).Find(What:="ACTION", MatchCase:=False, After:=f) '從 Mod part 往下找"ACTION"
S1 = Application.Match("OPE_NO", f1.EntireRow, 0) 'ACTION列 找到"OPE_NO"欄位
S2 = Application.Match("SPEC ID", f1.EntireRow, 0) 'ACTION列 找到"SPEC ID"欄位
Set Rng = .Range(f.Offset(1), f1.Offset(-1)) 'Mod part - ACTION"之間的儲存格
Do
If f1 Like "MODIFY*" Then
For Each E In Rng
d1(Split(E, "-")(0)) = d1(Split(E, "-")(0)) & "," & f1(1, S1).Value 'Split(E, "-")(0) 前六碼(KEY) 寫入"OPE_NO"(ITEM)
d2(E.Value) = f1(1, S2).Value 'MODIFY*(KEY) 寫入"SPEC ID"(ITEM)
Next
End If
Set f1 = f1.Offset(1)
Loop Until (f1 = "" And f1.End(xlDown).Row = Rows.Count) Or f1.Value = f.Value
Set f = .Columns(1).Find(What:=f, MatchCase:=False, After:=f) '往下 尋找"Mod part"
Loop Until f.Address = "$A$1" '回到第一個"Mod part"時離開迴圈
End With 'Ans:1 -----End
S1 = 0
ReDim Ar(4, S1) '製定 寫入B1陣列的欄位 5欄(0-4)
With Sheets("B")
S2 = 2
Do
If InStr(d1(Split(.Cells(S2, 1), "-")(0)), .Cells(S2, 2)) Then
'a sheet抓出來之後(如上題),要去比對b sheet的資料(part_id 和ope_no欄位),如果確定資料符合就會寫入B1欄位
Ar(0, UBound(Ar, 2)) = .Cells(S2, 1) 'Ans:2 -----
Ar(1, UBound(Ar, 2)) = .Cells(S2, 2) 'Ans:2 -----
Ar(2, UBound(Ar, 2)) = .Cells(S2, 3) 'Ans:2 -----
Ar(3, UBound(Ar, 2)) = .Cells(S2, 4) 'Ans:2 -----
Ar(4, UBound(Ar, 2)) = d2(.Cells(S2, 1).Value) 'Ans:3 -----
ReDim Preserve Ar(4, UBound(Ar, 2) + 1)
End If
S2 = S2 + 1
Loop Until .Cells(S2, 1) = "" '空白時離開迴圈
End With
With Sheets("B1")
.UsedRange.Offset(1).Clear
.[A2].Resize(UBound(Ar, 2), 5) = Application.Transpose(Ar)
End With
Set Rng = Nothing
Set E = Nothing
Set f = Nothing
Set f1 = Nothing
Set d1 = Nothing
Set d2 = Nothing
End Sub
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)