返回列表 上一主題 發帖

vba求援

vba求援

項目UserForm26.Show,要如何輸入完B37~B49往右下在輸入C37~C49......到M37~M49
項目UserForm12.Show,要如何輸入完B50~B54往右下在輸入C50~C54......到P50~P54
及身分證驗證

表單輸入格式.rar (52.8 KB)

回復 1# sillykin
提供 UserForm26 步驟請自行參考並撰寫(於確定鈕加入程式碼):

1.點選 [確定] 鈕後,警告是否真的要將資料寫入工作表,若不是的話則退出程序,主要的用意是避免誤觸機制。
2.從第37列的最右欄往左找到有資料的欄(依你的範例是找到B欄),再加1欄(依你的範例加1後是C欄)。
   程式碼: 定位欄 = Cells(37, Cells.Columns.Count).End(1).Column + 1
3.檢查該 [定位欄] 是否大於M欄,若是的話則警告"禁止再次寫入"訊息後退出程序。
4.將 UserForm26 內文字方塊的資料,依據 [定位欄] 的欄位,依序寫入工作表的儲存格內。
5.完成寫入後,清除 UserForm26 內的資料,做為準備下一筆的資料登錄作業。

上述第5項也可以用 Unload UserForm26 方法來關掉 UserForm26,因為 UserForm26 你並沒有另外結束或退出的按鈕。

而 UserForm12 之作法亦如上。

TOP

回復 2# Kubi


    感謝回覆...
但試了還是不行,可能是自身能力不太好

TOP

本帖最後由 GBKEE 於 2017-3-12 07:46 編輯

回復 3# sillykin

試試看
  1. Private Sub TextBox3_Change()
  2.     Dim Msg As Boolean
  3.     '基本身分證驗證,
  4.             '1.為要10碼 -> Len(TextBox3) = 10
  5.             '2 第一碼為英文字母後9碼全為數字 ->TextBox3.Text Like "[A-z]#########"
  6.             
  7.    '**** 但實際上政府有身分證的驗證規則 *****
  8.     Msg = Len(TextBox3) = 10 And TextBox3.Text Like "[A-z]#########"   '其中一項不為真 Msg =False
  9.     'Label18.為表單上,統一編號的Label控制項
  10.     Label18.BackColor = IIf(Msg, &HFFFFC0, &HFF&)  '指定物件的背景色彩。
  11.    
  12. End Sub

  13. Private Sub CommandButton2_Click()  '表單上資料輸入,請新增一按鈕,此按鍵紐的程式碼
  14.     Dim Msg As String, Ar(), E As Variant, Rng As Range
  15.     Ar = Array(TextBox2, TextBox3, TextBox4, TextBox5, TextBox6)  '控制項置入陣列
  16.     '********防呆程式碼**********
  17.     Msg = IIf(Label18.BackColor = &HFF&, "統一編號 有錯誤", "")
  18.     For Each E In Ar
  19.         If E = "" Then Msg = Msg & IIf(Msg <> "", vbLf, "") & "資料輸入不齊全": Exit For
  20.     Next
  21.     If Msg <> "" Then MsgBox Msg: Exit Sub
  22.     Set Rng = Range("b50:P50")              '指定的位置
  23.     E = Application.CountA(Rng)             '計算位置中有資料的個數
  24.     '**指定位置,資料位置的檢查
  25.     If E > 0 Then
  26.         If E = Rng.Cells.Count Then MsgBox "資料已滿 ! 請檢查 ": Exit Sub  
  27.         If Rng.Cells(E).Address <> Rng.Cells(Rng.Cells.Count).End(xlToLeft).Address Then MsgBox "資料位置有誤 ! 請檢查 ": Exit Sub
  28.     End If
  29.    
  30.     '********防呆結束**********
  31.     If MsgBox("確定 輸入資料!", vbYesNo) = vbNo Then Exit Sub
  32.     '******資料輸入*************************************
  33.     With Rng.Offset(0, E)
  34.         .Resize(UBound(Ar) + 1, 1).Value = Application.WorksheetFunction.Transpose(Ar)
  35.     End With
  36. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 sillykin 於 2017-3-11 22:53 編輯

回復 4# GBKEE


    感謝G大的回覆
但要輸入到D50發生錯誤
身分證無法驗證...不知是否我放錯位置了嗎???
請大師指點

資料有誤.JPG (150.77 KB)

資料有誤.JPG

表單輸入格式.rar (60.68 KB)

TOP

回復 5# sillykin

這行程式碼是錯誤多餘的請刪掉
  1.       If Rng.Cells(Rng.Cells.Count).End(xlToLeft).Address <> Rng.Cells(1).Address Then MsgBox "資料位置有誤 ! 請檢查 ": Exit Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 sillykin 於 2017-3-12 11:26 編輯

回復 6# GBKEE


    謝謝G大的回覆
    巳刪除此條  If Rng.Cells(Rng.Cells.Count).End(xlToLeft).Address <> Rng.Cells(1).Address Then MsgBox "資料位置有誤 ! 請檢查 ": Exit Sub可正常運作
,但輸入身分證還是無法檢驗是否輸入正確與否?
是要在加入政府驗證程序嗎???
例如
      Private Sub Worksheet_Change(ByVal Target As Range) '借戶身分證檢查
Dim T, i%, S
With Target
      If .Count > 1 Then Exit Sub
      If Intersect([B51:P51], .Cells) Is Nothing Then Exit Sub
      Application.EnableEvents = False
      .Value = UCase(.Value)
      Application.EnableEvents = True
      
      If Not .Value Like "[A-Z]#########" Then MsgBox "身份證輸入錯誤!!": Exit Sub
      T = InStr("ABCDEFGHJKLMNPQRSTUVXYWZIO", Left(.Value, 1)) + 9 & Mid(.Value, 2, 8)
      For i = 1 To 10
          S = S + Mid(T, i, 1) * Left(11 - i, 1)
      Next i
      T = Right(10 - Right(S, 1), 1)
      If T <> Mid(.Value, 10, 1) Then MsgBox "身份證字號錯誤!檢查碼:" & T
End With
小妹不才

TOP

回復 7# sillykin


   
  1. Private Sub TextBox3_Change()
  2.     Dim Msg As Boolean
  3.     '基本身分證驗證,
  4.             '1.為要10碼 -> Len(TextBox3) = 10
  5.             '2 第一碼為英文字母後9碼全為數字 ->TextBox3.Text Like "[A-z]#########"
  6.    '**** 但實際上政府有身分證的驗證規則 *****
  7.     Msg = Len(TextBox3) = 10 And TextBox3.Text Like "[A-z]#########"   '其中一項不為真 Msg =False
  8.     'Label18.為表單上,統一編號的Label控制項
  9.     Label18.BackColor = IIf(Msg, &HFFFFC0, &HFF&)  '指定物件的背景色彩。
  10.     If Msg Then 檢查碼
  11. End Sub
  12. Function 檢查碼() As Boolean      '身分證最後一碼檢查
  13.     Dim T As String, I As Integer, S As Long
  14.     T = InStr("ABCDEFGHJKLMNPQRSTUVXYWZIO", Left(TextBox3, 1)) + 9 & Mid(TextBox3, 2, 8)
  15.     For I = 1 To 10
  16.         S = S + Mid(T, I, 1) * Left(11 - I, 1)
  17.     Next I
  18.     T = Right(10 - Right(S, 1), 1)
  19.      ' If T <> Mid(TextBox3, 10, 1) Then MsgBox "身份證字號錯誤!檢查碼:" & T
  20.     Label18.BackColor = IIf(T <> Mid(TextBox3, 10, 1), &HFFFFC0, &HFF&)
  21. End Function
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

[版主管理留言]
  • GBKEE(2017/3/12 20:12): 檢查身分證最後一碼的邏輯我不清楚.

回復 8# GBKEE


    謝謝GBKEE耐心教導及指教
但小妹試了身分證輸入錯的身分證也一樣可輸入
而不會出現錯誤請更正
能否在請GBKEE大大能在指導一下嗎???

TOP

        靜思自在 : 滴水成河。粒米成蘿,勿輕己靈,勿以善小而不為。
返回列表 上一主題