Board logo

標題: [發問] TextBox顯示自動編號問題請教﹖ [打印本頁]

作者: ann.liu    時間: 2014-10-28 22:44     標題: TextBox顯示自動編號問題請教﹖

請教各位大大:
是否可以在TextBox顯示A:A最後一個編號再+1
點選CommandButton1後將TextBox顯示的資料COPY到工作表1
附件如下:
[attach]19419[/attach][attach]19420[/attach]
作者: ann.liu    時間: 2014-10-28 23:28     標題: Label日期顯示 格式問題請教

請問各位大大:
VLOOKUP參照編號產生日期,
但日期的格式與工作表1的格式不同,
請問是否可以改成2014/9/5的格式顯示。
[attach]19421[/attach]
[attach]19422[/attach]
作者: luhpro    時間: 2014-10-28 23:46

請問各位大大:
VLOOKUP參照編號產生日期,
但日期的格式與工作表1的格式不同,
請問是否可以改成2014/9 ...
ann.liu 發表於 2014-10-28 23:28

用 Format 函數就可以解決 :
...
Me.lbl建立日期 = Format(Application.VLookup(Me.cmb編號, Worksheets("工作表1").[編號], 2, 0) , "yyyy/m/d")
...
作者: luhpro    時間: 2014-10-29 00:27

請教各位大大:
是否可以在TextBox顯示A:A最後一個編號再+1
點選CommandButton1後將TextBox顯示的資料COP ...
ann.liu 發表於 2014-10-28 22:44

Module1 :
  1. Public iMax%
複製代碼
ThisWorkBook :
  1. Private Sub Workbook_Open()
  2.   Dim lRow&
  3.   Dim sStr$
  4.   
  5.   iMax = 0
  6.   lRow = 2
  7.   Do While Cells(lRow, 1) <> ""
  8.     sStr = Cells(lRow, 1)
  9.     iNum = Val(Mid(sStr, InStr(1, sStr, "-") + 1))
  10.     If iNum >= iMax Then iMax = iNum
  11.     lRow = lRow + 1
  12.   Loop
  13.   UserForm1.Show
  14. End Sub
複製代碼
UserForm1 :
  1. Private Sub cb輸入_Click()

  2.     With Sheets("工作表1")
  3.         If Application.WorksheetFunction.CountIf(.Range("a:a"), txt編號) > 0 Then
  4.             MsgBox "編號已存在!", vbCritical, "錯誤"
  5.             Exit Sub
  6.         End If
  7.         With .Range("A65536").End(xlUp)
  8.            
  9.             .Range("A2") = txt編號.Text
  10.             iMax = iMax + 1
  11.             txt編號.Text = "AL-" & Right("000" & iMax + 1, 3)
  12.         End With
  13.     End With
  14. End Sub

  15. Private Sub UserForm_Initialize()
  16.   txt編號.Text = "AL-" & Right("000" & iMax + 1, 3)
  17. End Sub
複製代碼
[attach]19423[/attach]
作者: GBKEE    時間: 2014-10-29 08:51

回復 2# luhpro
另一寫法
UserForm模組
  1. Option Explicit
  2. Dim D As Object
  3. Private Sub UserForm_Initialize()
  4.     txt編號 = 編號
  5. End Sub
  6. Private Sub cb輸入_Click()
  7.     With Sheets("工作表1")
  8.         If Application.CountIf(.Range("a:a"), txt編號) > 0 And txt編號 <> "" Then
  9.             MsgBox "編號已存在!", vbCritical, "錯誤"
  10.             Exit Sub
  11.         ElseIf UBound(Split(txt編號, "-")) = 0 Or txt編號 = "" Then
  12.             MsgBox "編號 格式 錯誤!", vbCritical, "錯誤"
  13.             Exit Sub
  14.         ElseIf UCase(txt編號) <> "AL-" & Format(Application.Max(D.KEYS) + 1, "000") Then
  15.             MsgBox txt編號 & " 需是 " & "AL-" & Format(Application.Max(D.KEYS) + 1, "000"), vbCritical, "錯誤"
  16.             Exit Sub
  17.         End If
  18.         .Range("A65536").End(xlUp).Cells(2) = txt編號
  19.         D(Application.Max(D.KEYS) + 1) = ""
  20.     End With
  21. End Sub
  22. Private Sub CommandButton2_Click() 'cb輸入後,可繼續 + 1
  23.     txt編號 = "AL-" & Format(Application.Max(D.KEYS) + 1, "000")
  24. End Sub
  25. Private Function 編號() As String
  26.     Dim E As Range
  27.     Set D = CreateObject("SCRIPTING.DICTIONARY")
  28.     For Each E In 工作表1.Range("A:A").SpecialCells(xlCellTypeConstants)
  29.         If UBound(Split(E, "-")) > 0 Then D(Val(Split(E, "-")(1))) = ""
  30.     Next
  31.     If D.Count = 0 Then
  32.         編號 = "AL-001"
  33.         D(0) = ""
  34.     Else
  35.         編號 = "AL-" & Format(Application.Max(D.KEYS) + 1, "000")
  36.     End If
  37. End Function
複製代碼

作者: ann.liu    時間: 2014-10-31 09:36

[attach]19432[/attach][attach]19432[/attach]回復 5# GBKEE

感謝luhpro與GBKEE大大的回覆,二位大大的方法都是可以使用。

另外要請教luhpro大大
1.如果我有4個UserForm 都要自動編號,編號都要自動帶出,
我重新製作另外三個表單,但號碼會亂跳,不知錯誤在那,請大大指教﹖

2.我做了4個按鈕點選需要的表單,不要開始excel就自動跳出視窗,
請問大大要如何編寫呢﹖
3.日期顯示可以加上時間嗎﹖
Me.lbl建立日期 = Format(Application.VLookup(Me.cmb編號, Worksheets("工作表1").[編號], 2, 0) , "yyyy/m/d")
   附檔: [attach]19432[/attach]
另外要請教GBKEE大大
表單如果要連續輸入好幾筆,是否可以自動進位呢
1.        Private Sub CommandButton2_Click() 'cb輸入後,可繼續 + 1
2.        txt編號 = "AL-" & Format(Application.Max(D.KEYS) + 1, "000")
3.        End Sub
作者: GBKEE    時間: 2014-10-31 09:54

回復 6# ann.liu

表單如果要連續輸入好幾筆,是否可以自動進位呢
試試看
  1. Private Sub cb輸入_Click()
  2.     With Sheets("工作表1")
  3.         If Application.CountIf(.Range("a:a"), txt編號) > 0 And txt編號 <> "" Then
  4.             MsgBox "編號已存在!", vbCritical, "錯誤"
  5.             Exit Sub
  6.         ElseIf UBound(Split(txt編號, "-")) = 0 Or txt編號 = "" Then
  7.             MsgBox "編號 格式 錯誤!", vbCritical, "錯誤"
  8.             Exit Sub
  9.         ElseIf UCase(txt編號) <> "AL-" & Format(Application.Max(D.KEYS) + 1, "000") Then
  10.             MsgBox txt編號 & " 需是 " & "AL-" & Format(Application.Max(D.KEYS) + 1, "000"), vbCritical, "錯誤"
  11.             Exit Sub
  12.         End If
  13.         .Range("A65536").End(xlUp).Cells(2) = txt編號
  14.         D(Application.Max(D.KEYS) + 1) = ""
  15.         txt編號 = "AL-" & Format(Application.Max(D.KEYS), "000")
  16.     End With
  17. End Sub
複製代碼

作者: ann.liu    時間: 2014-10-31 11:11

GBKEE大大
試後還是不能自動進號
作者: luhpro    時間: 2014-11-2 22:49

本帖最後由 luhpro 於 2014-11-2 22:52 編輯
1.如果我有4個UserForm 都要自動編號,編號都要自動帶出,
我重新製作另外三個表單,但號碼會亂跳,不知錯誤在那,請大大指教﹖
2.我做了4個按鈕點選需要的表單,不要開始excel就自動跳出視窗,
請問大大要如何編寫呢﹖
3.日期顯示可以加上時間嗎﹖
Me.lbl建立日期 = Format(Application.VLookup(Me.cmb編號, Worksheets("工作表1").[編號], 2, 0) , "yyyy/m/d") ...
ann.liu 發表於 2014-10-31 09:36

我重做了.
1. 刪除 開啟表格 工作表, 刪除其他多的 UserForm, 只保留一個 UserForm 實現相關功能, 保留日後新增工作表的彈性, 只要名稱開頭為 "工作表" 就會自動加入選擇序列, 目前可在 Userform 上直接切換工作表與增號.
2. 啟動 UserForm 按鈕放在上方 功能表區 中 說明 的右邊, 那個按鈕點一下即可開啟 UserForm.
3. 因為你沒有說明日期時間取值的標準,我直接帶入目前時間.
4. 在工作表選單切換時, 各工作表中 B1 的值會帶到 姓名 標題欄, 保留彈性調整顯示的可能性.
5. 新增的工作表須自行輸入 A1,B1,C1 的標題名稱, A2 則輸入新的編號
6. 部分地方可能還有 BUG ,時間不夠來不及一一測試.
ufTar (UserForm)
  1. Private Sub cbSheet_Change()
  2.   Dim bNFind As Boolean
  3.   Dim vA
  4.   
  5.   bNFind = True
  6.   For Each vA In ufTar.cbSheet.List
  7.     If vA = ActiveSheet.Name Then bNFind = False
  8.   Next
  9.   If bNFind Then GetSht
  10.   SetForm
  11. End Sub

  12. Private Sub cb輸入2_Click()
  13.   Dim sStr$
  14.   
  15.   sStr = CStr(cbSheet)
  16.   With Sheets(sStr)
  17.       If Application.WorksheetFunction.CountIf(.Range("a:a"), txt編號2) > 0 Then
  18.           MsgBox "編號已存在!", vbCritical, "錯誤"
  19.           Exit Sub
  20.       End If
  21.       With .Range("A65536").End(xlUp)
  22.          
  23.           .Range("A2") = txt編號2
  24.           .Range("B2") = txt姓名1
  25.           .Range("C2") = txt日期1
  26.           iMax(vNo(vSh(sStr))) = iMax(vNo(vSh(sStr))) + 1
  27.           txt編號2.Text = vSh(sStr) & "-" & Right("0000" & iMax(vNo(vSh(sStr))) + 1, 4)
  28.       End With
  29.   End With
  30. End Sub

  31. Private Sub txt日期1_Change()
  32.   Dim sStr$
  33.   
  34.   sStr = IIf(Hour(Now) > 12, "下午", "上午")
  35.   txt日期1 = Format(Now, "yyyy/m/d " & sStr & Format(Now, " h:mm"))
  36. End Sub

  37. Public Sub UserForm_Initialize()
  38.   Dim sStr$
  39.   Dim vA
  40.   
  41.   GetSht
  42.   sStr = ActiveSheet.Name
  43.   With cbSheet
  44.     .Clear
  45.     For Each vA In vSh
  46.       .AddItem vA
  47.       If vA = sStr Then .Value = sStr
  48.     Next
  49.     If .Value = "" Then
  50.       .ListIndex = 0
  51.     End If
  52.   End With
  53.   SetForm
  54. End Sub

  55. Private Sub SetForm()
  56.   Dim sStr$
  57.   
  58.   Application.CommandBars(1).Controls(iBtn).Visible = False
  59.   sStr = CStr(cbSheet)
  60.   Sheets(sStr).Select
  61.   txt編號2.Text = vSh(sStr) & "-" & Right("0000" & iMax(vNo(vSh(sStr))) + 1, 4)
  62.   Label2.Caption = Sheets(sStr).[B1]
  63.   txt日期1 = Format(Now, "yyyy/m/d " & sStr & Format(Now, " h:mm"))
  64. End Sub

  65. Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  66.    Application.CommandBars(1).Controls(iBtn).Visible = True
  67. End Sub
複製代碼
ThisWorkBook
  1. Private Sub Workbook_Open()
  2.   SetButton (False)
  3.   GetSht
  4.   SetButton (True)
  5. End Sub

  6. Private Sub SetButton(bSw As Boolean)
  7.   Dim sName$
  8.   Dim bNFind As Boolean
  9.   Dim vC, tcbLdData
  10.   
  11.   sName = "開啟表格"
  12.   If Not bSw Then
  13.     For Each vC In Application.CommandBars(1).Controls
  14.       With vC
  15.         If .Caption = sName Then
  16.           .Visible = False
  17.           iBtn = .Index
  18.         End If
  19.       End With
  20.     Next
  21.   Else
  22.     bNFind = True
  23.     For Each vC In Application.CommandBars(1).Controls
  24.       With vC
  25.         If .Caption = sName Then
  26.           bNFind = False
  27.           .Visible = True
  28.           iBtn = .Index
  29.         End If
  30.       End With
  31.     Next
  32.   
  33.     If bNFind Then
  34.       Set tcbLdData = Application.CommandBars(1).Controls.Add(Type:=msoControlButton)
  35.       With tcbLdData
  36.         .Caption = sName
  37.         .FaceId = 2778
  38.         .OnAction = "ShowForm"
  39.         iBtn = .Index
  40.       End With
  41.     End If
  42.   End If
  43. End Sub

  44. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  45.   Application.CommandBars(1).Controls(iBtn).Delete
  46. End Sub
複製代碼
Module1
  1. Public iMax%(), iBtn%
  2. Public vNo, vSh

  3. Option Explicit

  4. Public Sub ShowForm()

  5. On Error GoTo ErrShowForm
  6.   With ufTar
  7.     If .Visible = False Then .Show
  8.   End With
  9.   
  10. On Error GoTo 0
  11.   Exit Sub

  12. ErrShowForm:

  13.   Select Case Err.Number
  14.   
  15.     Case 424 ' 此處需要物件
  16.       ufTar.Show
  17.       
  18.       
  19.     Case 13 ' 型態不符合
  20.       Set vSh = CreateObject("Scripting.Dictionary")
  21.       Set vNo = CreateObject("Scripting.Dictionary")
  22.       ReDim iMax(0)
  23.       
  24.     Case Else
  25.       On Error GoTo 0
  26.   End Select
  27.   Resume
  28. End Sub

  29. Public Sub GetSht()
  30.   Dim iNum%
  31.   Dim lRow&
  32.   Dim sStr$
  33.   Dim bNFind1 As Boolean, bNFind2 As Boolean
  34.   Dim vA, vB

  35. On Error GoTo ErrGetSht
  36.   
  37.   bNFind2 = False
  38.   For Each vA In Worksheets
  39.     bNFind1 = True
  40.     For Each vB In vSh
  41.       If vB = vA.Name Then
  42.         bNFind1 = False
  43.         Exit For
  44.       End If
  45.     Next
  46.     If bNFind1 Then
  47.       bNFind2 = True
  48.       Exit For
  49.     End If
  50.   Next
  51.   
  52.   If Not bNFind2 Then
  53.     bNFind2 = False
  54.     For Each vA In vSh
  55.       bNFind1 = True
  56.       For Each vB In Worksheets
  57.         If vB.Name = vA Then
  58.           bNFind1 = False
  59.           Exit For
  60.         End If
  61.       Next
  62.       If bNFind1 Then
  63.         bNFind2 = True
  64.         Exit For
  65.       End If
  66.     Next
  67.   End If
  68.   
  69.   If bNFind2 Then
  70.     GoSub SetSel
  71.   End If

  72. On Error GoTo 0
  73.   Exit Sub


  74. SetSel:
  75.   Set vSh = CreateObject("Scripting.Dictionary")
  76.   Set vNo = CreateObject("Scripting.Dictionary")
  77.   ReDim iMax(0)
  78.   For Each vA In Worksheets
  79.     With vA
  80.       If .Name Like "工作表*" Then
  81.         If .[A2] = "" Then .[A2] = "xxx-0001"
  82.         sStr = Left(.[A2], InStrRev(.[A2], "-") - 1)
  83.         vSh(CStr(.Name)) = sStr
  84.         ReDim Preserve iMax(UBound(iMax, 1) + 1)
  85.         iMax(UBound(iMax, 1)) = 0
  86.         vNo(sStr) = UBound(iMax, 1)
  87.   
  88.         lRow = 2
  89.         Do While .Cells(lRow, 1) <> ""
  90.           sStr = .Cells(lRow, 1)
  91.           iNum = Val(Mid(sStr, InStrRev(sStr, "-") + 1))
  92.           If iNum >= iMax(UBound(iMax, 1)) Then iMax(UBound(iMax, 1)) = iNum
  93.           lRow = lRow + 1
  94.         Loop
  95.       End If
  96.     End With
  97.   Next
  98. Return


  99. ErrGetSht:

  100.   Select Case Err.Number
  101.   
  102.     Case 424 ' 此處需要物件
  103.       Set vSh = CreateObject("Scripting.Dictionary")
  104.       Set vNo = CreateObject("Scripting.Dictionary")
  105.       ReDim iMax(0)
  106.    
  107.     Case 13 ' 型態不符合
  108.       Set vSh = CreateObject("Scripting.Dictionary")
  109.       Set vNo = CreateObject("Scripting.Dictionary")
  110.       ReDim iMax(0)
  111.    
  112.     Case Else
  113.       On Error GoTo 0
  114.   End Select
  115.   Resume
  116. End Sub
複製代碼
[attach]19462[/attach]
作者: ann.liu    時間: 2014-11-4 20:02

感謝luhpro大大:
你的寫法測試後,真是讓我太佩服了,雖然程式不是很了解,
但會努力的研究,檔案就先收下,慢慢研究了,感恩。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)