2016-02-16 46 views
1

我已經創建了一個電子表格(Excel 2007),可以跟蹤一年中的訂單。作爲跟蹤的一部分,我需要根據日期和每天到達的訂單數生成唯一標識符。計數每天都會重置。根據日期和請求數創建唯一ID

例如;

請求1 =日期:16年2月2日 - > ID#20160202-01

請求2 =日期:16年2月2日 - > ID#20160202-02

請求3 =日期:02/03/16 - > ID#20160202-01

由於業務性質,訂單以電子郵件格式發送,然後通過用戶窗體輸入電子表格。在這個用戶表單中,如果請求的日期與前一個條目相匹配,我嘗試了一個If..Then語句來增加一個變量(n)。這個工作,但(n)的值重置,無論何時形式運行,這意味着我可以得到的最大值是2.

我相信修復在於使(n)全局/公共變量,但我不知道如何使用公共變量通過用戶窗體訪問。有沒有人有任何建議,或很好的參考來解決這個問題?預先感謝您的幫助。

更新:謝謝大家的快速反饋。我剛剛有一位同事,一時興起,問她是否爲我解決問題。她告訴我,一個靜態變量將是解決這個問題的方法。此修復有所幫助,但不是一個完美的解決方案。我將發佈相關代碼以顯示已實施的修復程序。

Sub CommandButtonSubmitClose_Click() 
Static n As Integer 
Dim ordDate As Date 
Dim ordYear As Integer 
Dim txtYear As String 
Dim txtMonth As String 
Dim txtDay As String 
Dim txtCount As String 
Dim IDnum As String 
Dim prevRow As Long 
Dim LastRow As Long, ws As Worksheet 

'Define variables' 
prevRow = LastRow - 1 
txtYear = reqYear 
txtMonth = Format(month(reqDate), "00") 
txtDay = Format(day(reqDate), "00") 

If ordDate = ws.Range("A" & prevRow).Value Then 
n = n + 1 
Else     'Determine daily count' 
    n = 1 
End If 


txtCount = Format(n, "00") 

'Create ID Number' 

    IDnum = " " & txtYear & "" & txtMonth & "" & txtDay & "-" & txtCount & "" 

新問題:如評論中所述,如果電子表格已關閉,則不存儲該變量。因此,如果訂單在當天晚些時候進入,計數將被重置,從而導致重複,導致整個事情變得不合時宜。另外,如果在混音中存在不連續的日期,則發生器不起作用。

+0

這將是很好,如果我們看到了當前的相關代碼,它可能是更容易找到,而不是重塑代碼中的錯誤。 –

+0

當電子表格關閉並重新打開時,您無法「將」值存儲在變量中。數據如何存儲?我們可能會在此基礎上找到簡單的解決方案。 – MatthewD

+0

將計數存儲在工作表上的單元格中並使代碼增加所述單元格。 – findwindow

回答

0

在嘗試了一些建議的想法後,包括將計數值存儲在單元格和另一張表中,我決定使用循環來搜索同一天收到的訂單。使用For ... Next循環,我遍歷每個訂單,並且如果日期與訂單的日期相匹配,則count(n)會更新一次。一旦循環播放完畢,(n)如上使用。如果未找到其他值,則將(n)設置爲1.在循環之前,(n)的值重置爲零。感謝大家的反饋,感謝大家的幫助!

這裏是固定的代碼,如果有人有興趣:

n = 1 
For i = 11 To LastRow 
    If ordDate = ws.Range("A" & i).Value Then 
    n = n + 1 
    End If 
Next i 

txtCount = Format(n, "00") 

'Create ID Number' 

IDnum = " " & txtYear & "" & txtMonth & "" & txtDay & "-" & txtCount & "" 
0

爲什麼不使用工作表來存儲計數器值?

Sub CommandButtonSubmitClose_Click() 
    Dim r As Range 
    Dim txtCount As String 

    'Add 1 to the counter if the day is still the same, 
    Set r = ThisWorkbook.Sheets("Var_Sht").Range("A1") 
    If r.Value = Date Then 
     r.Offset(1, 0).Value = r.Offset(1, 0).Value + 1 
    Else 
     r.Value = Date 
     r.Offset(1, 0).Value = 1 
    End If 

    txtCount = r.Offset(1, 0).Value 

    'the other code in your procedure... 

End Sub 

顯然,你需要一個名爲Var_Sht片,但你可以使紙張非常隱蔽的讓你的用戶看不到它。

工作表將在A1中存儲日期,在A2中存儲日常計數器。代碼運行時,如果A1中的日期不等於Date函數,那麼我們知道A1中的日期不是今天,所以我們重置計數器並更新A1中的日期。