標題:
[發問]
填入廠缺&註解
[打印本頁]
作者:
PJChen
時間:
2020-4-16 22:51
標題:
填入廠缺&註解
大大好,
我想將 最新庫存B.xlsx的 廠缺 填入 月庫存表.xlsx中 並加以註解,請問以下需求該如何寫?
程式1
1) 月庫存表.xlsx的sheet以每月的天數命名
2) 將最新庫存B.xlsx的飛比sheet BJ4:CB資料
3) 填入月庫存表.xlsx中,對應 最新庫存B.xlsx H1的日期
例如:H1 為4/16,則對應月庫存表.xlsx的sheet 16
4) 最新庫存B.xlsx的飛比BJ4:CB儲存格<>"",則填入sheet 16 J4:Y
EX 1:月庫存表.xlsx sh16 J4值為1266
對應 最新庫存B.xlsx 的BJ4儲存格 值為34
則J4=1266-34
EX 2:月庫存表.xlsx sh16 L7值為198
對應 最新庫存B.xlsx 的BL7儲存格 值為""
則L7儲存格不改變....依此類推
程式2
程式1的廠缺資料填入後
將所有填入廠缺值的值存格,插入註解"廠缺XX"
EX 1:月庫存表.xlsx sh16 J4=1266-34
則註解為 廠缺34
[attach]31918[/attach]
作者:
PJChen
時間:
2020-4-19 21:59
Dear大大,
請指導 程式2
它可以增加空白註解,但無法將Workbooks("最新庫存B.xlsx").Sheets("飛比")的廠缺值載入註解中,
而且載入的註解無法依 Sheets("飛比")的廠缺值位置載入,註解填滿了 月庫存表.xlsx Range("J4:Y")
且希望註解的框框大小,可以依註解內容自動大小,目前的太大了.
Sub 廠缺註解()
Dim PH$, FN$, rng As Range, xb As Workbook, Sh As Worksheet, i As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False '一般提警示訊息關閉
Application.Calculation = xlManual '手動計算
i = Format(Date, "D")
FN = "月庫存表.xlsx" '目的檔
PH = "T:\0_自訂表單\其他表單\平日庫表\" '目的
On Error Resume Next: Set xb = Workbooks(FN): On Error GoTo 0 '檢查檔案是否已開啟(避免當機)
If xb Is Nothing Then Set xb = Workbooks.Open(PH & FN) '目的若未開啟,則開啟之
Set Sh = Workbooks("最新庫存B.xlsx").Sheets("飛比")
With Sh
xRow = Cells(Cells.Rows.Count, "F").End(xlUp).Row
Set sRng = Range("BJ4:BY" & xRow) '來源:廠缺範圍
End With
With xb.Sheets(i)
xb.Sheets(i).Activate
xRow = Cells(Cells.Rows.Count, "E").End(xlUp).Row
For Each rng In Range("J4:Y" & xRow) '要寫入的範圍,目的訂單範圍
On Error Resume Next
If sRng <> "" Then '儲存格的值不為 空白
Set cmt = rng.Addcomment '將儲存格的值寫入註解中
cmt.Text "廠缺*" & sRng.Value
With rng.Comment.Shape.TextFrame.Characters.Font
.AutoSize = True
.Name = "細明體"
.Size = 10
End With
End If
Next rng
End With
Application.ScreenUpdating = True '打開屏幕更新
End Sub
複製代碼
作者:
准提部林
時間:
2020-4-25 12:01
考慮兩檔的[商品]及[銷售點]名稱或位置可能不一致, 所以寫得複雜,
有問題自行去修改:
[attach]31955[/attach]
作者:
PJChen
時間:
2020-4-25 21:57
本帖最後由 PJChen 於 2020-4-25 21:58 編輯
回復
3#
准提部林
准大好,
填入"月庫存表"的廠缺值,必須用
原來的值-廠缺
不能直接變成值,請問這個部份要怎麼改?
EX:
原訂單值為450
廠缺20
則相對應儲存格=450-20
作者:
PJChen
時間:
2020-4-26 01:24
回復
3#
准提部林
& 第2個問題
因程式與平日檔案不放在一起的,所以我稍修改以下程式,但無法運作:
P.S. 原訂單值 對應儲存格 若無廠缺發生,則 保持現狀 (只有原訂單值)
Sub 廠缺註解()
Dim Sht As Worksheet, PH$, FN$, xB As Workbook, xS As Worksheet
Dim xD, xR As Range, Arr, R&, C&
Application.ScreenUpdating = False
Application.Calculation = xlManual
Set Sht = Sheets("飛比")
FN = "月庫存表.xls": PH = "T:\範例\"
On Error Resume Next: Set xB = Workbooks(FN): On Error GoTo 0
If xB Is Nothing Then Set xB = Workbooks.Open(PH & FN)
'ThisWorkbook.Activate
xB.Activate
On Error Resume Next: Set xS = xB.Sheets(Day(Sht.[H1]) & ""): On Error GoTo 0
If xS Is Nothing Then MsgBox "〔日庫存表〕不存在! ": Exit Sub
If xS.[J2] = "***" Then MsgBox "本日庫存已扣除! ": Exit Sub
複製代碼
作者:
准提部林
時間:
2020-4-26 10:19
本帖最後由 准提部林 於 2020-4-26 10:22 編輯
回復
4#
PJChen
1) xR = "=" & Val(xR) & "-" & Arr(i, j)
或 xR = "=" & IIf(Val(xR) = 0, "", xR) & "-" & Arr(i, j)
2) FN = "月庫存表.xls
x
"
作者:
PJChen
時間:
2020-4-26 17:28
本帖最後由 PJChen 於 2020-4-26 17:34 編輯
回復
6#
准提部林
准大,
我是用你回覆的檔案測試,檔案類型.xls, 因程式與平日檔案不放在一起的,所以我修改紅字部份,但無法運作,再麻煩指點!
Set Sht = Sheets("飛比")
'這裡卡住了,無法執行
FN = "月庫存表.xls":
PH = "T:\範例\"
On Error Resume Next: Set xB = Workbooks(FN): On Error GoTo 0
If xB Is Nothing Then Set xB = Workbooks.Open(PH & FN)
'ThisWorkbook.Activate
xB.Activate
'這裡也有問題,無法執行
作者:
准提部林
時間:
2020-4-26 19:21
回復
7#
PJChen
Set Sht = ActiveSheet
作者:
PJChen
時間:
2020-4-26 19:55
回復
8#
准提部林
准大,
還是不行,這樣會亂抓工作表,我把程式用我現行的做法放在Macro_1
麻煩幫忙看下...感謝
[attach]31960[/attach]
作者:
PJChen
時間:
2020-4-26 21:24
回復
8#
准提部林
准大,
我改好了,謝謝!
作者:
PJChen
時間:
2020-4-26 22:37
回復
3#
准提部林
准大,
同一檔案,有其他欄位,也需用到類似的註解載入,但因為是不同時間發生,需要單獨程式, [attach]31961[/attach]
規則如下:
最新庫存B H1 為4/21,則對應月庫存表.xlsx的sheet 21
最新庫存B ED對應 月庫存表AU
最新庫存B EE對應 月庫存表AV
最新庫存B GA:GD的CK值<0則為過允收
當EF欄(回廠數值)的合計>0,
則尋找GA:GD的CK值<0的欄位
EX:
EF17>0
且GA17的CK1<0
則GE17的日期1就載入月庫存表的相對欄位
在AU:AV欄,增加註解文字 "日印5/9"
作者:
PJChen
時間:
2020-4-27 13:25
回復
3#
准提部林
補充:
規則如下:
最新庫存B H1 為4/21,則對應月庫存表.xlsx的sheet 21
最新庫存B ED對應 月庫存表AU
最新庫存B EE對應 月庫存表AV
最新庫存B GA:GD的CK值<0則為過允收
(有可能多筆<0,所以GA:GD的CK值,要能全部都檢視)
當EF欄(回廠數值)的合計>0,
則尋找GA:GD的CK值<0的欄位
同時最新庫存B GQ:GT的小計欄位,也是對應GA:GD的CK值
當GA:GD的CK值<0,則可取GQ:GT的小計...為過允數量
假設:
EF17>0
CK_1 >0 (無過允,不予計入)
CK_2 = 0 (無過允,不予計入)
CK_3 < 0 (過允,則GS17的小計3數值為過允)
CK_4 空白 (表示無數據,不予計入)
GQ:GT的小計欄位的所有過允合計 = EF欄的回廠合計
過允資料載入 月庫存表的相對欄位 增加註解
在AU:AV欄,增加註解文字(假設值) "日印5/9 * 12"
若有多筆過允數,則換行
日印5/9 * 12
日印5/10 * 10
....依此類推
作者:
PJChen
時間:
2020-5-2 14:31
回復
3#
准提部林
准大好,
因為月庫存表的名稱每個月都會不同,我想改為開啟檔案方式為 *月庫存表*
請問程式要如何修改?
作者:
准提部林
時間:
2020-5-3 09:43
回復
13#
PJChen
檔案名稱用指定儲存格輸入內容來存取~~
作者:
PJChen
時間:
2020-5-3 15:02
回復
14#
准提部林
准大,
每月會變動的檔名,指定儲存格作用不大,我還是想用*月庫存表*的開啟方式,
略修改程式,可以開啟檔案,但無法載入廠缺,可否幫忙看下問題所在?
Sub 載入廠缺註解()
Dim Sht As Worksheet, PH$, FN$, xB As Workbook, xS As Worksheet
Dim xD, xR As Range, Arr, R&, C&
Application.ScreenUpdating = False
Application.Calculation = xlManual
Set Sht = Workbooks("最新庫存B.xlsx").Sheets("飛比") '來源
PH = "T:\範例\"
FN = Dir(PH & "*月庫存表*.xlsx")
Do While FN <> ""
On Error Resume Next: Set xB = Workbooks(FN): On Error GoTo 0
If xB Is Nothing Then Set xB = Workbooks.Open(PH & FN) '公用庫存表
FN = Dir
Loop
xB.Activate '公用庫存表
On Error Resume Next: Set xS = xB.Sheets(Day(Sht.[H1]) & ""): On Error GoTo 0 '比對日期
If xS Is Nothing Then MsgBox "〔日庫存表〕不存在! ": Exit Sub
If xS.[J2] = "***" Then MsgBox "本日庫存已扣除! ": Exit Sub
'-------------------------------------
Set xD = CreateObject("Scripting.Dictionary") '記錄[來源]欄位置
For Each xR In Range(xS.[E4], xS.[E65536].End(xlUp)) '公用庫存表
If xR <> "" Then xD(xR & "") = xR.Row
Next
For Each xR In xS.[J3:AZ3] '記錄公用庫存表[商品名稱]列位置
If xR = "" Or xR = "合計" Then Exit For
xD(xR & "") = xR.Column
Next
'-------------------------------------
R = Sht.[H65536].End(xlUp).Row '以來源[商品名稱]為資料列數
Arr = Sht.Range("BJ4:CB" & R) '來源廠缺範圍
For i = 1 To UBound(Arr)
R = xD(Sht.[H4].Cells(i, 1) & "") '取得來源[商品名稱]列位置
If R = 0 Then GoTo i01
For j = 1 To UBound(Arr, 2)
C = xD(Sht.[BJ3].Cells(1, j) & "") '取得[來源]欄位置
If C = 0 Then GoTo j01
If Val(Arr(i, j)) = 0 Then GoTo j01
Set xR = xS.Cells(R, C)
' xR = Val(xR) - Arr(i, j) '載入廠缺,變成值
xR = "=" & Val(xR) & "-" & Arr(i, j) '載入廠缺
xR.NoteText "PJ:" & Chr(10) & "廠缺*" & Arr(i, j) '註解的內容,Chr(10)換行
With xR.Comment.Shape '註解的框大小
.Top = xR.Top
.Left = xR.Cells(1, 2).Left + 1
.Height = xR.Height + 12
.Width = 50
' .TextFrame.Characters.Font.Size = 9 '自訂字體大小,在家可以運作,但公司不行
'.Shadow.Visible = False '取消陰影
End With
j01: Next j
i01: Next i
xS.[J2] = "***" '扣除庫存以3星註記(避免重覆扣除)
Application.Calculation = xlCalculationAutomatic
Application.GoTo xS.[J3] '公用庫存表起始列位置
End Sub
複製代碼
作者:
PJChen
時間:
2020-5-3 16:10
回復
3#
准提部林
准大,
另一類似前面的註解載入,但因為不同時間發生,需要單獨程式,
這個程式的規則比較多,我不知道怎麼下手,也請幫忙....
重新整理規則如下:(程式與 月庫存表 & 最新庫存B 是分開的檔案) [attach]31994[/attach]
1) 月庫存表AU:AV欄的數據,會自行填入,只要增加註解就好,開啟方式用 *月庫存表*
2) 日期對應:來源: 最新庫存B H1 為4/21,則對應 目的檔:月庫存表.xlsx的sheet 21
3) CK_1~CK_4<0,為過允,則把對應資料,在月庫存表新增註解
最新庫存B.xlsx的對應資料如下,
CK_1 對應 日期1(GE) 對應 小計1(GQ)
CK_2 對應 日期2(GH) 對應 小計2(GR)
CK_3 對應 日期3(GK) 對應 小計3(GS)
CK_4 對應 日期4(GN) 對應 小計4(GT)
4) 最新庫存B.xlsx的 ED:EE欄有數據的話,則 月庫存表.xlsx的 AU:AV也會填入同樣數據,且要新增註解
5) EX1
最新庫存B 的料號 A1,其CK_1 & CK_2的值<0
則新增月庫存表.xlsx註解:
AU欄
日印5/5 * 36箱
日印5/7 * 140箱
AV欄
日印5/5 * 5
6) EX2
最新庫存B 的料號 A16其CK_1 的值<0
則新增月庫存表.xlsx註解:
AV欄
日印5/9 * 215
作者:
PJChen
時間:
2020-5-24 20:11
回復
14#
准提部林
准大好,
檔案已可自動開啟,另一新需求:載入過允日印,還有一部份無法解決:註解無法載入日期&各自的數量
附上檔案.... [attach]32079[/attach]
ED4:EE4有回廠數值
將最新庫存B的ED:EE過允數量載入月庫存表AV:AW
註解每個過允的日印及數量
EX:1
月庫存表AV4顯示註解為:
日印5/5 *36箱
日印5/7 *140箱
月庫存表AW4顯示註解為:
日印5/5 *5
GA64<0
EX:2
月庫存表AV4顯示註解為:
日印 5/9 *3箱+3
Sub 載入過允註解()
Dim Sht As Worksheet, PH$, FN$, xB As Workbook, xS As Worksheet
Dim xD, xR As Range, arr, R&, C&
Application.ScreenUpdating = False
Application.Calculation = xlManual
Set Sht = Workbooks("最新庫存B.xlsx").Sheets("飛比") '來源
PH = "T:\私\範例\VBA\載入過允日印\"
FN = Dir(PH & "*月庫存表*.xlsx")
Do While FN <> ""
On Error Resume Next: Set xB = Workbooks(FN): On Error GoTo 0
If xB Is Nothing Then Set xB = Workbooks.Open(PH & FN)
FN = Dir
Loop
xB.Activate '公用庫存表
On Error Resume Next: Set xS = xB.Sheets(Day(Sht.[H1]) & ""): On Error GoTo 0 '比對日期,xS =公用的當日工作表
If xS Is Nothing Then MsgBox "〔日庫存表〕不存在! ": Exit Sub
If xS.[AV2] = "***" Then MsgBox "本日過允已扣除! ": Exit Sub
'-------------------------------------
Set xD = CreateObject("Scripting.Dictionary") '記錄[來源]欄位置
For Each xR In Range(xS.[B4], xS.[C65536].End(xlUp)) '公用庫存表,料號為對象
If xR <> "" Then xD(xR & "") = xR.Row
Next
For Each xR In xS.[AV3:AW3] '記錄公用庫存表[料號]列位置
If xR = "" Or xR = "合計" Then Exit For
xD(xR & "") = xR.Column
Next
'-------------------------------------
R = Sht.[F65536].End(xlUp).Row '以來源[料號]為資料列數
arr = Sht.Range("ED4:EE" & R) '來源過允
For i = 1 To UBound(arr)
R = xD(Sht.[E4].Cells(i, 1) & "") '取得來源[料號]列位置
If R = 0 Then GoTo i01
For j = 1 To UBound(arr, 2)
C = xD(Sht.[ED3].Cells(1, j) & "") '取得[來源]欄位置
If C = 0 Then GoTo j01
If Val(arr(i, j)) = 0 Then GoTo j01
Set xR = xS.Cells(R, C)
' xR = Val(xR) - Arr(i, j) '載入過允,變成值
xR = arr(i, j) '載入過允
xR.NoteText "PJ:" & vbCrLf & "日印 *" & arr(i, j) '註解的內容,vbCrLf換行
With xR.Comment.Shape '註解的框大小
.Top = xR.Top
.Left = xR.Cells(1, 2).Left + 1
.Height = xR.Height + 24
.Width = 60
End With
j01: Next j
i01: Next i
xS.[AV2] = "***" '扣除過允以3星註記(避免重覆扣除)
Application.Calculation = xlCalculationAutomatic
Application.GoTo xS.[J3] '公用庫存表起始列位置
End Sub
複製代碼
作者:
准提部林
時間:
2020-5-29 10:50
回復
17#
PJChen
總是看不懂規則, 摸索做, 自行去修改:
[attach]32107[/attach]
作者:
PJChen
時間:
2020-5-29 22:42
本帖最後由 PJChen 於 2020-5-29 22:43 編輯
回復
18#
准提部林
謝謝准大百忙中幫忙,我也不知道改不改得成! 可否幫忙解說這段的意思?
T1 = "": T2 = ""
If Val(Brr(i, j * 2 + 1)) < 0 Then _
T1 = Format(Crr(i, j * 6 + 1), "日印m/d-") & Format(Crr(i, j * 6 + 2), "0箱") & Format(Crr(i, j * 6 + 3), "+0;;#;")
If Val(Brr(i, j * 2 + 2)) < 0 Then _
T2 = Format(Crr(i, j * 6 + 4), "日印m/d-") & Format(Crr(i, j * 6 + 5), "0箱") & Format(Crr(i, j * 6 + 6), "+0;;#;")
TT = Replace(Replace(Trim(T1 & " " & T2), " ", vbCrLf), "-", " *")
希望我能夠解說得更清楚些,檔案中我增加了一些範例,希望有幫助! [attach]32110[/attach]
ED:EE有數值時,才要填入註解
當ED:EE有數值時,則判別GA:GD 數值<0的那一組,就是填入註解的來源
註解寫入來源以EE欄為主,ED欄為手動欄位,當工廠有指示要退回時,ED欄才會出現數值,且大多以整箱為單位
作者:
准提部林
時間:
2020-5-30 10:37
回復
19#
PJChen
總看不懂需求規則, 自行改改:
[attach]32113[/attach]
作者:
PJChen
時間:
2020-5-31 22:35
本帖最後由 PJChen 於 2020-5-31 22:38 編輯
回復
20#
准提部林
If Val(Brr(i, 1)) < 0 Then
T(1) = "日印" & Format(Crr(i, 1), "m/d ") & "*" & Val(Crr(i, 2)) & "箱" & IIf(Val(Crr(i, 3)) > 0, "+" & Crr(i, 3), "")
End If
If Val(Brr(i, 2)) < 0 Then
T(2) = "日印" & Format(Crr(i, 4), "m/d ") & "*" & Val(Crr(i, 5)) & "箱" & IIf(Val(Crr(i, 6)) > 0, "+" & Crr(i, 6), "")
End If
TT(1) = T(1) & IIf(T(2) = "", "", vbCrLf & T(2))
'--------------------------------
If Val(Brr(i, 3)) < 0 Then
T(3) = "日印" & Format(Crr(i, 7), "m/d ") & "*" & Val(Crr(i, 8)) & "箱" & IIf(Val(Crr(i, 9)) > 0, "+" & Crr(i, 9), "")
End If
If Val(Brr(i, 4)) < 0 Then
T(4) = "日印" & Format(Crr(i, 10), "m/d ") & "*" & Val(Crr(i, 11)) & "箱" & IIf(Val(Crr(i, 12)) > 0, "+" & Crr(i, 12), "")
End If
複製代碼
'----------------------------------
准大好,
以上程式對應來源:最新庫存B.xlsx GE:GP的4組盤點資料,當Val(Brr) < 0,則要產生註解
但產生的註解幾乎都不對,可否改為判別ED:EE>0產生註解,比較好判別且直觀!
是否產生註解,都看ED:EE是否>0
以下配合檔案,比較好理解......
1) 以回廠數ED:EE作判別, 數值>0,代表有產品要回廠
2) 這時GA:GD至少有一個值<0,找<0在CK的哪一組
3) 再對應GE:GP的4組盤點資料,成為註解的來源
4) 4組盤點資料, 一定是由小到大排列,日期小的排在前面
5) ED:EE以ED優先判別,ED剩下來的回廠數,就是EE的
6) EE欄: 無回廠數時,儲存格為0 (平時有公式)
7) ED是手動填入,無回廠數時儲存格為空白
8) ED的值>0 & 換算後全部整數箱,若EE>0,則EE回廠零數瓶
9) ED的值>0 & 換算後 整箱+瓶 ,這時EE一定=0(無回廠)
ex1:
ED4=4416=4416/入數24=184箱 (找GA:GD全部<0,則註解GE:GP 4組日期)
EE4=5/入數24=不足1箱=5(1組日期)
ex2:這個完全無法產生註解
ED4=空白 (無回廠=無註解)
EE4=425/入數16=(2組日期)
在目的檔AW產生註解
05/17*9
05/18*26箱
作者:
准提部林
時間:
2020-6-1 11:16
回復
21#
PJChen
雖然說明多次, 但還是弄不懂, 一堆文字看得眼花,
程式碼已儘量分開寫判斷, 給了方法, 若都無法理解程式碼而自行修改,
這樣大家都忙不完~~
作者:
PJChen
時間:
2021-4-17 23:43
回復
3#
准提部林
准大好,
我想在載入廠缺程式中,加入載入劃單數字,資料來源為
原始訂單AP:BH
廠缺數BJ:CB
劃單數CD:CV
1) 月庫存表內的原始訂單數字是作業者,自行填入,只有數值
2) 同一料號,若有廠缺數時則,儲存格內=原始訂單-廠缺數,
註解:
廠缺*XXX
3) 同一料號,若有劃單數時則,儲存格內=原始訂單-劃單數,
註解:
劃單*XXX
4) 同一料號,若有廠缺數&劃單數時則,儲存格內=原始訂單-廠缺數-劃單數,
註解:
廠缺*XXX
劃單*XXX
請問程式如何修改達到上述需求?
[attach]33215[/attach]
作者:
PJChen
時間:
2022-4-17 20:44
本帖最後由 PJChen 於 2022-4-17 20:47 編輯
回復
22#
准提部林
准大好,
這個程式改了一年多,最後修改了您之前寫的一個另程式&合併這個,用來載入產品過允的數量及備註,
修改後寫入備註方面有些Bug,能否請您撥冗幫忙看下?我把程式寫在"飛比總表.xls"中
備註抓取方式
1..每個料號,當ED:EE>0,則填入公用庫存表的AX:AY相對應位置
2..ED:EE>0的同一列,FZ:GC就會<0,
同一料號橫向取FZ:GC,依序取
EX: C15料號,EE22=64
FZ22<0,取GE22的日期+GX22的數量...4/28*44
GA22=<0取GH22的日期+GY22的數量...4/29*20
GB22=<0取GK22的日期+GZ22的數量...4/30*336
填入公用庫存表的AY22的備註中
3..執行填入備註的問題
GA:GC<0,當備註填入AX:AY時,
GA:GC會被重複判別,導致註解重複填入AX:AY中
有問題的部份,在公用庫存表中,已用不同顏色整列著色,
請問准大,如何讓備註不要被重複抓取?
[attach]34775[/attach]
作者:
PJChen
時間:
2022-4-25 15:20
回復
24#
PJChen
謝謝大家,
我已找到方法了!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)