[[20210915101046]] 『サーバー上のフォルダーにファイルを保存』(hita) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『サーバー上のフォルダーにファイルを保存』(hita)

会社のサーバ上にあるフォルダ(例:0901(日付です))にファイルを保存したいのですが、マクロの知識が乏しいためご教授をお願いいたします。

0901フォルダーが未作成なら、0901フォルダを作成しファイルを保存。
既に0901フォルダーが作成してあればフォルダーを作成せずに、作成済みのフォルダ―内にファイルを保存。

フォルダーの有無は、多数の社員がサーバーを利用し、最初に利用した社員がフォルダーを作成する為です。

< 使用 Excel:Excel2016mac、使用 OS:Windows10 >


参考にしてください
https://vbabeginner.net/folder-existence-check/

(砂糖) 2021/09/15(水) 10:37


こちらが質問内容そのものでは。
https://www.moug.net/tech/exvba/0060035.html

(めいぷる) 2021/09/15(水) 11:19


砂糖様・めいぷる様
ありがとうございます。
HPを参考して、マクロを作成してみたのですが、上手く保存できません。

Dim SaveDir As String

  SaveDir = "\\12.34.56.789\02_共用_データ\02_報告要\" & Format(Date, "yyyymmdd")

   If Dir(SaveDir, vbDirectory) = "" Then
        MkDir SaveDir

 Dim Fname As String
          Fname = "\\rrr-sc\データ\" & Format(Date, "yyyymmdd") & 作成リスト.xlsx"

 ActiveWorkbook.SaveAs Filename:= _
           SaveDir & "\" & Fname, FileFormat:=xlOpenXMLWorkbook

  End If

End Sub

営業所のサーバー(\\rrr-sc〜)の中にある作成リストというファイルを本社サーバー(\\12,34,〜)のフォルダーに保存したいのですが、上記のマクロで上手くいきません。

色んな事間違ってたり、不足しているのだと思います。
上司がそんな難しくないやろ、サッサと作ってくれ!と言われ、大変困っています(苦笑)

あと、既に本社サーバーに日付フォルダーが作成されている場合のマクロも教えていただけると助かります。
どうぞ、よろしくお願いします。
(hita) 2021/09/15(水) 14:54


>上手くいきません。
どのように「上手く」いかないのかわかりませんが、
これ、あやしいですね。
 Fname = "\\rrr-sc\データ\" & Format(Date, "yyyymmdd") & 作成リスト.xlsx"

あと、
>既に本社サーバーに日付フォルダーが作成されている場合

「End If」の位置を変えるだけかと思います。
(わからん) 2021/09/15(水) 15:11


■1
既に指摘がありますが、↓おかしいですよね
 SaveDir & "\" & Fname

展開するとこうなるわけで【\\\】の部分が変です。

 \\12.34.56.789\02_共用_データ\02_報告要\20210915\\\rrr-sc\データ\20210915作成リスト.xlsx"
                                                 ~~~

■2
また、存在しないフォルダには保存できなかったと思いますので日付フォルダの配下の「\rrr-sc\データ」フォルダも先に作っておくべきでしょう。(試してないので存在しないフォルダに保存できたらごめんなさい)

提示されたコードでは、フォルダの作成に【MkDirステートメント】を使用されてますが、MkDirの場合親フォルダから順に作っていかなければならず、また既にある場合はエラーになってしまうので判定と作成を繰り返す必要がでてきてしまうのでわりとめんどくさいです。

この点について「使用 OS:Windows10」などのWindows環境であるならば、コマンドプロンプトの【MDコマンド】を利用すると深い階層まで一気に作成できるというメリットがあるので、使える環境であれば一考の価値があるとおもいます。
(既にフォルダが存在する場合でも、実行時エラーにならないというのもお勧めポイント)

■3
以上を踏まえて、Windows版のExcelならばこんな感じでよいとおもいます。
(使用 Excel:Excel2016mac とのことなので正常に動くのか不明ですが・・・・)

    Sub さんぷる()
        Dim フォルダパス As String
        Dim ファイル名 As String

        フォルダパス = "\\12.34.56.789\02_共用_データ\02_報告要\" & Format(Date, "yyyymmdd") & "\rrr-sc\データ"

        'MDコマンドでフォルダを作成(フォルダの作成が終わるまでループして待機)
        With CreateObject("WScript.Shell").Exec("%ComSpec% /c MD " & フォルダパス)
            Do While .Status = 0
                DoEvents
            Loop
        End With

        '保存処理
        ファイル名 = Format(Date, "yyyymmdd") & "作成リスト"

         ActiveWorkbook.SaveAs _
            Filename:=フォルダパス & "\" & ファイル名, _
            FileFormat:=xlOpenXMLWorkbook
    End Sub

(もこな2 ) 2021/09/16(木) 08:05


ご教示ありがとうございます。
教えていただいた事を参考にしたところ、思うように作成する事ができました。

お礼が遅くなり申し訳ございません。
そもそもスキルがない上に慌てていた事もあり、チンプンカンプンな質問をしてしまったと反省しております。

また、不明な事がありましたらエクセルの先生方にお尋ねしたいと思います。
本当にありがとうございました。
(hita) 2021/09/16(木) 10:41


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.