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
>ユーザーフォームの先頭に移動とはどうするのですか?
コードウィンドウで上記プログラムの先頭と言う意味です。
---
Dim TBL(1 To 9) As Control 'ここに
Private Sub Button更新_Click()
’以下略
Private Sub UserForm_Initialize()
Dim TBL(1 To 9) As Control ’これを
’以下略
>Dim TBL(1 To 9) As Control
この宣言が"UserForm_Initialize"内にあるので
TBLが局所変数になってしまって
"データ書き込み"からアクセスできないと思います。
"UserForm_Initialize"内のTBLの変数宣言を
ユーザフォームの先頭に移動してください。
お礼
ありがとうございました