2016-04-25 56 views
0

我有一個帶有文本框和組合框的小型用戶窗體。工作表中有一個彙總表。我想要的是,當用戶窗體初始化時,代碼應該通過表格列(憑證#即2)並生成文本框2中的下一個數字。使用前綴生成序列號的代碼

這裏是我的代碼:

Private Sub UserForm_Initialize() 

Dim NextNum As Long, prefix As String 
Dim i As Long 

    prefix = "BPV/" 
NextNum = Application.WorksheetFunction.Max(Sheet1.UsedRange.Columns(2)) 

i = NextNum + 1 

Me.TextBox2.Enabled = False 
Me.TextBox2.Value = prefix & i 

End Sub 

當窗體運行,它不計算序列中的下一個數字。請審查並幫助我。

感謝你可能有

+0

確定初始化方法運行?您顯示的代碼無效,因爲在第一個Dim語句結尾處有額外的逗號。 –

+0

確定最大數量的問題是什麼? – jcarroll

+0

是的。它只創建數字1之後它仍然顯示相同的數字... –

回答

0

的一個問題是,BPV是防止Excel中,從確定最大。嘗試如下所示獲取當前最大值。

Sub test() 

    Dim rng As Range 

    Dim fr As Integer 
    Dim lr As Integer 
    Dim i As Integer 
    Dim curr As Integer 
    Dim max As Integer 

    Set rng = Range("A:A") 

    fr = Worksheets("sheet1").Columns(2).Find(What:="*", after:=Cells(1, 1), LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row 
    lr = Worksheets("sheet1").Columns(2).Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Row 


    For i = fr To lr 
     If Cells(i, 2) <> "" Then 
      curr = Mid(Cells(i, 2), 4) 
      If curr > max Then max = curr 
     End If 
    Next i 

    MsgBox (max) 

End Sub 
+0

它不工作,如果我想生成一個非常第一個號碼... –

+0

不,它不,我不寫你是完整的代碼給你。 – jcarroll

2

產生由排順序號將使用Excel函數=row(),然後格式化用以下NumberFormat數最簡單的方法:

"BP\//"000000 

Selection.Numberformat = """BP\//""000000"

enter image description here

0

我需要知道你是如何做到這一點的。但是,假設在調用UserForm的工作表中有一個按鈕(Button1)。下面的代碼正在做類似於你想要實現的東西(我猜...)。

在模塊:

Sub Button1_Click() 
    UserForm1.Show 
End Sub 

在用戶窗體:

Dim NextNum As Long, prefix As String 
Dim i As Long 

Private Sub UserForm_Initialize() 
    prefix = "BPV/" 
    NextNum = Application.WorksheetFunction.Max(Worksheets("Sheet1").Columns(2)) 
    i = NextNum + 1 

    Me.TextBox2.Enabled = False 
    Me.TextBox2.Value = prefix & i 
    Worksheets("Sheet1").Cells(i, 2) = i 
End Sub