- 帖子
- 913
- 主題
- 150
- 精華
- 0
- 積分
- 1089
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- office 2019
- 閱讀權限
- 50
- 性別
- 女
- 註冊時間
- 2011-8-28
- 最後登錄
- 2023-7-19
 
|
23#
發表於 2012-5-17 16:40
| 只看該作者
回復 19# PJChen
老大,
補充: 我試著自己key完整的檔名在F欄,然後將2012年的bcm檔案放在"2012 PI_PO"資料夾中(因為年度很多,怕run太久),然後修改程式如下,但完全不能動作!- Sub get_value()
- Dim a As Range, arr(1 To 5)
- Application.ScreenUpdating = False '關閉螢幕閃爍
- For Each a In Range([f2], [f2].End(4)) '在f2以下的資料範圍循環
- If Application.CountA(Rows(a.Row)) = 1 Then 'a:e欄已有寫入資料就跳過
- Application.DisplayAlerts = False '關閉開啟時的對話方塊
- fb = ThisWorkbook.Path & "\2012 PI_PO\" & a '從"PI_PO資料夾"取路徑
- Set wk = GetObject(fb) '背景開啟該路徑檔案
- Sh = Array("PI", "PO") '兩個工作表名
- On Error Resume Next '略過錯誤
- For s = 0 To 1
- Set mysheet = wk.Sheets(Sh(s)) '工作表變量
- If Err.Number = 0 Then '如不發生錯誤(有這個工作表)
- mysheet.AutoFilterMode = False '取消篩選
- mysheet.[a:b].Replace "TOTAL:", "TOTAL", xlWhole '把帶分號的TOTAL改成不帶分號
- r = mysheet.[a:b].Find("TOTAL", , , 1, xlByRows).Row '在AB兩欄尋找"TOTAL"
- c = mysheet.Cells(r, 15).End(1).Column '取TOTAL那一行的最右欄(即金額)
- arr(1) = Split(a, " ")(0) '取f欄第一個空格以前的字串
- arr(s * 2 + 2) = mysheet.Cells(r, c - 3).Value '取最右欄減3欄的數字
- arr(s * 2 + 3) = mysheet.Cells(r, c).Value '取最右欄的數字
- End If
- Err.Clear '清除錯誤
- Next
- Cells(a.Row, 1).Resize(1, 5) = arr '寫入儲存格
- Erase arr
- wk.Close 0 '關閉打開的檔案不儲存
- End If
- Next
- End Sub
複製代碼 |
|