Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2013)
マクロ文の件
投稿日時: 21/04/07 19:09:45
投稿者: ひっちん1

どなたかご教授お願いします
 
下記マクロ文で
 
 K2のセルには  hi の文字が入っています
 
Sub macro1a()
'ワークブックを新規作成して名前を付けて保存、閉じる
 
    Dim wb As Workbook
    Dim wb_path As String
    Dim wb_name As String
     
    wb_path = "C:\Users\" & Range("K2").Value & "\Desktop\経費CSV"
    wb_name = "経費1"
       
    Set wb = Workbooks.Add
    wb.SaveAs Filename:="C:\Users\hi\Desktop\経費CSV" & "\" & wb_name, _
    FileFormat:=xlCSV
     
End Sub
 
とした場合、問題なく動きますが
 
 wb.SaveAs Filename:="C:\Users\hi\Desktop\経費CSV" & "\" & wb_name, _
    FileFormat:=xlCSV
   この分を
 
wb.SaveAs Filename:="C:\Users\" & Range("K2").Value & "\Desktop\経費CSV" & "\" & wb_name, _
       FileFormat:=xlCSV
 
に変更を行うと、黄色く反転してエラーとなります
 
実行エラー1004
ファイルにアクセスできませんでしたが出ます
 
 
説明が下手でわかり辛いと思いますが
よろしくご教示お願いします
 
 
 
 
 
 
 

回答
投稿日時: 21/04/07 19:35:43
投稿者: simple

Range("K2").Value
にブックやシートの指定がないので、
その新たに作ったブックの、アクティブシートにあるK2セルを見にいっているのでは?
 
こういうときは、
 Dim s As String
 s = "C:\Users\" & Range("K2").Value & "\Desktop\経費CSV" & "\" & wb_name
 Debug.print s
などとやって、自分で確認することが大切です。

回答
投稿日時: 21/04/07 22:15:24
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:
wb_path = "C:\Users\" & Range("K2").Value & "\Desktop\経費CSV"

 
↑のコードは、何のためのですか?
 
引用:
wb.SaveAs Filename:="C:\Users\hi\Desktop\経費CSV" & "\" & wb_name, _
    FileFormat:=xlCSV

 

    wb.SaveAs Filename:= wb_path & "\" & wb_name, _
    FileFormat:=xlCSV
 
のように変更すれば、よいのでは?
     

回答
投稿日時: 21/04/08 09:50:14
投稿者: WinArrow
投稿者のウェブサイトに移動

マクロを作成(コーディング)するときに注意すべきこと
次の2つの構文について
[quote="ひっちん1"]
 
    wb_path = "C:\Users\" & Range("K2").Value & "\Desktop\経費CSV"
      
    Set wb = Workbooks.Add
[quote]
 
前者にコードで参照しているセル(Range"K2"))は、
Simpeさんのレスにもb_pah = あるように
シートで修飾していないので
この時点でアクティブになっているブック(おそらく、自ブック)を
参照していることになっています。
 
後者のコードでは、
新しく作成したブックがアクティブになります。
従って、シートで修飾していないセルは
このアクティブとなっているシートのセルを参照します。
勿論、当該セルは空白ですから、使い方によりエラーになる可能性があります。
 
複数シートを使う場合は、
どのブックの、どのシートのセルなのかを認識(コードで記述)しないと
Excel任せになってしまいます。
 
対応策
例えば、前者の場合
With Thisworkbook.Sheets("Sheet1")
    wb_path = .Range("K2").Value
End With
のような記述になります。
 

投稿日時: 21/04/09 09:44:44
投稿者: ひっちん1

WinArrowさん
simpleさん
 
ありがとうございます
 
WinArrowさんのご説明は丁寧にご教示いただき
助かりました
 
少しですが理解できましたので
変更して作成に取り組みたいと思います
 
ありがとうございました。