プロが教えるわが家の防犯対策術!

以下コードのうち、
newWb.SaveAs Range("E3") & "\" & Format(Now, "yyyymmdd") & "_見込み有.xlsx"
Dim folderPath As String
folderPath = Range("E5")

の箇所でエラー1004が発生します。
該当のフォルダパスは以下の通りExcelに記載しており、フォルダも存在するのですが、解決策が分かる方はいらっしゃいますでしょうか?

◆実行Excelシート
E3セル
C:\Users\kitto\Downloads\hokuho_フラグ有
E5セル
C:\Users\kitto\Downloads\hokuo_履歴一覧


◆コード
Function GetKeywords() As String()
Dim wb As Workbook
Set wb = ThisWorkbook

Dim ws As Worksheet
Set ws = wb.Worksheets(1)

Dim rng As Range
Set rng = ws.Range("C3:C" & ws.Cells(ws.Rows.Count, "C").End(xlUp).Row)

Dim keywords() As String
ReDim keywords(1 To rng.Rows.Count)

Dim i As Long
For i = 1 To rng.Rows.Count
keywords(i) = CStr(rng.Cells(i).Value)
Next i

GetKeywords = keywords
End Function

Sub TestGetKeywords()
Dim keywords() As String
keywords = GetKeywords()
End Sub

Sub SearchAndCopy()
Dim wb As Workbook
Dim newWb As Workbook
Set newWb = Workbooks.Add
Dim macroRunDate As String
macroRunDate = Format(Now, "yyyymmdd")
newWb.SaveAs Range("E3") & "\" & Format(Now, "yyyymmdd") & "_見込み有.xlsx"
Dim folderPath As String
folderPath = Range("E5")

Dim file As String
file = Dir(folderPath & "\*.xlsx")

Dim keywords() As String
keywords = GetKeywords()

Dim copiedSheets As New Collection

Do While file <> ""
Set wb = Workbooks.Open(folderPath & "\" & file)
Dim ws As Worksheet
For Each ws In wb.Worksheets
Dim rng As Range
Set rng = ws.UsedRange
For Each cell In rng
Dim keyword As Variant
For Each keyword In keywords
If InStr(cell.Value, keyword) > 0 And Not SheetIsCopied(ws.Name, copiedSheets) Then
ws.Copy After:=newWb.Sheets(newWb.Sheets.Count)
copiedSheets.Add ws.Name
Exit For
End If
Next keyword
Next cell
Next ws
wb.Close
file = Dir()
Loop

newWb.Close
End Sub

A 回答 (3件)

ソースを見て解りました。



Set newWb = Workbooks.Addって、新規ブックを設定しています。
その後で

newWb.SaveAs Range("E3") &・・・・
folderPath = Range("E5")
とやっています。

つまり、Range("E3")、 Range("E5")は新しいブックのシートのE3セル、
E5せるになるからです。

今作業しているブック・シートのE3やE5である事を明示する必要があります。

ASで別名指定しますが、直接指定しても構いません

Workbooks("ブック名").Worksheets("シート名").Range(""E3") ・・・
とか
Workbooks("ブック名").Worksheets("シート名").Range(""E5") ・・・
です。

開いて作業しているブック名、シート名を当てはめてください。
    • good
    • 1
この回答へのお礼

丁寧なご回答ありがとうございます!頂いたご指摘が正しかったようで、解決できました!

お礼日時:2023/02/20 14:47

こんにちは



いろいろありそうですが・・・

>以下コードのうち、
>newWb.SaveAs Range("E3") & "\" & Format(Now, "yyyymmdd") & "_見込み有.xlsx"
>Dim folderPath As String
>folderPath = Range("E5")
>の箇所でエラー1004が発生します。
3行分挙げられていますが、全部でエラーが発生しているわけでもないでしょう。
多分、最初の1行でエラーが発生しているのではないかと想像しました。

エラーの直接の原因は「存在しないパスを指定している」ものと想像します。
Save する直前で(=エラーの直前に)
Debug.Print Range("E3") & "\" & Format(Now, "yyyymmdd")
とでもしてみれば、すぐにわかるものと思います。
(デフォルト解釈を勘違いなさっているのではと想像します)


Downloadsフォルダに保存するってのも、なんだか一般的ではないような気もしますけれど・・
    • good
    • 1

本当にC:\Users\kitto\Downloads\・・なんですか?



C:\Users\User\kitto\Downloads\・・

じゃ有りませんか??
    • good
    • 1
この回答へのお礼

早速のご回答ありがとうございます。Usersの後にuser名(kitto)がパスとして入っている状況ですので、C:\Users\kitto\Downloads\・・が正しいはずでして、なぜうまく行かないのか、、、

お礼日時:2023/02/17 11:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!