[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロ(VBA)のファイルパスの記入方法を教えてください』(ならもと)
はじめまして。
ならもと と申します。
下記のような、2つのファイルがありまして、
毎日届く【1.処理連絡】の内容をコピーして
【2.処理済み一覧表】に貼り付けをするマクロを作成したいと思っています。
【1.処理連絡 (.xlsx)】(エクセルで作成)
【2.処理済み一覧表(.xlsm)】(マクロで作成)
【1.処理連絡】のファイル名ですが、
「処理連絡6/7処理分」 (.xlsx)というように、
毎日ファイル名が変わるためどのようにファイル名を指定すれば良いのかわからず困っています。
エクセルファイルは、前日処理したものが翌日に届きます。下記参照↓
2021/6/8に届くファイル→「処理連絡6/7処理分」
2021/12/1に届くファイル→「処理連絡11/30処理分」
※ファイル名は数字もすべて全角です。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
FileName = "処理連絡" & "??" & "/" & "?" & "処理分.xlsx"
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
FileName = "処理連絡" & "##" & "/" & "##" & "処理分.xlsx"
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
上記のようにファイル名を記入したり試しましたが、実行できませんでした。
ワイルドカードの使い方もよく理解できておらず、
行き詰まっています…
どなたか詳しい方、助けていただけませんでしょうか。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
こんにちは ^^ 詳しくはございませんが。。。その。。ファイル名だけでしたら 前に必要なパスをお付けくださいね。 Option Explicit Sub OneInstanceMain() Dim fNm As String fNm = "処理連絡" & StrConv(Format(Month(Date - 1), "00"), vbWide) & _ StrConv("/", vbWide) & _ StrConv(Format(Month(Date - 1), "00"), vbWide) & _ "処理分.xlsx" MsgBox fNm End Sub (隠居じーさん) 2021/06/07(月) 11:22
fNm = StrConv(Format(Date - 1, "処理連絡mm/dd処理分"), vbWide) & "xlsx"
でいいのでは? (私も詳しくない) 2021/06/07(月) 11:31
はは〜。。。m(__)m 仰せのままに。。。^^;m(__)m (隠居じーさん) 2021/06/07(月) 11:38
迅速にお答えいただきましてありがとうございます!
お二方の教えていただいた通りにしたところできました(^^)
もう1つ質問なのですが、
土日は休日の為、処理連絡のファイルが作成されません。
そのため、月曜日だと前の週の金曜日のファイルが届きます。
6/7に届くファイルは、【処理連絡6/4処理分】のようになります。
このような場合でも対応できるファイル名の指定方法はありますでしょうか。
(ならもと) 2021/06/07(月) 13:17
月曜日だけ Date - 1 を Date - 3 にすればいいのでは? 例えば If Weekday(Date) = 2 Then fNm = StrConv(Format(Date - 3, "処理連絡mm/dd処理分"), vbWide) & "xlsx" Else fNm = StrConv(Format(Date - 1, "処理連絡mm/dd処理分"), vbWide) & "xlsx" End If (私も詳しくない) 2021/06/07(月) 14:47
WeekDay関数で曜日を取得
どこかのセルに土日以外の休日を並べ、
休日なら前日・・・となるようにDoLoopするのは
どうでしょう?
(tkit) 2021/06/07(月) 14:49
こんにちは ^^ 最初から気にはなっていたのですが。。。 固定するので。。。イレギュラーには対応が難しいですね。 盆、正月、連休、創立記念。。エトセトラ。。^^; で いっそ、インプットボックス等を使い、お好きな月日を入力するとかは どうでせう、デフォルトを一日前にしておけばほとんどイレギュラーな時だけ 再入力で行けそうな気がするのですが。。。←一案です。。。^^;でわm(__)m (隠居じーさん) 2021/06/07(月) 15:04
皆様ご回答ありがとうございます。
隠居じーさん様が仰る通りイレギュラーが発生してしまうので困っていました^^;
勉強を始めたばかりでして、恥ずかしながらインプットボックス …初めて聞きました。
インプットボックスを調べまして、皆様から頂いた回答を元にもう一度作成してみたいと思います。
皆様ありがとうございました。
(ならもと) 2021/06/07(月) 15:40
最後に届いたものって事が条件であるなら『今日』から1日ずつ遡っていって、ファイルが存在する場合(Dir関数)に、
処理を実施するとかも有りなのではないでしょうか?
又はいっその事処理前のBookと処理済みのBookをフォルダ分けする事で、処理前のフォルダには1つしかBookが存在しない気もするのですが?
そのBookを同じくDir関数でBook名を取得し処理する。
その後は処理済みフォルダに移動させるとか?
と初級者は感じました。
(じゅんじゅん) 2021/06/07(月) 16:01
私も祝日などのイレギュラーな場合については気になっていました。
私が実際に使っているのは、ファイル名を特定するものではなく、 ダイアログボックスを開きそこから目的のファイルを選択するという方法です。
fNm = Application.GetOpenFilename("Excel ファイル (*.xls; *.xlsx),*.xls; *.xlsx")
こんな感じです。 (私も詳しくない) 2021/06/07(月) 16:37
コードにするとこんな感じです。
Sub sample() Dim fFolder As String fFolder = "保存されているフォルダパス"
'▼本日以前の終業日取得 Dim d As Date Dim wd As Long Dim n As Long d = Now() Do d = DateAdd("d", -1, d) wd = Weekday(d) If wd <> vbSunday And wd <> vbSaturday Then '▼休日設定Sheet1 A1:A20にあるとして n = Application.CountIf(Worksheets("Sheet1").Range("A1:A20"), Format(d, "yyyy/mm/dd")) If n = 0 Then Exit Do End If Loop
'▼ファイル名取得 Dim fName As String fName = "処理連絡" & StrConv(Format(d, "m/d"), vbWide) & "処理分.xlsx"
'▼ファイル検索 Dim findFileName As String findFileName = Dir(fFolder & "\" & fName, vbNormal)
If Len(findFileName) = 0 Then MsgBox Format(d, "m/d") & "のファイルがありません", vbExclamation Else MsgBox Format(d, "m/d") & "のファイルがありました", vbInformation End If
End Sub
(tkit) 2021/06/08(火) 08:34
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.