質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1734閲覧

コンボボックスに入れた値をDir関数に渡したい

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/05/18 13:37

編集2021/02/11 08:43

ユーザーインターフェースのコンボボックスに入れた値をSubプロシージャのDir関数に渡し、引数がファイル名に入っているファイルを開きたい

VBA初心者です。
別のファイルから必要なデータだけを抽出して、リストを作成するプログラムを書いてます。
タイトルの通りにしたいのですが、「データ型が違う」となり、エラーになります。
数時間あれこれ調べたり試したのですがダメでした。ご教示頂ければ幸甚に存じます。

発生している問題・エラーメッセージ

エラーメッセージ
エラー:13
型が一致しません

該当のソースコード

VBAソースコード

ーーーーーーー(引き渡したい値/コンボボックスに入力する値↓)---------------
1:Dim i As Integer
2:Dim VYear As Integer

3:VYear = Year(Date)

4:For i = VYear - 1 To VYear + 1
5:CmbBox_年.AddItem i
6:CmbBox_年.value = VYear

7:Next
8:End Sub

ーーーーーー(値の引き渡しを指示するプロシージャ↓)--------------------
1:Private Sub CmdBtn_作成_Click()

2:Profile_List_年度全員 CmbBox_年.Text

3:End Sub

ーーーーーーー(引き渡されるプロシージャ↓)-------------------
1:Option Explicit
2:Sub Profile_List_年度全員(ByVal VVYear As String)

3:Dim aa As String
4:Dim bb As String

5:aa = Dir("C:\Users\me\Desktop\VBA\共有フォルダ\勉強用 " And VVYear And " 人数データ.xlsx")
6:bb = Dir("C:\Users\me\Desktop\VBA\Profile List Maker.xlsm")

7:Workbooks.Open Filename:="C:\Users\me\Desktop\VBA\共有フォルダ\勉強用 " And VVYear And " 人数データ.xlsx", ReadOnly:=True
8:Workbooks(aa).Worksheets(VVYear And "年 人数データ").Copy after:=Workbooks(bb).Worksheets(Worksheets.Count)

9:Workbooks(aa).Close Filename:="C:\Users\me\Desktop\VBA\共有フォルダ\勉強用 " And VVYear And " 人数データ.xlsx"

10:End Sub

試したこと

コンボボックスの値を設定するときにDate関数を用いてますので、
CStr関数でDir関数に合うように文字列に変換してみたのですが、結果は変わりませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/05/18 14:54

エラーはどの行で発生しているのですか?
guest

回答1

0

ベストアンサー

質問タイトルの「コンボボックスに入れた値をDir関数に渡したい」は出来ているかと思います。

「型が一致しません」のエラーが出ているのは下記コードだと思います。

VBA

1Workbooks.Open Filename:="C:\Users\me\Desktop\VBA\共有フォルダもどき\勉強用 " And VVYear And " 人数データ.xlsx", ReadOnly:=True

And&に変更しましょう。

VBA

1Workbooks.Open Filename:="C:\Users\me\Desktop\VBA\共有フォルダもどき\勉強用 " & VVYear & " 人数データ.xlsx", ReadOnly:=True

※パス内の余計な空白も削除した方が良いかもしれません。

投稿2020/05/18 15:22

編集2020/05/18 16:19
meg_

総合スコア10760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/18 15:46

meg_さん 早速のご回答ありがとうございます。 仰る通り、ご指摘の行でエラーになっています。 私も"&"で最初試したのですが、うまくいかなかった為、"And"にした次第です。 ただ入力ミスした可能性もありますので、少し寝て"&"で再チャレンジしてみます。また結果をお知らせしますので、宜しくお願い致します。 ※ファイルパス内の全角スペースにつきましては、見やすくする為か、抽出元のファイル名に必ず入っていて、私側ではなくすことができません。なんとかそのままで、ファイルパスが取得できれば助かるのですが...。
退会済みユーザー

退会済みユーザー

2020/05/19 09:40 編集

meg_さん 少し頭を回復させて再チャレンジしました。 仰る通り、"&"でうまくいきました!私の入力の仕方が良くなかったようです。 (またCStr関数で引数を文字列にしたままにしてしまい、引き渡しの時に何を入れても"0"で渡されてしまっていたようです;) この度はありがとうございました。ベストアンサーにさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問