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
No.1ベストアンサー
- 回答日時:
変数の使い方が間違っています。
変数は、それを定義したSubまたはFunctionの中でしか有効ではありません。
このプログラムで言えば、
Private Sub UserForm_Initialize()
Dim TBL(1 To 9) As Control
Dim データ範囲 As Range
・・・・
End Sub
なので、TBLやデータ範囲の変数が使えるのは Sub UserForm_Initialize の中だけです。
どうしてもUserForm_Initializeの外で使いたいなら、
パブリック変数にする必要があります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel VBA】先頭の「0」飛び...
-
GASでスプレッドシートの一番上...
-
コンパイルエラーSubまたは...
-
DataGrdViewに関連付けたデータ...
-
Listviewのデータを上から順番...
-
VBSやVBAでXMLファイルを読み込...
-
【ASP.NET MVC】一覧編集画面
-
C# データ配列から画像を作成す...
-
エクセルVBA、数式の入ったセル...
-
DataGridViewで表示に制限をつ...
-
asp+vbscriptで「文字列がある...
-
こんばんわ。
-
ASP C# データベースから1行取得
-
EXCEL2000のマクロ(ADO)にてCSV...
-
GridViewにバインドせずにデー...
-
PDFメニューバーの右端にある(...
-
ListViewで条件によって表示を...
-
カンマ区切りの文字列にPOSTデ...
-
特定のセルが空白だったら、そ...
-
ExcelVBAを使って、値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel VBA】先頭の「0」飛び...
-
DataGrdViewに関連付けたデータ...
-
Listviewのデータを上から順番...
-
GASでスプレッドシートの一番上...
-
GridViewにバインドせずにデー...
-
VBAでページ番号、ページ最終行...
-
.NET SqlDataReader のレコー...
-
MSFlexGridのデータ表示位置の設定
-
【ASP.NET MVC】一覧編集画面
-
DataGridViewで表示に制限をつ...
-
VBによる可変長ファイルの読み書き
-
エクセルマクロ小数点桁数
-
GoogleスプレッドシートからExc...
-
ListViewで条件によって表示を...
-
ACCESSのVBAで[Split]について
-
C# データ配列から画像を作成す...
-
ASP.Net ObjectDataSource
-
スプレッドシート 一括でQRコー...
-
ASP.NET DataGridの項目数(列...
-
GridViewを自動的にスクロール...
おすすめ情報