- ベストアンサー
VBAテーブルへの登録方法
- VBAを使用して社員登録システムを作成する方法を教えてください。
- 指定したIDとパスワードをテーブルに登録する方法を教えてください。
- 特定の権限を選択した場合に、テーブルの権限欄に対応する値を保存する方法を教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
元が If Len(ID) = 5 Then '5桁の時の操作 For nRow = nStartRow To nEndRow 中略 Exit For Next の状態でForの外側のIfが閉じていないと思いますので Exit For Next End If じゃないでしょうか。
その他の回答 (5)
- kkkkkm
- ベストアンサー率66% (1734/2604)
with accountT でした。 ↓ここTが抜けてます。 account.Cells(nRow, 3) = "" Then accountT.Cells(nRow, 3) = ID 'ID , Pを登録する
- kkkkkm
- ベストアンサー率66% (1734/2604)
> With Sheets("社員テーブル") 'with以降は社員テーブル内の動き シートなどのオブジェクトの指定を略して「.」から記載できるというイメージで With account .Cells(nRow, 3) = ID .Cells(nRow, 4) = pass End With のようなイメージです。
- kkkkkm
- ベストアンサー率66% (1734/2604)
> 「End Withに対応するWithがない」とエラーが出て、手詰まりです。 Ifが4個にたいしてEnd Ifが3個なので1個End Ifがたりないように見えます。VBAの「Withがない」エラーメッセージはWith~End With内の他の部分で対応が取れていない場合にも出たと思います。
補足
End Ifが足りないとのことですが、最後の部分に入れても 「対応するがIFがない」と出てしまいます。どこにEnd IFが必要でしょうか? …… If option_admin.Object.Value = True Then accountT.Cells(nRow, 5) = "管理者" ElseIf option_user.Object.Value = True Then accountT.Cells(nRow, 5) = "一般" End If Exit For End If ←(ここに入れました) Next
- imogasi
- ベストアンサー率27% (4737/17069)
質問者路線と違うが参考に。 チェックなど、十分念入りでないが ユーザーフォームにテキストボックス2つ、リストボックス1つとコマンドボタン1つ設ける。 テキストボックス1 ID入力用 テキストボックス2 パスワード入力 リストボックス 一般・管理者を選択用 コマンドボックス 処理進行用 ーー リストボックスのアイテム設定を、シートセル範囲指定(本則)をうざったいので避けて、プログラムから設定した。 Private Sub UserForm_Initialize() Me.ListBox1.List = Array("管理者", "一般") End Sub ーーー Private Sub CommandButton1_Click() Set sh1 = Worksheets("社員テーブル") ID = UserForm1.TextBox1.Text pwd = UserForm1.TextBox2.Text kanri = UserForm1.ListBox1.Text MsgBox ID & " " & pwd If Application.WorksheetFunction.CountIf(Worksheets("社員テーブル").Range("a1:A1000"), ID) = 0 Then MsgBox "新規" r = sh1.Range("A10000").End(xlUp).Row + 1 sh1.Cells(r, "A") = ID sh1.Cells(r, "B") = pwd sh1.Cells(r, "C") = kanri End If End Sub 基データ 「社員テーブル」シート ID password 一般・管理 12345 A2vb2 一般 12346 A2vb3 一般 12349 A2vb4 一般 実行 Sub・ユーザーフォームの実行をクリック ユーザーフォームの画面で 12348 wersd 一般 コマンドボタンをクリック ーー 12348 wersd 一般 の行が最下行の次に追加される。 いろんな点で、チェックを入れたり、丁寧に修正してください。
お礼
私と違う視点での方法を提示してくださり、考え方が広がるで助かります。 ご回答ありがとうございました。
- kkkkkm
- ベストアンサー率66% (1734/2604)
イメージとして > (1)ID,パスワードをそれぞれ数字5桁と指定する Len(文字列)で If Len(ID) = 5 Then 5桁の時の操作 Else 5桁以外の時の操作 End If > (2)Forの中の、テーブルの空白の行にきたらID,Pを登録する > (3) 'option_adminを選んだ場合、社員テーブル(accountT)の権限欄に"管理者"を保存。option_userを選んだ場合も同様に権限欄に"一般"を保存。 With Sheets("シート名") ' シート名はデータを書き込みたい実際のシート名で For nRow = nStartRow To nEndRow 'ID重複チェックはすでに質問にコードがあるので略、重複があればExit Forで抜ける If .Cells(nRow, 3) = "" Then ID , Pを登録する End If If option_admin.Object.Value = True Then .Cells(nRow, 権限の列) = "管理者" ElseIf option_user.Object.Value = True Then .Cells(nRow, 権限の列) = "一般" End If Exit For Next End With
補足
ご回答ありがとうございます。先ほどはお世話になりました。 自分で範囲を指定して書き直してみましたが、「End Withに対応するWithがない」とエラーが出て、手詰まりです。どこを修正すればいいでしょうか? Private Sub cmd_accountR_Click() 'ID,P登録ボタン Dim ID As String Dim pass As String ID = txtID.Text pass = txtpass.Text Dim nStartRow As Integer '開始行 Dim nEndRow As Integer '終了行 nStartRow = 2 nEndRow = accountT.Cells(Rows.Count, 3).End(xlUp).Row With Sheets("社員テーブル") 'with以降は社員テーブル内の動き 'IDは数字5けた,Pは数字5けた 'Len(文字列) If Len(ID) = 5 Then '5桁の時の操作 For nRow = nStartRow To nEndRow If ID = accountT.Cells(nRow, 3) Then 'ID重複があればExit For MsgBox "別のIDを設定してください", vbInformation, "失敗" Exit For Else: MsgBox "IDは数字5桁!" '5桁以外の時の操作 End If If account.Cells(nRow, 3) = "" Then accountT.Cells(nRow, 3) = ID 'ID , Pを登録する accountT.Cells(nRow, 4) = pass 'テーブルの空白の行にID,Pを登録する End If If option_admin.Object.Value = True Then accountT.Cells(nRow, 5) = "管理者" '社員tableの権限に"管理者"を保存 ElseIf option_user.Object.Value = True Then accountT.Cells(nRow, 5) = "一般" '社員tableの権限に"一般"を保存 End If Exit For Next End With End Sub
お礼
ご指摘のとおりに修正し、無事に登録処理ができるようになりました! 丁寧な回答ありがとうごさいます。