返回列表 上一主題 發帖

[發問] TextBox顯示自動編號問題請教﹖

請問各位大大:
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")
...

TOP

請教各位大大:
是否可以在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
複製代碼
TEXT-a.zip (16.77 KB)

TOP

本帖最後由 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
複製代碼
TEXT-a.zip (25.55 KB)

TOP

        靜思自在 : 對父母要知恩,感恩、報恩。
返回列表 上一主題