![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
リストボックスを作り、そこに開いてるexcelブックを表示させて選択できるようにしてあるのですが、リストを選択してボタンを押したら、選択したブックのsheet1のA1~B80をマクロのあるブックの"処理用"sheetのA列B列にコピーなるようにしたいのですが上手くいきません
マクロ.xlsmの
リストはActiveコントロールのリストボックスを作り
Private Sub ListBox1_GotFocus()
Dim wbook As Integer
ListBox1.Clear
For wbook = 1 To Workbooks.Count
ListBox1.AddItem Workbooks(wbook).Name
Next wbook
End Sub
としてます。
で、別にボタンを作り
Sub ボタン_Click()
Dim target As Variant
Worksheets("マクロ").Select
target = Worksheets("処理用").ListBox1.Text
Workbooks(target).Activate
Sheets(1).Select
Sheets(1).Range(Cells(1, 1), Cells(80,2)).Copy
ThisWorkbook.Worksheets("処理用").(Cells(1, 1), Cells(80,2)).PasteSpecial
(以下略)
と続くのですが、実際に作動させると
Workbooks(target).Activateで「型が一致しません」となりエラーとなってしまいます。
"処理用"シートのD1に直接ファイル名を書いて、
target = Cells(4, 1)
Workbooks(target & ".xlsx").Activate
とやってた時はうまくいったのですが…
いろいろ調べてますが直せず困ってます…
No.3ベストアンサー
- 回答日時:
やっぱりtargetの型はstringにすべきですね。
そうすれば、target = Worksheets("処理用").ListBox1.Textの時点で落ちるはずなので問題の切り分けが出来ます。対処も見つかると思います。
Stringに戻してまたいろいろ調べた所、「型が一致しない」というエラーは、targetに何も入ってなかった為に出ていたようです。
その後、ちょこちょこ修正したら動くようになりました。
シートやブックの選択がうまくかみ合ってなかったのが原因っぽいです
ありがとうございました!
No.4
- 回答日時:
少し割り込み、お邪魔します。
target という変数名は、ちょっと引っかかるけれども、
>Dim target
>
>target = ThisWorkbook.Worksheets("処理用").ListBox1.Text
target のデータ型がVariant であろうが、String 型であろうが、ListBox1 から正しく取れていれば、「型が一致しません」というようなエラーはでません。
このエラーは、Listbox のプロパティの設定の違いによって起きているような気がします。
ListBox のProperty の中の、MultiSelect 0-fmMultiSelectSingle は選んでありますか?
この田中さん、こういうことを書いていますが、
http://officetanaka.net/excel/vba/tips/tips141.htm
私なら、ListBox は以下のように設定しています。私は古い?
以下は、そのままでは、MultiSelect は使えないけれども、すぐに変えられるようにしています。
'//
Private Sub CommandButton1_Click() 'フォーム・コントロールでも可
Dim strTxt ' As String
Dim i As Long
For i = 0 To Me.ListBox1.ListCount
If Me.ListBox1.Selected(i) Then
strTxt = Me.ListBox1.List(i)
If strTxt <> "" Then
Exit For
End If
End If
Next i
With Workbooks(strTxt).Sheets(1)
.Range(.Cells(1, 1), .Cells(80, 2)).Copy
End With
Dim LastRow As Long
With ThisWorkbook.Worksheets("処理用")
LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
If LastRow > 1 Then LastRow = LastRow + 1
.Cells(LastRow, 1).PasteSpecial (xlPasteValues)
''上書きモード(二者択一)
''.Range("A1").PasteSpecial (xlPasteValues)
End With
'
''(以下略)
Application.CutCopyMode = False
End Sub
'//
こちらの指摘は、当たっていないかもしれません。
ただ、エラーが出た時、そこに「ブレークポイント●」を置いて、ローカルウィンドウで、その変数の値をみれば、ほぼ、100%問題はどこにあるか分かるはずです。ご自分で分からなくても、その入った値は、こんなのでした、だけでも分かるものなのです。
私は、配列が混じりこんだような気がします。
「型が一致しない」というエラーは実際には上手くリストから取得できてなかったのが原因だったようで
自己解決しました。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) ユーザーフォームの表示を追加したい 2 2023/03/26 23:18
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マクロ初心者(;◔ิд◔ิ) 条件一...
-
VBAで保存しないで閉じると空の...
-
WPSOffice_マクロの有効化について
-
Excel マクロの編集がグレーに...
-
エクセル ボタンに設定したマク...
-
Excelのマクロでボタンを押すと...
-
エクセルで、「いいね」のよう...
-
エクセルマクロで、別のブック...
-
excelで直前に参照していたブッ...
-
エクセル関数>参照ファイル名...
-
エクセルで空白行を削除する ...
-
LDPlayerのマクロの編集方法を...
-
エクセル マクロ名にブック名...
-
Excelマクロで、稼働中のマクロ...
-
【Excel】マクロの保存先について
-
[フィルターオプションの設定]...
-
複数のマクロボタンをまとめて...
-
エクセルの、記録を終了したマ...
-
エクセルの表を複数枚印刷した...
-
Excel VBAでオートフィルタで抽...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同じシート内にイベントプロシ...
-
リストボックスで選択したexcel...
-
VBAで保存しないで閉じると空の...
-
Excel マクロの編集がグレーに...
-
WPSOffice_マクロの有効化について
-
エクセル関数>参照ファイル名...
-
Excelのマクロでボタンを押すと...
-
エクセル ボタンに設定したマク...
-
エクセルで、「いいね」のよう...
-
エクセルの表を複数枚印刷した...
-
エクセル マクロ名にブック名...
-
【Excel VBA】マクロでExcel自...
-
エクセルの、記録を終了したマ...
-
マクロの保存先、開いてるすべ...
-
エクセル;相対パスを絶対パスへ...
-
複数のマクロボタンをまとめて...
-
VBAについての質問です
-
エクセルで空白行を削除する ...
-
エクセルマクロで、別のブック...
-
VBA Shapes コピーと名前
おすすめ情報
実は最初はStringにしてました。
確か同様のエラ―が出て無理だったはずです。。。(今手元にないので確認はできませんが)
あと途中の所でおかしなところあるかも知れませんが(Worksheets("マクロ").Selectあたり)
実際組んでるのとは違っていて(問題ある所以外は簡略化してます)
リストボックス使ってない時は問題なく動作したのでそこは問題ないとします