• 締切済み

End Sub が必要です。

Excel97使用。 VBAの初心者の質問です。 ユーザーフォームの「OKButton」を押すと 「End Sub が必要です。」のエラーメッセージが・・・ End Subはあるのに Subを入れ子にしてるわけでもないのに 何でエラーになるんでしょうか? 記述は下記のとおりです。 ----- Private Sub OKButton_Click() '所有者欄の設定 Range("F5").Value = "〒" & 所有者〒Box & " " & 所有者住所Box Range("F11").Value = 所有者氏名Box Range("N11").Value = "電話" & 所有者電話Box '管理者欄の設定 Range("F17").Value = "〒" & 管理者〒Box & " " & 管理者住所Box Range("F22").Value = 管理者氏名Box Range("N22").Value = "電話" & 管理者電話Box End Sub ----- Private Sub キャンセルButton_Click() '個別台帳を閉じる Workbooks("個別台帳_" & 入力管理番号 & ".xls").Close False 'フォームを閉じる Unload 個別台帳編集Form End Sub ----- ちなみに下に記述された「キャンセルButton」を 押すと下記のエラーメッセージが出ます。 「End Sub、 End Function または End Property 以降には、コメントのみが記述できます。」 非常に困ってます。

  • vide
  • お礼率59% (101/170)

みんなの回答

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

メニューのツールのマクロからVBE(VisualBasicEditor)を開きます。 VBEのメニューからデバッグのコンパイルを選びます。 エラーの箇所が反転もしくは赤色で表示されますのでそこを確認してください。 >「End Sub が必要です。」のエラーメッセージが・・・End Subはあるのに Private SubのEnd Subがどこか削除していましネストしている状態のようになっているとかEnd Subが少ない状態になっている。 >End Sub、 End Function または End Property 以降には、コメントのみが記述できます。 End Sub以降に何か記述が入っていないか確認してください。 その辺を確認してあれば'を先頭に入れるか余分な記述を削除するかでエラーは回避できると思います。

vide
質問者

お礼

皆さん回答ありがとうございました。 返信が遅れて申し訳ありませんでした。 結局、1段階前のバックアップに戻って 再度作り始めたら素直に進んだので 原因は不明なままですが、「非常に困っている」 状態からは脱出できました。 また同じトラブルが発生した際には 最優先でこのページを参考にしたいと 思います。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 ボタンをクリックする前に、モジュールの メニューのデバッグ(D) のVBAProject のコンパイルをクリックしてください。エラーになっている個所に飛びます。おそらく、最下行に単独の End Sub など、消し忘れが残っているはずです。 それから、コードは、リテラル値で入れずに、CONST などの定数を用いて、代入させたほうがよいです。

回答No.1

 ご提示のコードを実行してみましたが、おっしゃるようなエラーは表示されず、正常に実行されました。  原因は他の部分にあるのではないでしょうか。

関連するQ&A

  • VBAで前々から気になっていることがあります。例えば、

    VBAで前々から気になっていることがあります。例えば、 Private Sub Button検索_Click() 何らかの処理コードが記述 End Sub 検索のコードが記述されているとします。キーワードをテキストボックスに入れて検索されてヒットしたデータはフォームのテキストボックスなどに表示されるとします。検索は連続検索が可能で該当するデータが無くなるまで、この検索ボタンを押す限り検索が可能だとします。 さてここで質問ですが、この上記の一連の検索の途中で仮に更新、削除したいデータを発見したとします。 そんな場合は、 Private Sub Button検索_Click() 何らかの処理コードが記述 Private Sub Button削除_Click() 何らかの処理コードが記述 End Sub Private Sub Button更新_Click() 何らかの処理コードが記述 End Sub End Sub などということは可能なのでしょうか、それとも更新や削除のソースは、 Public Function 更新(又は削除)() As Integer 何らかの処理コードが記述 End Function としなければいけないのでしょうか。ご存知の方教えてください。よろしくお願いします。

  • VBの記述。サブや関数のコードを束ねる

    VBの記述でsubやfunctionの上の単位でまとめる記述があったように思えますが、久々で思い出せません。 クラスの構成だとかではなくコメントレベルの操作です。 □フォームの操作関係  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load   ' code  End Sub  Private Sub Form1_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed   ' code  End Sub □ボタンの操作関係  Private Sub Button_Close_Click(sender As Object, e As EventArgs) Handles Button_Close.Click   Me.Close()  End Sub  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click   ' code  End Sub サブの頭のところクリックしたら、コードが見えたり隠れたりするように、 記述ブロックの頭のところをクリックすると、記述ブロック全体のコードが見えたり隠れたりしたような。。。 なんというヤツでしたっけ?

  • 大文字に変換

    お世話になります。 テキストボックスで文字を入力し、その文字を 大文字にしたいのですが、下記記述でエラーが でます。 どの様に記述するべきでしょうか。         記 Private Sub CommandButton1_Click() StrConv (textbox1.Value, vbUpperCase)   ←ここが赤文字になる Sheets("結果").Range("a2") = TextBox1.Value Unload Me End Sub

  • Excel ユーザーフォームの入力値をシートに転記

    Excelでユーザーフォームを作りました。 ユーザーフォームには、テキストボックスを2個、ボタンを1個("記入"という文字が入っています)置いてあります。 テキストボックスに入れた数値をSheet1のセル"C24","C25"に転記したいので、ユーザーフォームのコードを次のようにしましたが、エラーメッセージは出ないかわりに何も動いてくれません。 「どこ」と「なに」が違いどうするのが正しいのか教えて下さい。よろしくお願いします。 Private Sub Tbox1_Change() a = Tbox1.Value End Sub ---------------------------- Private Sub Tbox2_Change() b = Tbox2.Value End Sub ---------------------------- Sub 記入Button_Click() '入力値をSheet1に転記 Dim a As Range Dim b As Range Sheets("Sheet1").Select Set a = Range("C24") Set b = Range("C25") End Sub

  • マクロ セル指定について

    Sheet(”体温”)のA3に フォームのTextBox1の内容をボタンを押したら 挿入させたいです。! 下の記述では上手くいきません 教えて下さい! Private Sub CommandButton1_Click() With Worksheets("体温") .Range(A3).Value = TextBox1.Value End With End Sub お願いします!

  • コンパイルエラーSubまたはFunction定義

    VBAユーザーフォーム作成の上記エラーについて VBA初心者です。 初心者ですので、本を見ながら作成していましたが、その通り作成したつもりがエラー表示が・・ シート上にユーザーフォームは出てくるようにして入力をしているのですが、ボタン(更新、追加、削除)やスピン移動をクリックすると「コンパイルエラー SubまたはFunctionが定義されていません」とでてきます。本の通りしたので何が悪かったのかよくわからなくなりました。 下記に本を見て作ったコードを書きますので教えて頂きたいです。素人すぎますので説明不足もありますが宜しくお願いします。 Private Sub Button更新_Click() データ書き込み (Spin移動.Value) End Sub Private Sub Button削除_Click() データ範囲.Rows(Spin移動.Value).Delete データ表示 (Spin移動.Value) Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = データ範囲.Rows.Count End Sub Private Sub Button終了_Click() 患者様データ.Hide End Sub Private Sub Button追加_Click() Dim AddRow As Integer AddRow = データ範囲.Rows.Count + 1   データ書き込み (AddRow) Textレコード.Text = Spin移動.Value - 1 & "/" & レコード数取得 Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = データ範囲.Rows.Count Spin移動.Value = データ範囲.Rows.Count データ表示 (AddRow) End Sub Private Sub MultiPage1_Change() End Sub Private Sub Option女_Click() End Sub Private Sub Option男_Click() End Sub Private Sub Spin移動_Change() If データ範囲.Rows.Count <> 1 Then データ表示 (Spin移動.Value) End If End Sub Private Sub TextIIIIV音_Change() End Sub Private Sub Text患者ID_Change() End Sub Private Sub Text生年月日_AfterUpdate() Text年齢.Value = DateDiff("yyyy", Text生年月日.Value, Now()) End Sub Private Sub UserForm_Initialize() Dim TBL(1 To 9) As Control Dim データ範囲 As Range Combo診療科.ColumnCount = 1 Combo診療科.AddItem "内科" Combo診療科.AddItem "外科" Combo診療科.AddItem "小児科" Combo主治医.ColumnCount = 1 Combo主治医.AddItem "今中尚子" Combo主治医.AddItem "岡井康葉" Set TBL(1) = Text患者ID Set TBL(2) = Text氏名 Set TBL(3) = Text生年月日 Set TBL(4) = Frame性別 Set TBL(5) = Combo診療科 Set TBL(6) = Combo主治医 Set TBL(7) = Text入院日 Set TBL(8) = Text退院日 Set TBL(9) = Combo指導医 Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = レコード数取得 + 1 If データ範囲.Rows.Count = 1 Then Else データ表示 2 End If End Sub Public Sub データ表示(行数 As Integer) Dim Cnt As Integer For Cnt = 1 To 9 Select Case Cnt Case 4 If データ範囲.Cells(行数, Cnt).Value = "男" Then Option男.Value = True Else Option女.Value = True End If Case Else Dim S For Cnt = 1 To 9 S = データ範囲cells(行数, Cnt).Value Next End Select Next If IsDate(Text生年月日.Text) Then Text年齢.Value = DateDiff("yyyy", Text生年月日.Value, Now()) Else Text年齢.Value = Null End If Textレコード.Value = Spin移動.Value - 1 & "/" & レコード数取得 End Sub Public Sub データ書き込み(行数 As Integer) Dim Cnt As Integer For Cnt = 1 To 9 Select Case Cnt Case 4 If Option男.Value = True Then データ範囲.Cells(行数, Cnt).Value = "男" Else データ範囲.Cells(行数, Cnt).Value = "女" End If Case Else データ範囲.Cells(行数, Cnt).Value = TBL(Cnt).Value ←このTBLの部分で青くなり上記エラー End Select Next End Sub Public Function レコード数取得() As Integer レコード数取得 = Range("A1").CurrentRegion.Rows.Count - 1 End Function

  • コンパイルエラーSubまたはFunction定義

    VBAユーザーフォーム作成の上記エラーについて VBA初心者です。 初心者ですので、本を見ながら作成していましたが、その通り作成したつもりがエラー表示が・・ シート上にユーザーフォームは出てくるようにして入力をしているのですが、ボタン(更新、追加、削除)やスピン移動をクリックすると「コンパイルエラー SubまたはFunctionが定義されていません」とでてきます。本の通りしたので何が悪かったのかよくわからなくなりました。 下記に本を見て作ったコードを書きますので教えて頂きたいです。素人すぎますので説明不足もありますが宜しくお願いします。 Private Sub Button更新_Click() データ書き込み (Spin移動.Value) End Sub Private Sub Button削除_Click() データ範囲.Rows(Spin移動.Value).Delete データ表示 (Spin移動.Value) Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = データ範囲.Rows.Count End Sub Private Sub Button終了_Click() 患者様データ.Hide End Sub Private Sub Button追加_Click() Dim AddRow As Integer AddRow = データ範囲.Rows.Count + 1   データ書き込み (AddRow) Textレコード.Text = Spin移動.Value - 1 & "/" & レコード数取得 Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = データ範囲.Rows.Count Spin移動.Value = データ範囲.Rows.Count データ表示 (AddRow) End Sub Private Sub MultiPage1_Change() End Sub Private Sub Option女_Click() End Sub Private Sub Option男_Click() End Sub Private Sub Spin移動_Change() If データ範囲.Rows.Count <> 1 Then データ表示 (Spin移動.Value) End If End Sub Private Sub TextIIIIV音_Change() End Sub Private Sub Text患者ID_Change() End Sub Private Sub Text生年月日_AfterUpdate() Text年齢.Value = DateDiff("yyyy", Text生年月日.Value, Now()) End Sub Private Sub UserForm_Initialize() Dim TBL(1 To 9) As Control Dim データ範囲 As Range Combo診療科.ColumnCount = 1 Combo診療科.AddItem "内科" Combo診療科.AddItem "外科" Combo診療科.AddItem "小児科" Combo主治医.ColumnCount = 1 Combo主治医.AddItem "今中尚子" Combo主治医.AddItem "岡井康葉" Set TBL(1) = Text患者ID Set TBL(2) = Text氏名 Set TBL(3) = Text生年月日 Set TBL(4) = Frame性別 Set TBL(5) = Combo診療科 Set TBL(6) = Combo主治医 Set TBL(7) = Text入院日 Set TBL(8) = Text退院日 Set TBL(9) = Combo指導医 Set データ範囲 = Range("A1").CurrentRegion Spin移動.Max = レコード数取得 + 1 If データ範囲.Rows.Count = 1 Then Else データ表示 2 End If End Sub Public Sub データ表示(行数 As Integer) Dim Cnt As Integer For Cnt = 1 To 9 Select Case Cnt Case 4 If データ範囲.Cells(行数, Cnt).Value = "男" Then Option男.Value = True Else Option女.Value = True End If Case Else Dim S For Cnt = 1 To 9 S = データ範囲cells(行数, Cnt).Value Next End Select Next If IsDate(Text生年月日.Text) Then Text年齢.Value = DateDiff("yyyy", Text生年月日.Value, Now()) Else Text年齢.Value = Null End If Textレコード.Value = Spin移動.Value - 1 & "/" & レコード数取得 End Sub Public Sub データ書き込み(行数 As Integer) Dim Cnt As Integer For Cnt = 1 To 9 Select Case Cnt Case 4 If Option男.Value = True Then データ範囲.Cells(行数, Cnt).Value = "男" Else データ範囲.Cells(行数, Cnt).Value = "女" End If Case Else データ範囲.Cells(行数, Cnt).Value = TBL(Cnt).Value ←このTBLの部分で青くなり上記エラー End Select Next End Sub Public Function レコード数取得() As Integer レコード数取得 = Range("A1").CurrentRegion.Rows.Count - 1 End Function

  • VBA コマンドボタン 頭に0がでない

    各ボタンに以下を入れる Private Sub CommandButton1_Click() Selection.Value = Selection.Value & "1" End Sub Private Sub CommandButton2_Click() Selection.Value = Selection.Value & "2" End Sub . . Private Sub CommandButton10_Click() Selection.Value = Selection.Value & "0" End Sub Private Sub CommandButton11_Click() Selection.Value = Selection.Value & "." End Sub 0.1と入力しても0.1が表示できなく、1となってしまいます。 また.1と入力しても0.1でなく、1になってしまいます。 どうすれば良いでしょうか?

  • ユーザーフォーム上にある「テキストボックス」に小数が入力できない

    以前にユーザーフォーム上のテキストボックスにセル値反映する方法を下記(サンプル1)のようにお教えいただいたのですが、下記のようにマクロを組むとテキストボックスに小数が入力できなくなってしまいます。 どのようにしたら、テキストボックスに小数が入力できるようになるのでしょうか? お教えください。 事例)「1.234」とテキストボックスに打ち込むと「1」    「0.856」とテキストボックスに打ち込むと「0」と    なってしまいます。 (サンプル1) 'A1のデータを反映するとした場合 'OptionButton1のコード Private Sub OptionButton1_Click() TextBox1 = Sheets("Sheet1").Range("a1") End Sub 'B1に反映するとして 'OptionButton2のコード Private Sub OptionButton2_Click() TextBox1 = "" End Sub 'TextBox1のコード Private Sub TextBox1_Change() If OptionButton2 = True Then Sheets("Sheet1").Range("B1") = TextBox1.Value End If End Sub

  • エクセルですが・・・。

    チェックボックスについてです。 Private Sub CheckBox1_Click() If CheckBox1 Then Range("F1:F6").Interior.ColorIndex = 3 Else Range("F1:F6").Interior.ColorIndex = xlNone End If End Sub 以前、上記のように教えていただいたのですが、 これですと、1行しか設定していませんよね? これを、例えば100行くらい自動で設定できませんか? 宜しくお願いします。

専門家に質問してみよう