• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAのコードを見ていただけませんか)

VBAコードのデータベース作成でエラーが発生する

このQ&Aのポイント
  • Excel2000でデータを格納するフォーム「data」を作成し、メインのシートからデータベースを編集するためのVBAコードがエラーを出してうまくいかない。IDが見つからない、IDが入力されていない場合のメッセージ表示がうまく動作しない。
  • fRangeという変数を使用してdataシートの2列目を検索し、検索したIDの行位置を求めるが、エラーが発生している。
  • CommandButton1を「登録」という名前で設定し、メインシートで入力したデータをdataシートに登録するコードが正常に動作しない。同様にスピンボタンでもエラーが発生してしまう。

質問者が選んだベストアンサー

  • ベストアンサー
  • nobutina
  • ベストアンサー率59% (13/22)
回答No.3

再度の回答となります。 このコードはinputシートのAL1にある値を、 dataシートの2列目(B列)から探しています。 見つからないので、質問のエラーが発生しています。 例えば、AL1に”abc123”と入力してボタンをクリックした際に、 dataシートのB列のどこかに”abc123”が見当たらないと、 質問のようなエラーとなります。 質問者さんは登録と更新をやろうとしているみたいですが、 このコードだと登録は出来ません。 あらかじめdataシートのB列の1行目に”abc123”と入力して AL1に”abc123”と入力してボタンをクリックすると、 row122までの内容が正しく転機されると思います。 登録もしようとしたら、こんな感じかな? ぱっと思いつきなんで、もっといい方法があるかもしれないです。 ※質問者さんの求めている仕様が今一つ理解しきれていないので、あっているのか不安ですが。。。 Private Sub CommandButton1_Click() Dim fRange As Range Dim fRow As Long If (Range("AL1").Value = "") Then 'IDが入力されていない場合 MsgBox "IDを入力して下さい", vbExclamation Exit Sub End If Set fRange = Sheets("data").Columns(2).Find(What:=Range("AL1").Value, _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows) If (fRange Is Nothing) Then 'IDが見つからなかった場合 Sheets("data").Range("B1").Select Selection.End(xlDown).Select fRow = Selection.Row + 1 'MsgBox "IDが見つかりません", vbExclamation 'Exit Sub else fRow = fRange.row 'IDの行位置を求める End If Sheets("data").Cells(fRow, 1).Value = Range("AZ1:BE1").Value Sheets("data").Cells(fRow, 2).Value = Range("AL1").Value Sheets("data").Cells(fRow, 3).Value = Range("AA1:AO1").Value   ’・・・・全部でfRow122まであります End Sub

puyopa
質問者

お礼

ご返事遅くなりました。今更ながら、自分の質問の仕方が悪かったと反省しております。 それにも関わらずこうして、nobutina様にお付き合いいただきまして感謝しております。本当にありがとうございました。 内容については、ご指摘いただいたとおり、dataシートのB列の一行目(タイトル行部分)に、AL1項目の内容を記載すれば、エラーが出ないことが確認できました。 残念ながら、ご提示いただいたコードでは 定義のエラーが出てしまいうまくいきませんでしたが、自分のコードの何が悪かったのかが、理解できたので良かったです。新規登録 と 変更登録 をしっかりと区分けして考えないといけませんね。 改めて、質問内容をコンパクトで明確に的を絞って投稿させていただきたいと思います。 またこの質問板については、もうしばらく回答をお待ちして、この質問を閉じさせていただきたいと思います。 色々とありがとうございました。

その他の回答 (2)

  • nobutina
  • ベストアンサー率59% (13/22)
回答No.2

ぱっと見問題ないように見えます。 ただし他の方が回答されているように、 Range("AL1").Value がメインシートのAL1を指しているのかが怪しいです。 1.コマンドボタンはどのシートに貼り付けてありますか? メインシートであれば問題ないのですが。。。 2.どのように実行していますか?「data」シートをみながらデバッグ実行していませんか? それだとエラーになります。 3.ちょっと下の文の意味がわからない。 >下記コードでCommandButton1ボタンを「登録」と命名し 既に名前を変えているということですか?それとも名前を変えたい、ということですか? コマンドボタンのcaptionをかえたい(変えた)のですか?オブジェクト名をかえたい(変えた)のですか? オブジェクト名が変更済みである場合は、Private Sub CommandButton1_Click()ではなく他のsub関数が動いていると思います。 4.コンパイルはとおっていますか?VBAEditorのデバッグ→VBAProjectのコンパイル を試してみてください。 5.根本的な事を聞きますが、新規登録時には、dataシートのキーは登録済みですよね? 新規登録時にdataシートにキーが登録してなければIDは絶対に見つからないです。。。 つまり、最初にdataシートが空だったら、メインシートにどんな値をいれても見つからないです。。 ご質問の文だといろいろ不明な点があり、いろいろな可能性が考えられます。もう少し詳細に、かつ、質問の内容を絞ってもらうと答えやすいです。

puyopa
質問者

お礼

回答ありがとうございます。 私の説明が至らない部分が色々とあるみたいですみません。その中で解決の糸口を示していただけるのは大変ありがたいです。 1.コマンドボタンはどのシートに貼り付けてありますか? メインシートであれば問題ないのですが。。。 ⇒メインのシートに貼り付けてあります。 2.どのように実行していますか?「data」シートをみながらデバッグ実行していませんか? それだとエラーになります。 ⇒メインのシート上のコマンドボタンを押しております。常に「IDが見つかりません」が表示されて、デバッグは実行できません。 3.ちょっと下の文の意味がわからない。 >下記コードでCommandButton1ボタンを「登録」と命名し 既に名前を変えているということですか?それとも名前を変えたい、ということですか? コマンドボタンのcaptionをかえたい(変えた)のですか?オブジェクト名をかえたい(変えた)のですか? ⇒captionを「登録」に変えただけなので、直接は関係ないと思っています。関係ないなら書くべきではなかったかなと思っています。すみません。 オブジェクト名が変更済みである場合は、Private Sub CommandButton1_Click()ではなく他のsub関数が動いていると思います。 ⇒オブジェクト名は触っておらず、「CommandButton1」のままでした。 4.コンパイルはとおっていますか?VBAEditorのデバッグ→VBAProjectのコンパイル を試してみてください。 ⇒申し訳ありません。今やり方がわからないので、すぐには出来そうにありません。もしやり方が簡単ならば教えていただけないでしょうか? 5.根本的な事を聞きますが、新規登録時には、dataシートのキーは登録済みですよね? 新規登録時にdataシートにキーが登録してなければIDは絶対に見つからないです。。。 つまり、最初にdataシートが空だったら、メインシートにどんな値をいれても見つからないです。。 ⇒・・・!?、えっ?ごめんなさい。キーの登録というのが分からないです。そんな操作があるのでしょうか?まさかそれが原因でしょうか?すみません。やり方を教えていただけないでしょうか?

puyopa
質問者

補足

すみません。書きもれました。 IDの入力セルは間違いなくメインシートのAL1です。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> If (Range("AL1").Value = "") Then 'IDが入力されていない場合 ここでいきなりつまづいているのでは?この時点で、どのシートが選択されていますか? 数行下では > Set fRange = Sheets("data").Columns(2).Find(What:=Range("AL1").Value, _ のように、シートを指定してますよね? 仮にシート名が[input]であるならば If (Sheets("input").Range("AL1").Value = "") Then 'IDが入力されていない場合 のように決めうちするどうなりますか?

puyopa
質問者

お礼

迅速な回答をありがとうございます。 >> If (Range("AL1").Value = "") Then 'IDが入力されていない場合 >ここでいきなりつまづいているのでは?この時点で、どのシートが選択されていますか? メインのシート[input]に書き込んであるコードなので、シートの指定は不要だと、思っていました。 ご指摘の通り、メインのシート名[input]を盛り込んで、コードを修正しましたが、状況は変わりませんでした。 ※元々メインのシート名は回答者様ご指摘の正に[input]でした。

関連するQ&A

専門家に質問してみよう