@@akios8492 お世話になります。 パソコンからログインしてコピペしたら簡単に貼り付けることができました。 動画では項目数を20とされていましたが、当方10項目としデータを入力する項目を2から10までの9つに変更しています。 また、最初にコメントさせていただいたときには3行目のFor i = 1 to 10から18行目のNextまでは入力していない状況でしたが、前述のエラーが出るためこの3から18行も追加したほうが良いのかと思い、追加入力して実行してみたのですが…今度は 4行目の If Me.Controls("Label" & i).ForeColor = vbRed Thenでデバックが発生するようになりました。ただ、3行目から18行目の内容もフォームで入力する際には、”氏名を入力してください”等のコメントはきちんと表示されています。 実際に入力したプログラムを以下に転記しますので、目を通していただけたら幸いです。 よろしくお願いいたします。 Private Sub CommandButton1_Click() Dim i, j, rowLast As Long For i = 1 To 10 If Me.Controls("Label" & i).ForeColor = vbRed Then If Me.Controls("ComboBox" & i).Value = "" Then MsgBox Me.Controls("Label" & i).Caption & "を入力してください" Me.Controls("ComboBox" & i).SetFocus Exit Sub End If End If If Me.Controls("Label" & i).ForeColor = vbBlue Then If IsDate(Me.Controls("ComboBox" & i).Value) = False Then MsgBox Me.Controls("Label" & i).Caption & "日付型で入力してください" Me.Controls("ComboBox" & i).SetFocus Exit Sub End If End If Next With Worksheets("患者データベース") rowLast = .Cells(Rows.Count, 1).End(xlUp).Row .Cells(rowLast + 1, 1).Value = "=row() - 1" .Cells(rowLast + 1, 2).Value = Application.WorksheetFunction.Max(.Columns(2)) + 1 For i = 1 To 10 For j = 2 To .Cells(1, Columns.Count).End(xlToLeft).Column If Me.Controls("Label" & i).Caption = .Cells(1, j).Value Then .Cells(rowLast + 1, j).Value = Me.Controls("ComboBox" & i).Value End If Next Next End With For i = 1 To 10 Me.Controls("ComboBox" & i).Value = "" Next Me.ComboBox1.SetFocus End Sub Private Sub UserForm_Initialize() Dim a As Long For a = 2 To 10 If Worksheets("患者データベース").Cells(1, a).Value "" Then Me.Controls("label" & a - 1).Caption = Worksheets("患者データベース").Cells(1, a).Value End If Next With Worksheets("項目設定") Dim b, c, rowLast, i As Long For b = 1 To 9 For c = 2 To .Cells(4, Columns.Count).End(xlToLeft).Column If Me.Controls("Label" & b).Caption = .Cells(4, c).Value Then If .Cells(1, c).Value = "○" Then Me.Controls("Label" & b).ForeColor = vbRed End If If .Cells(2, c).Value = "○" Then Me.Controls("Label" & b).ForeColor = vbBlue End If If .Cells(3, c).Value = 1 Then Me.Controls("combobox" & b).IMEMode = 1 End If If .Cells(3, c).Value = 3 Then Me.Controls("combobox" & b).IMEMode = 3 End If rowLast = .Cells(Rows.Count, c).End(xlUp).Row For i = 5 To rowLast Me.Controls("combobox" & b).AddItem .Cells(i, c).Value Next End If Next Next End With End Sub
とてもわかりやすい説明ありがとうございます。
何度も拝見したのですが、初心者のためつまずいています。。厚かましいお願いですが、コードをコピーさせて頂けないでしょうか?
よろしくお願いいたします。
度々すみません。もう一度一連の動画を見直して挑戦したところうまく動きました。
コードをコピーして頂かなくて大丈夫そうです。他の動画も参考にさせて頂きます。
ありがとうございました。
初めまして!
コメント失礼します。
いつも大変参考になります。
今回は、Excelマクロ!フォーム中級編(その5)(登録ボタン・シートへデータの追加)の動画で質問したいのですが、
【日付型で入力してください】のところまでうまく出来ましたが、その後上手く出来ず教えていただきたいのですが!
1,動画のコードを入力後、foamに入力し登録ボタンを押しましたが、データベースに反映しません!
「コンパイルエラー」変数が定義されていません)と表示されます。
その際、rowlast=にエラーが表示されます。
お忙しいところ恐れ入りますが、ご教示宜しくお願い致します。
🏁
貴重な動画ありがとうございます。
コードはコピペできる形で公開されませんでしょうか?
ご視聴ありがとうございます!
ご希望があれば、コメント欄にコードを掲載することが可能です。
フォームのラベルとコンボボックスさえ正しく配置していただければ使えるようになると思います。
早々の返信ありがとうございます。
もう一度、動画を見返させて頂き、チャレンジしてみます。
その3動画に加え、本動画でも質問をさせて下さい。度々すみません。
動画後半で、データベースシートに血液型の項目を追加した点について。
項目追加はできたのですが、ユーザーフォーカス上にてtabキーで画面遷移すると、追加した血液型だけリスト項目が出ませんでした。
マウスでクリックすれば出るのですが、その他と同じ動きに統一出来ればと考えております。
私のコード入力ミスも含め、想定される原因をお伺いさせて下さい。
考えられる点としては、
・その4の動画の、コンボボックスにカーソルが移動したとき選択肢を自動で表示のプログラムを入力していない。
・エクセルのフォームの使用でコンボボックスが連続で配置されているときに、連続でタブキーを押すとコンボボックスの選択肢が、自動で表示されない不具合。
です。
すぐに思いつくのはこの2点になります。
動画その3に加え、ご丁寧な説明をして頂き、誠にありがとうございます。
オブジェクトに対しプロパティ、メソッドの使い分けは、まだ理解しきれておりませんが、少しずつ慣れていければと思います。
現在、教わったコードを活用して、送付状や見積書などのExcelシート上で今回のUserForm1を起動させ、今回のデータベースシートに加えて、各種Excelフォームシートの特定セルにも代入出来る様にしていきたいと考えています。未熟者故、手詰まり状態です。
今回のフォームはとても汎用性があり、利用シーンが広がると思います。今後、Akio’sさんが可能であれば、更なるStep UP動画をご投稿頂けると嬉しいです。
非常にわかりやすい動画でした。ありがとうございました。
一つ困っていることがあり、教えていただければ幸いです。
最後の、UserFormを呼び出すボタン1ですが、
「データベースシート」にボタン1を作成して呼び出すと、今までのFormで書いたコードが反映されず(赤色にならない、選択肢が自動ででてくる、日付の場合、IMEで英数にするなど)困っています。
逆に、ボタン1を「項目設定」のシート上に張り付けて、ボタンを押すと、しっかり動きます。
動画通りにコードを書いたつおりなのですが、迷宮入りしています・・・
お手数ですが、ご助言をいただきたです。よろしくお願いいたします。
こんにちは。ご視聴ありがとうございます!
おそらくコードを入力したときに「.Cells(~~~」の「.」を忘れてしまっているのではないかと思います(汗)
.を忘れてしまうとボタンが設置されているシート(表示されているシート)のセルの値になってしまいます。
その関係でデータベースシートと項目設定シートが混同してしまっているように思えます。
@@akios8492 ご回答ありがとうございます。ご指摘のとおり、一か所「.」が所抜けており、正常に動くようになりました!!誠に感謝申し上げます。引き続き、動画のupを楽しみにしております
プログラムをダウンロードできると助かります
よろしくお願いいたします
動画を観ながらプログラムを入力しマクロを実行すると、[指定されたオブジェクトはみつかりません]という実行時エラーが表示されて
If Me.Controls("Label" & i).Caption = .Cells(1, j).Value then
の行でデバッグが発生します
データベースsheetにフォームから入力したデータはきちんと送られています
何故デバッグが要求されるのか、いくら見直しても分からりません
お手数をおかけしますが、ご教示いただけないでしょうか?
ご視聴ありがとうございます!
もし可能であれば入力したプログラムをすべてコメント欄に入力していただいてもよろしいでしょうか?
前後のプログラムを確認してエラーが出てしまう原因を確認したいと思います。
データがきちんと送られているということは、もしかしたらラベルの名前がLabel1~Label20に設定されていない可能性もあります。
お手数ですがよろしくお願いいたします。
@@akios8492 ご返信ありがとうございます
自分なりの項目に作り替えたりしていますので、その辺が上手く流れない理由かも知れません
お言葉に甘えて、作成したプログラムの全文をこちらに記載してみようと思いますので、少々時間をいただけないでしょうか?
日曜日くらいには再度返信出来るように頑張ってみます
お手数をおかけしますが、よろしくお願いいたします
@@akios8492
お世話になります。
パソコンからログインしてコピペしたら簡単に貼り付けることができました。
動画では項目数を20とされていましたが、当方10項目としデータを入力する項目を2から10までの9つに変更しています。
また、最初にコメントさせていただいたときには3行目のFor i = 1 to 10から18行目のNextまでは入力していない状況でしたが、前述のエラーが出るためこの3から18行も追加したほうが良いのかと思い、追加入力して実行してみたのですが…今度は 4行目の If Me.Controls("Label" & i).ForeColor = vbRed Thenでデバックが発生するようになりました。ただ、3行目から18行目の内容もフォームで入力する際には、”氏名を入力してください”等のコメントはきちんと表示されています。
実際に入力したプログラムを以下に転記しますので、目を通していただけたら幸いです。
よろしくお願いいたします。
Private Sub CommandButton1_Click()
Dim i, j, rowLast As Long
For i = 1 To 10
If Me.Controls("Label" & i).ForeColor = vbRed Then
If Me.Controls("ComboBox" & i).Value = "" Then
MsgBox Me.Controls("Label" & i).Caption & "を入力してください"
Me.Controls("ComboBox" & i).SetFocus
Exit Sub
End If
End If
If Me.Controls("Label" & i).ForeColor = vbBlue Then
If IsDate(Me.Controls("ComboBox" & i).Value) = False Then
MsgBox Me.Controls("Label" & i).Caption & "日付型で入力してください"
Me.Controls("ComboBox" & i).SetFocus
Exit Sub
End If
End If
Next
With Worksheets("患者データベース")
rowLast = .Cells(Rows.Count, 1).End(xlUp).Row
.Cells(rowLast + 1, 1).Value = "=row() - 1"
.Cells(rowLast + 1, 2).Value = Application.WorksheetFunction.Max(.Columns(2)) + 1
For i = 1 To 10
For j = 2 To .Cells(1, Columns.Count).End(xlToLeft).Column
If Me.Controls("Label" & i).Caption = .Cells(1, j).Value Then
.Cells(rowLast + 1, j).Value = Me.Controls("ComboBox" & i).Value
End If
Next
Next
End With
For i = 1 To 10
Me.Controls("ComboBox" & i).Value = ""
Next
Me.ComboBox1.SetFocus
End Sub
Private Sub UserForm_Initialize()
Dim a As Long
For a = 2 To 10
If Worksheets("患者データベース").Cells(1, a).Value "" Then
Me.Controls("label" & a - 1).Caption = Worksheets("患者データベース").Cells(1, a).Value
End If
Next
With Worksheets("項目設定")
Dim b, c, rowLast, i As Long
For b = 1 To 9
For c = 2 To .Cells(4, Columns.Count).End(xlToLeft).Column
If Me.Controls("Label" & b).Caption = .Cells(4, c).Value Then
If .Cells(1, c).Value = "○" Then
Me.Controls("Label" & b).ForeColor = vbRed
End If
If .Cells(2, c).Value = "○" Then
Me.Controls("Label" & b).ForeColor = vbBlue
End If
If .Cells(3, c).Value = 1 Then
Me.Controls("combobox" & b).IMEMode = 1
End If
If .Cells(3, c).Value = 3 Then
Me.Controls("combobox" & b).IMEMode = 3
End If
rowLast = .Cells(Rows.Count, c).End(xlUp).Row
For i = 5 To rowLast
Me.Controls("combobox" & b).AddItem .Cells(i, c).Value
Next
End If
Next
Next
End With
End Sub
1つ確認したいことがあります。
動画ではID列があると思うのですが、take f 様はお使いでしょうか?
それにより少し気になるところが変わってきます。
ご返信お待ちしております。
@@akios8492
ご連絡ありがとうございます。
1列目は動画の通り”No.”列、2列目は”患者ID”列、3列目は”氏名”列としています。
2列目以降を入力項目として設定しています。
”患者ID”は受け付け順に割り振られる値のため、フォームから入力できる項目としました。
ご質問の答えになっていますでしょうか?
不足がありましたら再度ご連絡ください。
よろしくお願いいたします。