• 締切済み

ファイル名の取得ができません

今VBAでユーザフォームにコンボボックス一個を作りました。本来なら コンボボックスの値を選択し、ボタンを押して対応するファイルを読み込んで必要の値を取得したいですが・・・  今問題になったのは読み込みファイルの名前は固定ではないですが、 うまくファイルの読み込みが出来ません。ファイル名は "作業実績入力表_2009年07月_【山田 太郎】.xls" ,"作業実績入力表_2009年08月_【坂本 太郎】.xls ", "作業実績入力表_2009年09月_【柳 太郎】.xls"いう風になっているけど 月の番号は変わるものですので 普通の方法で指定したら(BaseFileName As String = "作業実績入力表_2009年07月_【山田 太郎】")来月からソースまた変更しないといけない・・ 来月:"作業実績入力表_2009年08月_【山田 太郎】.xls" コンボボックス選択用値は山田 太郎、坂本 太郎、柳 太郎です。 山田 太郎を選択したら”作業実績入力表_2009年07月_【山田 太郎】.xls”のファイルを読み込みたい 名前をどう指定したらいいでしょうか?ご教授のほどよろしくお願いします。 Dim OrgPath As String, Fname As Variant Const BaseFileName As String = "作業実績入力表_2009年07月_【" Const BaseFileName1 As String = "】" Const myPath As String = "C:\Documents and Settings\rin-binyan.HALINC\My Documents\test\" OrgPath = ThisWorkbook.Path If Dir(myPath & BaseFileName & ComboBox2.Value & BaseFileName1 & ".xls") <> "" Then Workbooks.Open myPath & BaseFileName & ComboBox2.Value & BaseFileName1 & ".xls" Else Application.Dialogs(xlDialogOpen).Show (BaseFileName & "*.xls") End If LineEnd: ChDir OrgPath 固定のファイルしか指定できないですが・・・

  • dcdxj
  • お礼率28% (4/14)

みんなの回答

回答No.1

今は名前のコンボボックスしかないと思いますが、これに年と月のコンボボックスを追加して、名前と年月を指定してボタンを押す形にすればいいのではないでしょうか? ComboBox2が名前 (例)山田太郎とか ComboBox3が年 (例)2009年~必要なだけ。動的にリストを作成してもいいかも ComboBox4が月 (例)01月~12月 としておいて下記のようにファイル名を作成すればいけるのではと。 BaseFileName = "作業実績入力表_" & ComboBox3.Value & ComboBox4.Value & "_【" & ComboBox2.Value & "】.xls" BaseFileNameで.xlsまで格納してあるので、if dir(~の中は、 if dir(myPath & BaseFilename) <> "" then で。 年と月を分けないで「2009年07月」という感じでリストを作って ComboBoxで選択させるようにする案もあるかと。

dcdxj
質問者

お礼

そうですね、コンボボックスを追加すれば解決できるのですね、ご教授ありがとうございました。

関連するQ&A

  • 【VBA】 ファイル名の取得

    23歳OLです。 会社でマクロを組んでいるのですが、 できないところがあったのでご相談させてください。 ▼やりたいこと ================================================ ・フォルダを自分で指定して、選択したファイルの名前をシートに書き込む 1.txt 2.log 3.xls とフォルダに入っていたら 1.txt 2.log 3.xls とシートに名前を書き込んでほしいです。 ・ファイルの種類はいろいろある。(txt.logなど) ================================================ ▼現在書いてみたコード ======================== Sub Sample1() Dim buf As String, cnt As Long Const Path As String = "" buf = Dir(Path & "*.*") Do While buf <> "" cnt = cnt + 1 Cells(cnt, 1) = buf buf = Dir() Loop End Sub ======================== これだと、初めから指定したフォルダしか取得することができないらしいです。 そもそもConst Path As String = "このぶぶん" このぶぶんにフォルダを指定しても動きませんでした。? どこが原因なのでしょうか? ご教示お願いします。

  • タスクバーのファイル表示について

    はじめまして、いつもお世話になっています。 エクセルマクロ初心者です。 エクセルマクロで、ファイル(データ入力.xls)を開いた時に他のファイル(data.xls)を開く記述をしました。 エクセルの「ウィンドウ」では両方ともファイルが開いている状態になっていますが、パソコン画面下部のタスクバー(ツールバー?)にデータ入力ファイルしか表示されません。 dataファイルも表示させたいのですが、表示は可能ですか? ちなみに、エクセルを起動させてから初めてファイルを開くと表示させず、エクスプローラやエクセルが起動している状態でファイルを開くと表示されます。 どう記述すれば確実に表示されますか? どなたかご教授下さい。よろしくお願いします。 エクセル2003です。 --------標準モジュール---------------- Public myFile Public myPath As String Public myYNO(121795) As String Public myYAD(121795) As String Public myNO As String Public myAD As String Public KenData As String --------This Workbook----------------- Private Sub Workbook_Open() Application.ScreenUpdating = False myPath = ActiveWorkbook.Path myFile = ActiveWorkbook.Name Workbooks.Open Filename:=myPath & "\data.xls" i = 0 KenData = myPath & "\ken_all.txt" Open KenData For Input As #1 Do Until EOF(1) i = i + 1 Input #1, myNO, myAD myYNO(i) = myNO myYAD(i) = myAD Loop Close #1 Workbooks(myFile).Activate Sheets("menu").Select Range("E2").Select Application.ScreenUpdating = True End Sub

  • ファイルが見つからない時、スルーしたい。

    こちらで教えて頂いたVBマクロですが更に改善しファイルが見つからないときはスルーして 次のステップにいくようにしたいのですが?教えてください。 Sub Macro5() ' Macro5 Macro ' マクロ記録日 : 2012/9/12 ' Dim myPath As String myPath = ThisWorkbook.Path Kill myPath & "\A.xls" Kill myPath & "\B.xls" Kill myPath & "\B.ex_" End Sub

  • マクロ処理後のファイル名変更について

    マクロでいくつかの処理を行った後、もとのファイル名に 「済+ファイル名」としてファイル名を変更して終了をしたいのですが、 どのようにすればできるのかわかりません。 どなたか教えていただけますか? イメージ) 処理前のファイル名:サラダ.xls、お肉.xls・・・ 処理後のファイル名:済サラダ.xls、済お肉.xls・・・ Dim myPath As String Dim myFile As String Dim w As Workbook Dim s As Worksheet myPath = ThisWorkbook.Path & "\" myFile = Dir(myPath & "*.xls") Do Until myFile = "" If myFile <> ThisWorkbook.Name Then Set w = Workbooks.Open(myPath & myFile) For Each s In w.Worksheets s.Range・・・・・     ・・・・・・・・     ・・・・・・・・ Next w.Close savechanges:=True End If myFile = Dir() Loop MsgBox "完了しました。" End Sub

  • フォルダ内にあるファイル名を取得するVBA

    エクセル2010を使用しています。 VBA(マクロ)で以下の作業を実行したいと考えていますが、 初心者につき、ご教示いただけますでしょうか。 「マクロ」ファイルにある「実行」Sheetというにある「実行」ボタンで L2に入力したパス内にあるファイル(.xlsや.xlsmや.xlsbが混在しますが、基本的には全てエクセルファイル)のファイル名を K8から下へ取得したいのですが・・ 参考にしたコードでは うまく動作しませんでした。 以下では、L2のパスを参照するのも組めていないため、コード内に直接パスを書き込んでいますが 実際は、パスを変動させて使いたいので、L2を参照できるようになると助かります。 ※パスは、質問用に仮置きで「パス」としています。 Sub Sample() Dim buf As String, cnt As Long Const Path As String = "パス" buf = Dir(Path & "*.*") Do While buf <> "" cnt = cnt + 8 Cells(cnt, 11) = buf buf = Dir() Loop End Sub また、このコードでは 実行ファイル自体のファイル名も取得してしまうようなので、 実行ファイル以外のファイル名を取得したいです。 ご指導のほど、よろしくお願い致します。

  • Excel 2010 VBA:ファイル名を読み込む

    下は複数のcsvファイルを一つに合体するVBAです。これにシートの右端に読み取ったファイル名を追加するにはどうしたらよいでしょうか。 よろしくお願いします。 Sub macro1() Dim myPath As String Dim myFile As String Dim s As String myPath = ThisWorkbook.Path & "\" On Error Resume Next Kill myPath & "合体版.csv" On Error GoTo 0 myFile = Dir(myPath & "*.csv") If myFile = "" Then Exit Sub Open myPath & "合体版.csv" For Output As #1 Do Until myFile = "" Open myPath & myFile For Input As #2 Do Until EOF(2) Line Input #2, s Print #1, s Loop Close #2 myFile = Dir() Loop Close #1 End Sub

  • ExcelVBA変数等でのファイルのOpen方法

    ExcelVBAで、変数でのファイルのOpen方法を教えてください。 以下のフォルダ構造とします。 '////////////////////////////////////////////////////// マクロファイル.xls 1フォルダA  ∟1999ファイルA.xls  ∟2000ファイルA.xls  ∟2001ファイルA.xls  ∟2002ファイルA.xls  ∟2003ファイルA.xls  ∟2004ファイルA.xls ・・・ 2フォルダB  ∟1999ファイルB.xls  ∟2000ファイルB.xls  ∟2001ファイルB.xls  ∟2002ファイルB.xls  ∟2003ファイルB.xls  ∟2004ファイルB.xls ・・・ 3フォルダC  ∟結果ファイルC.xls '////////////////////////////////////////////////////// マクロファイル.xlsのシートにコンボボックスとボタンを配置します。 コンボボックスで【2001】を選択した場合は、 前後1年…合わせて合計3年分のファイルの「A5~A25」の値が、 「結果ファイルC.xls」にコピーされるようにしたいのです。 コピー内容や範囲が多く1つのプロシージャーに収まり切りませんでした。 そこで「結果ファイルC.xls」ファイルを1つめのプロシージャで開き、 2つめのプロシージャで残りの処理を実行しようとしたのですが、 変数、コンボボックスの値でのファイルを開く方法がわからず困っており、 どなたかお知恵をお貸し下さい。 以下のようなコードを書いてみましたがエラーとなりました。 '////////////////////////////////////////////////////// Dim vTgYear As Variant Dim myFLName1 As String, sWbkSubName1 As String Dim myFLName2 As String, sWbkSubName2 As String, SubName As String, vTgYear = ComboBox1.Value For i = -1 To 1 sWbkSubName1 = "3_フォルダC\結果ファイルC.xls" myFLName1 = ThisWorkbook.Path & sWbkSubName1 Workbooks.Open Filename:=myFLName1 SubName = "vTgYear + i & _ファイルA.xls" sWbkSubName2 = "1_フォルダA & SubName" myFLName2 = ThisWorkbook.Path & sWbkSubName1 Workbooks.Open Filename:=myFLName2 (実行コード中略) Next i '////////////////////////////////////////////////////// 今回はファイルの開き方だけなので、実行コードを省略させていただきました。 初歩的な質問かと思いますが、何卒お力をお貸しいただけますと幸いです。 よろしくお願い致します。

  • フォルダ内にあるファイルを取得したい

    エクセル2010を使用しています。 VBA(マクロ)で以下の作業を実行したいと考えていますが、 初心者につき、ご教示いただけますでしょうか。 「マクロ」ファイルにある「実行」Sheetというにある「実行」ボタンで L2に入力したパス内にあるファイル(.xlsや.xlsmや.xlsbが混在しますが、基本的には全てエクセルファイル)のファイル名を K8から下へ取得したいのですが・・ 参考にしたコードでは うまく動作しませんでした。 以下では、L2のパスを参照するのも組めていないため、コード内に直接パスを書き込んでいますが 実際は、パスを変動させて使いたいので、L2を参照できるようになると助かります。 ※パスは、質問用に仮置きで「パス」としています。 Sub Sample() Dim buf As String, cnt As Long Const Path As String = "パス" buf = Dir(Path & "*.*") Do While buf <> "" cnt = cnt + 8 Cells(cnt, 11) = buf buf = Dir() Loop End Sub また、このコードでは マクロを実行するファイル自体のファイル名も取得してしまうようなので、 自身のファイル名以外のものを取得することは可能でしょうか。 ご指導のほど、よろしくお願い致します。

  • エクセルVBAで、ある特定な場所にあるブックが開いていたら閉じたい

    こちらでお世話になった者です。その節はありがとうございました。 http://okwave.jp/qa3972230.html 他のブックが開いているとエラーになるので、フォームのブックが開いていたら、 マクロの最初に閉じてしまいたいと思います。 dbase.xls formフォルダ  001.xls  002.xls  003.xls のようなフォルダ構造になっていて、001~003.xlsは入力フォームです。 dbase.xlsを開いて、マクロを貼り付けたボタンをクリックすると、すべてのフォームの データがdbase.xlsに取り込まれます。 ↓のような感じで、最初にメッセージが表示されるようにしたのですが、 自分以外の、formフォルダにあるブックが開いていたらそれをすべて閉じる 方法を教えていただけますか。 Sub data_torikomi() MsgBox ("開いている他のエクセルブックをすべて閉じてください") Dim Fn As String Dim myPath As String Dim dbBkSh As Worksheet Dim i As Long Set dbBkSh = Workbooks("dbase.xls").Worksheets("一覧表") myPath = ThisWorkbook.Path & "\" Fn = Dir(myPath & "form\*.xls") i = 1   ……

  • ファイル名の一括置換がIF文のときだけエラーになる

    ファイル名の一括置換がIF文のときだけエラーになる こんにちは。VBA初心者です。 フォームから受け取ったディレクトリ内にあるファイルの名前を一括置換しようとして、以下のようなコードを書いたのですが、「実行時エラー'53' ファイルがありません。」となってしまします(だだし、1つ目のファイルだけは正しくリネームされます)。 フォームから受け取ったパスは使用せず(IF文は使用せず)、例えば、ファイル名の末尾を「_ja.txt」から「_de.txt」と固定的に置換するだけならちゃんと動くのですが、どこがいけないでしょうか。 ※VBEのローカルペインによると、エラー時の「myRename1」には「"D:\export\de\test_ja.txt"」、「myRename2」には「"D:\export\de\acn200_de.txt"」が格納されているので、問題ないように思えるのですが。。。 Sub ファイル名変更(myPath As String) Dim myFilename1 As String Dim myFilename2 As String Dim myRename1 As String Dim myRename2 As String myPath = myPath & "\" myFilename1 = Dir(myPath & "*_ja.txt") If myPath = "D:\export\de\" Then myFilename2 = Replace(myFilename1, "_ja.txt", "_de.txt") ElseIf myPath = "D:\export\en\" Then myFilename2 = Replace(myFilename1, "_ja.txt", "_en.txt") Else myFilename2 = Replace(myFilename1, "_ja.txt", "_fr.txt") End If myRename1 = myPath & myFilename1 myRename2 = myPath & myFilename2   Do While myFilename1 <> "" Name myRename1 As myRename2 Loop End Sub

専門家に質問してみよう