- 帖子
- 913
- 主題
- 150
- 精華
- 0
- 積分
- 1089
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- office 2019
- 閱讀權限
- 50
- 性別
- 女
- 註冊時間
- 2011-8-28
- 最後登錄
- 2023-7-19
 
|
本帖最後由 PJChen 於 2017-7-25 22:36 編輯
請幫幫忙,這個程式已進入最後階段就完成了...
來源檔有1064列
目的檔有1073列
當來源檔把有資料的範圍A:AA複製到目的檔B:AB後,自動清除目的檔1065:1073列的字(要能Delete一整列但不要刪除列,因為目的檔的AC欄之後還有公式)
注意事項:
1. 這個程式測試過沒問題,只是當目的檔資料多於來源檔時,我希望增加一項清除"多餘資料"的功能
2. 清除多餘資料的寫法,要能自動偵測,因為來源檔及目的檔的資料隨時會有變動,所以不能用Delete 第?列:第?列的寫法
3. 目的檔中的1102~1104列有計算公式,我大約都會讓它與資料保持10列以上的距離,所以請把這個也考量進去,它不能被Delete
4. 請儘可能不要修改原先的程式
- Sub 庫存更新()
- '
- '
- '
- '
- Dim Msg As Boolean, W As Workbook, Wb As Workbook 'W As "來源檔" Wb As "目的檔"
-
- 'Boolean 型態的預設值為 False
- '*******Workbooks 開啟的活頁簿物件集合****
- For Each W In Workbooks
- If UCase(W.Name) = UCase("庫存資料表.xlsx") Then 'UCase的功能是什麼?
- Msg = True '檔案已開啟
- Exit For
- End If
- Next
- '*****************************************
- If Msg = True Then '檔案已開啟
- Set W = Workbooks("庫存資料表.xlsx")
- Else '檔案尚未打開時
- Set W = Workbooks.Open("Q:\00_科毅\出貨文件連結\FromERP\庫存資料表.xlsx")
- End If
- '*****************************************
- If Msg = True Then '檔案已開啟
- Set Wb = Workbooks("ERP_Data.xlsx")
- Else '檔案尚未打開時
- Set Wb = Workbooks.Open("Q:\00_科毅\出貨文件連結\ERP_Data.xlsx")
- End If
- '*****************************************Sorting以.Range("L1")為首
- Windows("庫存資料表.xlsx").Activate
- Range("G1").Select
- Selection.AutoFilter '建立自動篩選
- Range("G2").Select
- ActiveWindow.FreezePanes = True '凍結window
- 'ActiveWindow.FreezePanes = False '取消凍結window
- With Workbooks("庫存資料表.xlsx")
- With .Sheets("庫存資料表")
- Set b = .Range("L1").CurrentRegion
- A = Array("L", "F") '若有其他Sorting順位也可加入
- .AutoFilter.Sort.SortFields.Clear
- For i = 0 To 1 '指A = Array("L", "F") 有幾個sorting項目,2個就是0 To 1
- .AutoFilter.Sort.SortFields.Add Key:=b.Columns(A(i)) _
- , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
- xlSortNormal
- Next
- With .AutoFilter.Sort
- .Header = xlYes
- .MatchCase = False
- .Orientation = xlTopToBottom
- .SortMethod = xlPinYin
- .Apply
- End With
- End With
- End With
- W.Save
- 'Workbooks("庫存資料表.xlsx").Close True '存檔後關閉檔案
-
- '*****************************************
- With W.Sheets("庫存資料表")
- Set A = Intersect(.UsedRange, .Range("A:AA")).SpecialCells(xlCellTypeVisible) '只選擇有資料的範圍
- End With
-
- With Wb
- 'a.Copy .Sheets("庫存").Range("B1") '完全複製到sheet的B1
- '*************************************
- A.Copy
- .Sheets("庫存").Range("B1").PasteSpecial xlPasteValues '選擇性貼上值
- '*************************************
- Application.CutCopyMode = False '***不處於剪下或複製模式
- '.Close True '目的檔存檔後關閉檔案
- Wb.Save '目的檔存檔
- End With
- W.Close False '來源檔關閉檔案(不會問是否存檔)
- End Sub
複製代碼 |
|