VBA初心者です。
途中まで作ってみたのですが、コンボボックスを表示するところで
エラーが出てどうしても先に進むことができません。
ご指導お願い出来ますでしょうか。
■元データtxtファイル
A列 B列 C列 D列 E列 F列 G列
氏名 性別評価1 評価2 評価3 評価4 評価5
----------------------------------------------------
山田太郎 男 A AB
木下花子 女 B BA
水野四郎 男 B BB
山瀬次郎 男 C CA
野山達子 女 A AA
出側三郎 男 D DB
・
・
■EXCELファイル(txtファイルのデータを反映させるEXCEL)
シートは以下2つあります。
(1)「全体(sheet1)」:txtファイルのデータを反映させるシート
※例えば、B2には評価1がAの数の合計。
(2)「評価ごとの雛型(sheet2)」:評価1の評価(A、B、C・・)ごとにデータを反映させるシート
※例えば、評価1が「A」のデータを抽出し、雛型用のシートをコピーし、
シートの末尾に挿入、シート名を「A」に変更し、
B3には評価1がAの男の数の合計を入れる。
マクロの流れは、、
1.マクロが埋め込まれているEXCELを開き「ボタン」をクリック
2.テキストファイル(A)を「参照」で読込み、
3.続いてデータを反映させるEXCEL(B)を「参照」で読込み、
4."データを反映させますか?⇒はい"で「全体(sheet1)」に反映させ、
5.続いてコンボボックス(プルダウン)を表示し選択する。←★ココでエラーとなり先に進みません。
6.EXCEL(B)の「雛型」シートを末尾にコピーしデータを反映 ←ここからは自力で頑張ります。
★教えて頂きたい内容
作りかけのマクロです。http://cocolodiary.com/sample.zip
Call eSelect で呼び出したときに、
元データtxtファイルのC列をコンボボックス(プルダウン)で表示するところで
エラーになってしまいます。
ソースの★印の箇所についてご指導頂けますでしょうか。
どうぞよろしくお願い致します。
No.3
- 回答日時:
参考で。
『オブジェクト変数または withブロック変数が設定されていません』
が表示されたときの観点はどこか?。
この視点も必要です。
今回は対処できたけど、次に同じエラーが出たときは対処できるか。
掲示板頼りだとこれが身につきにくい。
掲示板は正しく稼働するものの回答がほとんどなので
エラーのときは、この対処がわからずパニックになるのです。
こっちを知っておく方が実際は心強い。
ありがたいことにこういうサイトもあります。
http://www.kitagawa-hanga.com/se/s_vberr.html
わざとエラーを起こしてみるのも良い。
原因については
エラーの行を特定しつつ、
「設定されていない」ということだから
認識できていない変数が使われている、とかいう
見方ができれば自己解決により近づく。
エラーが起きたけどどこがおかしいですか?
(だとこのシステムだけの話なので、)よりも
『オブジェクト変数または withブロック変数が設定されていません』
のエラーが起きるときはどういうときですか?
のが今後の活用に役立つのでは?と思いますね。
http://www.kitagawa-hanga.com/se/s_vberr.html
拝見させて頂きました。
すごくありがたいサイトで、さっそくお気に入りに登録しました。
エラーをわざと起こして原因を特定してみるのは近道ですね。
ありがとうございました。
No.2ベストアンサー
- 回答日時:
ブックはブックですから、ブックで読めたものは、テキストファイルだからファイル名が読めないなんてことはありませんが、もっと初歩的な部分です。
ローカル変数を置いているのだから、Public 変数が飛んでしまいます。全体的には、もう少し方法がある気がしますが、それはいいとします。UserForm の内容は初歩的なところでミスが目立ちます。===
'Dim oldFile As String
'Dim newFile As String
'
'Dim newSheetName As String '集計サンプルxls
'Dim oldSheetName As String 'サンプルデータtxt
'●長いルーチンですから、途中からでも可能なようにしておきます。
Dim w As Object
If oldFile = "" Then
For Each w In Workbooks
If w.Name Like "*.txt" Then
oldFile = w.Name
oldSheetName = w.Sheets(1).Name
Exit For
End If
Next w
End If
'★ここから-------------------start
'Dim lRow As Long
Dim mData As Variant
With Workbooks(oldFile).Sheets(oldSheetName)
' lRow = .Range("C" & Rows.Count).End(xlUp).Row
mData = Application.Transpose(.Range("C2", .Cells(Rows.Count, 3).End(xlUp)).Value)
'●私の記憶では、他のブックに対して、RowSource は取れなかったはずですが……
'● .RowSource = oldSheetName & "!C2" & lRow これでは、取れるは思えません。
End With
With Me.cmbSelect '●ワークブックはUserFormの親オブジェクトではありません。
.ColumnCount = 1
.ColumnWidths = "50"
.List = mData
End With
===
ご回答ありがとうございました。
------
Dim w As Object
If oldFile = "" Then
For Each w In Workbooks
If w.Name Like "*.txt" Then
oldFile = w.Name
oldSheetName = w.Sheets(1).Name
Exit For
End If
Next w
End If
---
テキストファイルのデータを読み込むのに
こちらが必要だったのですね。
>●私の記憶では、他のブックに対して、RowSource は取れなかった
>はずですが……
まったく存じ上げませんでした。。
色々調べて、勉強し直します。
ご丁寧に本当にありがとうございました。
また重複したリストは省きたかったので
いろいろ四苦八苦しながら以下でやることにしました。
If oldFile = "" Then
For Each w In Workbooks
If w.Name Like "*.txt" Then
oldFile = w.Name
oldSheetName = w.Sheets(1).Name
Exit For
End If
Next w
End If
Retsu = "C"
topStart = Retsu & "2"
endCell = Retsu & "65536"
With Workbooks(oldFile).Sheets(oldSheetName)
Set Hani = .Range(.Range(topStart), .Range(endCell).End(xlUp))
End With
For Each cellHani In Hani
On Error Resume Next
List.Add cellHani.Value, CStr(cellHani.Value)
If Err.Number = 0 Then
cmbSelect.AddItem cellHani.Value
End If
On Error GoTo 0
Next
End Sub
早速のご回答ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- 統計学 Rを用いた「繰り返しがある直交表実験計画法」の分析方法 8 2023/08/01 17:58
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- Excel(エクセル) DATE関数で指定する「日」のセルが関数の場合の対処法 5 2022/09/14 15:46
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) Excel 表の作成について 3 2022/06/16 12:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
別ブックをダイアログボックス...
-
ワイルドカード「*」を使うとう...
-
エクセルVBAが途中で止まります
-
vbaでvbaProjectのパスワード解...
-
VBAで別ブックのシートを指定し...
-
【VBA】全シートの計算式を全て...
-
VBS Bookを閉じるコード
-
ExcelのVBAです。フォルダ内の...
-
【マクロ】違うフォルダにある...
-
【ExcelVBA】インデックスが有...
-
エクセルのマクロを使ってメー...
-
エクセルのマクロについて教え...
-
複数のエクセルブックをひとつ...
-
【ExcelVBA】zip圧縮されたCSV...
-
Dir関数で複数ブックへ行いたい...
-
Excelのマクロコードについて教...
-
VBAで複数のブックを開かずに処...
-
マクロで最終行を取得したい
-
エクセルのマクロについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
別ブックをダイアログボックス...
-
ワイルドカード「*」を使うとう...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
VBS Bookを閉じるコード
-
【ExcelVBA】インデックスが有...
-
VBA コードを実行すると画面が...
-
【ExcelVBA】zip圧縮されたCSV...
-
vbaでvbaProjectのパスワード解...
-
VBAで別ブックのシートを指定し...
-
ExcelのVBAです。フォルダ内の...
-
vbaで他のブックに転記したい。...
-
フォルダ内の全てのファイルに...
-
VBAで複数のブックを開かずに処...
-
VBSでExcelのオープン確認
-
VBA 実行時エラー 2147024893
-
【Excel VBA】書き込み先ブック...
-
VBA シート名が一致した場合の...
おすすめ情報