Excel (VBA)

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

 
(Windows 10 Pro : Microsoft 365)
共有フォルダ上に、任意のファイルの保存を行うVBAについて
投稿日時: 22/06/15 16:26:37
投稿者: wgfyhsudji24w

 
以下URLを参考に共有フォルダ上に、任意のファイルの保存を行おうとしております。
共有フォルダに接続するところまでは成功しているのですが、MyFileの部分を"\ファイル名.csv"と指定してもエラーも出ず保存もできません。
また、MyFileを指定すれば現在操作している.xlsmファイルが共有フォルダに保存されるかと思いましたが、エラーも出ず保存もされません。
 
任意のファイルを共有フォルダ上に保存する方法についてご教示いただけないでしょうか。
よろしくお願いいたします。
 
https://teratail.com/questions/340878
 
Sub ShareFolderConnect()
 
Dim strDirectory As String
strDirectory = "\サーバー名\共有フォルダ名\"
 
Shell ("net use " & strDirectory & "パスワード/user:ユーザ名")
MsgBox ("ログオンしますか")
 
Dim strExist As String
strExist = Dir(strDirectory, vbNormal)
If (strExist = "") Then
    MsgBox ("フォルダが存在していない。")
    
    ActiveWorkBook.SaveAs Filename:=strDirectory & Myfile
    ActiveWorkBook.Close
    
    Exit Sub
 
End If
 
End Sub

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

>strExist = Dir(strDirectory, vbNormal)
は、フォルダ内のファイルを取得するコードです。
「フォルダが存在しない」というメッセージを優先するならば、
vbNormal
ではなくて、vbDirectoryを指定する必要があります。
 
しかし、これからファイルを保存するわけだから、
同名のファイルが存在するかチェックするならば、ファイル名を指定しないといけないと思いますが・・・・
MyFileは、定義しているところも、値をセットしているところも見当たらないが・・・・

回答
投稿日時: 22/06/16 08:48:18
投稿者: simple

strExist = ""が
成立しないとき(つまりフォルダが存在したとき)の処理が書いてないからです。
ステップ実行したりして、想定どおりの動作をしているのか確認する必要があります。
If .... Then
 
Else
 
End If
といった構文になるのでは?

回答
投稿日時: 22/06/16 14:51:24
投稿者: Suzu

strDirectory のパスに フォルダを指定し、vbNormal の際には
 ・フォルダが無い
 ・そのフォルダ内にファイルダが無い
  上記の場合空白文字列が返ります。
 
なので、指定したフォルダがあっても、ファイルが無い場合にも
フォルダが無い 旨のメッセージが処理されてしまいます。
 
全体の流れとしては、下記の様になります。
 
If フォルダの存在確認 Then
    ' フォルダが無いとき
    MsgBox "フォルダが存在していない。"
Else
    'フォルダがあるとき
    If ファイルの存在確認 Then
        ' ファイルが無いとき
        保存処理
    Else
        ' ファイルが存在しているとき
        MsgBox "同名ファイルが存在しています。"
    End If
End If

投稿日時: 22/06/16 18:14:31
投稿者: wgfyhsudji24w

皆さん、コメントを頂き、誠にありがとうございます!大変助かりました!
ご指摘いただいた頂きました以下を変更致しました。
 
vbNormal → vbDirectoryに変更しました。
確かにvbNormal の時はフォルダがないと出力されてしまってました。
 
また、Elseを追加し、MyBookに保存したいファイルの格納先フォルダパスを指定しました。
フォルダがない時の動作は指定したが、フォルダがある時の動作を指定していない事承知しました。
 
最終的以下にて-----動作致しました!これからファイルが存在する時の動作も追加しようと思います。
 
ありがとうございました!
 
----------------------------
Sub ShareFolderConnect()
  
Dim strDirectory As String
Dim MyBook As Workbook
 
strDirectory = "\サーバー名\共有フォルダ名\"
  
Shell ("net use " & strDirectory & "パスワード /user:ユーザ名")
MsgBox ("ログオンしますか")
  
Dim strExist As String
strExist = Dir(strDirectory, vbDirectory)
If (strExist = "") Then
    MsgBox ("フォルダが存在していない。")
  
Else
 
 Set MyBook = Workbooks.Add("フォルダパス\ファイル名")
 MyBook.SaveAs Filename:=strDirectory & "ファイル名"
 MyBook.close
    
    
    Exit Sub
  
End If
  
End Sub