VBA初心者なので、テキスト本を参考にユーザーフォームを作ったのですが、エラーになってしまって困っています。
フォーム上のコンボボックス、テキストボックスに入力した値をワークシート上に転記したいのですがエラーが出てしまって先に進めずに困っています。
どなたかお力をお貸し頂けませんでしょうか?
Option Explicit
Dim TBL(1 To 8) As Control
Dim データ範囲 As Range
----------------------------
Private Sub UserForm_Initialize()
With Combo会社名
.MatchEntry = fmMatchEntryFirstLetter
.ColumnCount = 2
.TextColumn = 1
End With
With Combo住所1
.AddItem "東京都"
.AddItem "埼玉県"
.AddItem "神奈川県"
End With
Set TBL(1) = Textコード番号
Set TBL(2) = Text登録年月日
Set TBL(3) = Combo住所1
Set TBL(4) = Combo会社名
Set TBL(5) = Text郵便番号
Set TBL(6) =Text住所2
Set TBL(7) = Text 住所3
Set TBL(8) = Text電話番号
Set データ範囲 = Range("A1").CurrentRegion
Spin移動.Max = レコード数取得 + 1
If データ範囲.Rows.Count = 1 Then
Else
データ表示 2
End If
End Sub
----------------------------------------
Public Function レコード数取得() As Integer
レコード数取得 = Range("A1").CurrentRegion.Rows.Count - 1
End Function
----------------------------------------
Public Sub データ表示(行数 As Integer)
Dim Cnt As Integer
For Cnt = 1 To 19
TBL(Cnt).Value = データ範囲.Cells(行数, Cnt).Value ---この部分でエラー
Next
Textレコード.Value = Spin移動.Value - 1 & "/" & レコード数取得
End Sub
-------------------------------------
Private Sub Spin移動_Change()
If データ範囲.Rows.Count <> 1 Then
データ表示 (Spin移動.Value)
End If
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 Button更新_Click()
データ書き込み (Spin移動.Value)
End Sub
-------------------------------------
Public Sub データ書き込み(行数 As Integer)
Dim Cnt As Integer
For Cnt = 1 To 19
データ範囲.celles(行数, Cnt).Value = TBL(Cnt).Value
Next
End Sub
--------------------------------------
Private Sub Button終了_Click()
ActiveWorkbook.Save
Application.DisplayAlerts = False
Unload Me
ActiveWorkbook.Close
Application.Quit
End Sub
No.3ベストアンサー
- 回答日時:
行数に問題がないとしたら、
TBL(Cnt).Value = データ範囲.Cells(行数, Cnt).Value
を次のようにして
Dim S
For Cnt = 1 to 19
S = データ範囲.Cells(行数, Cnt).Value
TBL(Cnt).Value = S
Next
どこでエラーになるか、またSの型と値はどうなのか、TBL(Cnt)の型は本当にComboBoxなのかを調べてみてください。
変数の型はTypeName関数で調べられます。
ありがとうございました。
TypeName関数で変数の型を調べている時に
「どこでエラーになるか、またSの型と値はどうなのか、TBL(Cnt)の型は本当にComboBoxなのかを調べてみてください。」
をもう一度考え直したところ、
TBL(Cnt)の型は本当にComboBoxなのですが、
Combo会社名のリストはCombo会社名のプロパティのROWSourceで範囲を指定していたのですが、
Combo会社名のリストに無い値がセルに入力されたままになっており
それがエラーの原因と判明しました。
色々とアドバイスをして頂き、本当にありがとうございました。
おかげさまで解決致しました。
No.4
- 回答日時:
初心者と言う割には、難しく複雑なコードを作成している。
何か解説書からの引き写しか?
VBでなく、エクセルVBAなどなら
ユーザーフォームの作成
コンボボックスをユーザーフォーム上に作成
は操作で行う、が標準(コードでも出来るがむつかしいだけ)。
そしてコンボのアイテムの設定は、前もってセル範囲例えばF1:F19などのセルに入力する。
そしてROWSourceにF1:F19と(文字列で)入力する。
ユーザーフォームを表示するとアイテムにF1:F19の項目がアイテムとして表示される。
ーー
この設定はコードからでも出来る。
Private Sub UserForm_Initialize()
UserForm1.ComboBox1.RowSource = "G1:G3"
End Sub
ーー
セルと選択したアイテムとの連動は
Private Sub ComboBox1_Change()
Cells(3, "B") = UserForm1.ComboBox1.Value
End Sub
===
質問の仕方について、良く考えること。
どこでどういうエラーがどこで起こったかも書いてない。
コードだけ書いて、何をしたいか(特にコードの後半)を文章で説明するもんだ。
初心者の書いたコードなど、独特のやり方だったり、まわりくど勝ったりで、主旨(やりたいこと)がわかりにくい。
アドバイスありがとうございました。
参考書を見ながらエクセルでユーザーフォームを作成しコンボやテキストに入れた値をシート上のセルに配列どうりに転記していくようにしたのですが・・・
コンボのアイテムの設定はComboプロパティのROWSourceで範囲を指定していました。
色々と勉強不足かつ質問の仕方の不備などありましてすみませんでした。
もっと勉強したいと思います。
アドバイスありがとうございました。
No.1
- 回答日時:
For Cnt = 1 To 19
TBL(Cnt).Value = データ範囲.Cells(行数, Cnt).Value - --この部分でエラー
Next
TBL配列を8個しか用意してないのになんで
For Cnt = 1 To 19
なの?
この回答への補足
すみません!
本当はTBL配列は19個あるのですが、質問用に8個にしてしまったのに、
For Cnt = 1 To 19をFor Cnt = 1 To 8と直すのを忘れていました。
質問も初心者ですみません。
それと、OSはWindows XP でExcel 2003です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) フォーム上のリストボックスに重複して表示しています 3 2022/10/19 11:55
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでアクセスDBからデータの取...
-
「Nullの使い方が不正です」の...
-
【C#】textBoxの指定行のデータ...
-
Excel VBAで1週間毎にカテゴリ...
-
XMLでデータとして画像を指定す...
-
java / jsp selectedについて
-
Excel VBAでグラフの可変データ...
-
エクセルデータをVBで検索でき...
-
非同期のプロセス間通信(パイプ...
-
VB2010で、選択した系列を最前...
-
ADODBでの行番号の取得、もしく...
-
【ExcelVBA】値を変更しながら...
-
EXCEL VBAで散布図の作成
-
VB6.0 テキストボックス マル...
-
グリッドについて,エクセルの...
-
Excel VBA で日付を4ケタの数値...
-
C# DataTableに最後に追加した...
-
Excel VBAでフォルダ内の全テキ...
-
batでレジストリキーから読み取...
-
エクセルでデータ取得されない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】値を変更しながら...
-
「Nullの使い方が不正です」の...
-
【C#】textBoxの指定行のデータ...
-
VBAでアクセスDBからデータの取...
-
XMLでデータとして画像を指定す...
-
【VB.NET】Excelの最終行までの...
-
C# DataTableに最後に追加した...
-
Excel VBAでフォルダ内の全テキ...
-
VBAコンボボックスの内容が反映...
-
COBOL数値転記の仕様
-
エクセルのセル最終行取得
-
エクセルデータをVBで検索でき...
-
アクセスでウェブ上のデータを...
-
batでレジストリキーから読み取...
-
富士通(汎用機)のAIMについて
-
非同期のプロセス間通信(パイプ...
-
エクセルのCSV読み込みについて
-
MSFlexGrid 行選択状態
-
java / jsp selectedについて
-
Excel VBA で日付を4ケタの数値...
おすすめ情報