標題:
[發問]
自動清除功能
[打印本頁]
作者:
PJChen
時間:
2017-7-25 22:33
標題:
自動清除功能
本帖最後由 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. 請儘可能不要修改原先的程式
[attach]27546[/attach]
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
複製代碼
作者:
GBKEE
時間:
2017-7-26 19:53
本帖最後由 GBKEE 於 2017-7-29 19:19 編輯
回復
1#
PJChen
UCase的功能是什麼?
你學習的不夠認真,不懂要看看說明
試試看
Option Explicit
Dim 目的檔 As Workbook, 來源檔 As Workbook
Sub 庫存更新()
Dim xRng As Range
File_settings 來源檔, "庫存資料表.xlsx"
File_settings 目的檔, "ERP_Data.xlsx"
With 來源檔.Sheets(1)
.Cells.Sort Key1:=.Columns("L"), Key2:=.Columns("F"), Header:=xlYes
Set xRng = .UsedRange 'UsedRange->工作表所使用的範圍,如A:AA之後再也沒資料
xRng.Copy 'A:AA複製到目的檔B:AB
End With
With 目的檔.Sheets("庫存")
.Range("B1").PasteSpecial xlPasteValues '選擇性貼上值
'自動清除目的檔1065:1073列
.Range("a" & xRng.Rows.Count + 1, .Range("A1101")).Resize(, 27).Clear
End With
來源檔.Close False
目的檔.Save
End Sub
Sub File_settings(xFile As Workbook, 工作頁 As String) '檔案設定
Dim xPath As String
xPath = ThisWorkbook.Path & "\"
If UCase(工作頁) <> UCase("ERP_Data.XLSX") Then xPath = xPath & "FromERP\"
On Error Resume Next
Set xFile = Workbooks(工作頁)
If Err > 0 Then Set xFile = Workbooks.Open(xPath & 工作頁)
If xFile.Name = "" Then
MsgBox "請查看 " & vbLf & xPath & vbLf & "是否有 [" & 工作頁 & "]"
End
End If
End Sub
複製代碼
作者:
PJChen
時間:
2017-7-27 21:48
回復
2#
GBKEE
大大,
因為我原來的程式有排序功能,這個新的程式沒把
來源檔
的排序功能寫進去,
1. 可以幫忙把它加上去嗎?
2. 更新程式後,要把
來源檔
關閉.
我本來想原來的排序功能直接添上去,但因為你的寫法不同,我加上去的話它就整個不能執行了。
作者:
PJChen
時間:
2017-7-28 21:50
本帖最後由 GBKEE 於 2017-7-29 18:15 編輯
回復
2#
GBKEE
大大,
請指導一下,我是要來源檔在未複製資料之前先排序,但總是有些問題
1) 來源檔與目的檔同時事先開啟,或同時不要開啟,它都無法執行
2) 先開啟目的檔,再執行巨集這時它會自行打開來源檔,這樣就可以完全執行也會先排序再貼上.
3) 我要怎麼修改讓它完全正常?
Option Explicit
Dim 目的檔 As Workbook, 來源檔 As Workbook
Sub 庫存更新()
Dim xRng As Range
File_settings 來源檔, "庫存資料表.xlsx"
File_settings 目的檔, "ERP_Data.xlsx"
Set xRng = 來源檔.Sheets(1).UsedRange 'UsedRange->工作表所使用的範圍,如A:AA之後再也沒資料
'來源檔第一個工作表,排序 1) L 2)F
With 來源檔.Sheets(1).Range("A:AA")
.Cells.Sort Key1:=.Columns("L"), Key2:=.Columns("F"), _
Header:=xlYes
xRng.Copy 'A:AA複製到目的檔B:AB
With 目的檔.Sheets("庫存")
.Range("B1").PasteSpecial xlPasteValues '選擇性貼上值
'自動清除目的檔1065:1073列
.Range("a" & xRng.Rows.Count + 1, .Range("A1101")).Resize(, 37).Clear
End With
End With
來源檔.Close False '來源檔關閉檔案(不會問是否存檔)
目的檔.Save
End Sub
Sub File_settings(xFile As Workbook, 工作頁 As String) '檔案設定
Dim xPath As String
xPath = ThisWorkbook.Path & "\"
If UCase(工作頁) <> UCase("ERP_Data.XLSX") Then xPath = xPath & "FromERP\"
On Error Resume Next
Set xFile = Workbooks(工作頁)
If Err > 0 Then Set xFile = Workbooks.Open(xPath & 工作頁)
If xFile.Name = "" Then
MsgBox "請查看 " & vbLf & xPath & vbLf & "是否有 [" & 工作頁 & "]"
End
End If
End Sub
複製代碼
作者:
GBKEE
時間:
2017-7-29 07:03
回復
4#
PJChen
1) 來源檔與目的檔同時事先開啟,或同時不要開啟,它都無法執行??
2) 先開啟目的檔,再執行巨集這時它會自行打開來源檔,這樣就可以完全執行也會先排序再貼上. ??
Sub 庫存更新(), 這程序你不是要放在VBA報表指令.XLSM
程式碼 有指定 來源檔與目的檔, 可以不管事先開啟,或沒開啟的問題
File_settings 來源檔, "庫存資料表.xlsx"
File_settings 目的檔, "ERP_Data.xlsx"
'**********來源檔是同VBA報表指令的資料夾\FromERP\*********
If UCase(工作頁) <> UCase("ERP_Data.XLSX") Then xPath = xPath & "FromERP\"
複製代碼
2#程式碼已更新 再試試看
你4#的程式碼執沒錯ㄚ
作者:
PJChen
時間:
2017-7-29 15:50
回復
5#
GBKEE
大大,
我又試了好幾遍,還是跟之前說的一樣,必須先開啟ERP_Data.xlsx,執行才會正常..
我PO上讓您執行看看.
[attach]27564[/attach]
作者:
GBKEE
時間:
2017-7-29 16:05
回復
6#
PJChen
抱歉了
,2個地方少加 "
.
"
再試試看
With 來源檔.Sheets(1)
.Cells.Sort Key1:=
.
Columns("L"), Key2:=
.
Columns("F"), Header:=xlYes
作者:
PJChen
時間:
2017-7-29 18:00
回復
7#
GBKEE
真太神奇了,..大大
現在正常了,為什麼少了"."差這麼多?...謝謝你了,真是太苦惱人了.
作者:
GBKEE
時間:
2017-7-29 19:26
回復
8#
PJChen
With 來源檔.Sheets(1) '這物件是工作表
.Cells.Sort Key1:=Columns("L"), Key2:=.Columns("F"), Header:=xlYes
'** 沒有一點的 Columns("L"), 是指作用中工作表的Columns("L")
'** 如恰巧作用中工作表是,來源檔.Sheets(1),,不會有錯誤發生的
'**這是小地方很容易疏忽的
Set xRng = .UsedRange 'UsedRange->工作表所使用的範圍,如A:AA之後再也沒資料
xRng.Copy 'A:AA複製到目的檔B:AB
End With
作者:
PJChen
時間:
2017-7-29 19:41
回復
9#
GBKEE
感謝大大說明...
作者:
PJChen
時間:
2017-8-13 00:50
回復
9#
GBKEE
大大,
請教sorting的問題,這個程式原本是在來源檔sorting,現在我把它改到目的檔,執行貼的動作後再sorting,為何就不能執行sorting動作呢?
Option Explicit
Dim 目的檔 As Workbook, 來源檔 As Workbook
Sub 庫存更新()
Dim xRng As Range
File_settings 來源檔, "庫存資料表.xlsx"
File_settings 目的檔, "ERP_Data.xlsx"
'*********************************************************
With 來源檔.Sheets(1)
Set xRng = .UsedRange 'UsedRange->工作表所使用的範圍,如A:AA之後再也沒資料
xRng.Copy 'A:AA複製到目的檔B:AB
End With
With 目的檔.Sheets("庫存")
.Range("B1").PasteSpecial xlPasteValues '選擇性貼上值
.Range("a" & xRng.Rows.Count + 1, .Range("A1101")).Resize(, 37).Clear
.Cells.Sort Key1:=.Columns("AD"), Key2:=.Columns("G"), Header:=xlYes
End With
來源檔.Close False
目的檔.Save
End Sub
'**********來源檔是同VBA報表指令的資料夾\FromERP\*********
Sub File_settings(xFile As Workbook, 工作頁 As String) '檔案設定
Dim xPath As String
xPath = ThisWorkbook.Path & "\"
If UCase(工作頁) <> UCase("ERP_Data.XLSX") Then xPath = xPath & "FromERP\"
On Error Resume Next
Set xFile = Workbooks(工作頁)
If Err > 0 Then Set xFile = Workbooks.Open(xPath & 工作頁)
If xFile.Name = "" Then
MsgBox "請查看 " & vbLf & xPath & vbLf & "是否有 [" & 工作頁 & "]"
End
End If
End Sub
複製代碼
作者:
PJChen
時間:
2017-8-15 22:49
請高人指點:
情形一,單獨排序時沒問題
Option Explicit
Dim 目的檔 As Workbook, 來源檔 As Workbook
Sub sorting()
Dim xRng As Range
File_settings 目的檔, "ERP_Data.xlsx"
With 目的檔.Sheets("庫存")
.Cells.Sort Key1:=.Columns("AD"), Key2:=.Columns("G"), Header:=xlYes
End With
目的檔.Save
End Sub
'**********來源檔是同VBA報表指令的資料夾\FromERP\*********
Sub File_settings(xFile As Workbook, 工作頁 As String) '檔案設定
Dim xPath As String
xPath = ThisWorkbook.Path & "\"
If UCase(工作頁) <> UCase("ERP_Data.XLSX") Then xPath = xPath & "FromERP\"
On Error Resume Next
Set xFile = Workbooks(工作頁)
If Err > 0 Then Set xFile = Workbooks.Open(xPath & 工作頁)
If xFile.Name = "" Then
MsgBox "請查看 " & vbLf & xPath & vbLf & "是否有 [" & 工作頁 & "]"
End
End If
End Sub
複製代碼
情形2,在以下中排序,卻一直排錯,是哪裡出問題?
Option Explicit
Dim 目的檔 As Workbook, 來源檔 As Workbook
Sub 庫存更新()
Dim xRng As Range
File_settings 來源檔, "庫存資料表.xlsx"
File_settings 目的檔, "ERP_Data.xlsx"
'*********************************************************
With 來源檔.Sheets(1)
Set xRng = .UsedRange 'UsedRange->工作表所使用的範圍,如A:AA之後再也沒資料
xRng.Copy 'A:AA複製到目的檔B:AB
End With
With 目的檔.Sheets("庫存")
.Range("B1").PasteSpecial xlPasteValues '選擇性貼上
End With
With 目的檔.Sheets("庫存")
.Cells.Sort Key1:=.Columns("AD"), Key2:=.Columns("G"), Header:=xlYes
End With
來源檔.Close False
目的檔.Save
End Sub
'**********來源檔是同VBA報表指令的資料夾\FromERP\*********
Sub File_settings(xFile As Workbook, 工作頁 As String) '檔案設定
Dim xPath As String
xPath = ThisWorkbook.Path & "\"
If UCase(工作頁) <> UCase("ERP_Data.XLSX") Then xPath = xPath & "FromERP\"
On Error Resume Next
Set xFile = Workbooks(工作頁)
If Err > 0 Then Set xFile = Workbooks.Open(xPath & 工作頁)
If xFile.Name = "" Then
MsgBox "請查看 " & vbLf & xPath & vbLf & "是否有 [" & 工作頁 & "]"
End
End If
End Sub
複製代碼
作者:
PJChen
時間:
2017-8-19 21:32
回復
9#
GBKEE
找了4天,終於發現不能sorting的原因...
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)