• 締切
  • すぐに回答を!

VBAでNAS上の共有フォルダ内のファイルに書き

  • 質問No.9265081
  • 閲覧数989
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 68% (11/16)

皆様、宜しくお願い致します。
私はVBA歴が浅く初心者に近いため、何卒ご教示の程お願い申し上げます。

「楽天Q&A」の諸先輩方のご教示のお陰で、今回「ユーザーフォーム.xlsm」のファイル名で
VBAのユーザーフォームを作成し、「確定」ボタンをクリックすると、このユーザーフォームで
入力した内容を別のブックである「ご意見箱.xlsx」の「sheet1」に自動反映できるようになりました。

そこで、一点ご質問です。

ローカルディスク上では上記のように正常に動作できますが、この「ユーザーフォーム.xlsm」と
「ご意見箱.xlsx」の両ファイルをNAS上の「共有フォルダ」内に置いた環境下で、
NASと同一ネットワーク上の他のクライアント端末からも「ユーザーフォーム.xlsm」を開いて
ユーザーフォームへの入力と、別のブックである「ご意見箱.xlsx」の「sheet1」に入力した内容を
自動反映させたいのですが、具体的にそのVBA構文をご教授頂けませんでしょうか・・・?

ネットワークパスは、\\IPアドレス\共有フォルダ\「ユーザーフォーム.xlsm」と
\\IPアドレス\共有フォルダ\「ご意見箱.xlsx」でございます。

自分なりに方策を色々と調べてみたのですが、現在使っている「Dir」関数ではなく
「FileSystemObject」を用いれば、VBAの基本構文で記述できるようですが、
具体的にどのように記述したらいいのか詳細までは掴めませんでした・・・。

以下に現在、ローカルディスク上で問題なく動作しているVBA構文を参考までに掲載しておきます。


★【ThisWorkbook】のVBA構文は、以下のようになっております。

'このExcelファイルを開いた時に行う処理
Private Sub Workbook_Open()

On Error Resume Next
Sheets("Sheet1").Activate '[ご意見入力フォームを開く]ボタンがあるシートを開く
On Error GoTo 0
Application.Run "Opinion_Box_Open"

End Sub


★【フォーム】(Opinion_Box)のVBA構文は、以下のようになっております。

'ユーザーフォームを開く
Private Sub Opinion_Box_Open()

Const myInformation As String _
= "現在は「ご意見箱」を利用する事ができません。"
Dim PostRow As Long, buf As Variant _
, PostingOK As Boolean, Dummy(2) As String

Call Confirm_posting_place( _
myInformation, PostingOK, Dummy(0), Dummy(1), Dummy(2))
If PostingOK Then Opinion_Box.Show

End Sub


'ユーザーフォームに入力された投書データの転記先の有無を確認
'及び転記先Bookを開く事が可能な状況かどうかの確認
Sub Confirm_posting_place( _
ByVal myInformation As String, _
ByRef PostingOK As Boolean, _
ByRef StoragePath As String, _
ByRef PostFileName As String, _
ByRef PostSheetName As String)

Dim buf As Variant

StoragePath = "C:\Users\egmainlx\Desktop" '転記先のファイルが存在するフォルダーのパス
PostFileName = "ご意見箱.xlsx" '転記先のファイルのファイル名
PostSheetName = "Sheet1" '転記先のファイル上の転記先のシートのシート名

buf = ""
On Error Resume Next
buf = Windows(PostFileName).Caption
On Error GoTo 0
If buf = PostFileName Then
PostingOK = Windows(PostFileName).Parent.Path = StoragePath
Else
PostingOK = True
End If
If Dir(StoragePath, vbDirectory) = "" Then
PostingOK = False
MsgBox "「ご意見箱」の投書内容の保存先のファイルがあるフォルダーとして" _
& "設定されているフォルダが見当たらないため、" & myInformation _
& vbCrLf & vbCrLf & "「ご意見箱」を利用される方は、このトラブル内容を" _
& "「ご意見箱」の開発者(川添)へ報告して対応してもらうようにして下さい。" _
, vbExclamation, "《トラブル報告》保存先ファイル不明"
ElseIf Dir(StoragePath & "\" & PostFileName) = "" Then
PostingOK = False
MsgBox "「ご意見箱」の投書内容の保存先のファイルとして設定されている" _
& vbCrLf & vbCrLf & PostFileName & vbCrLf & vbCrLf & _
"が所定のフォルダー内には見当たらないため、" & myInformation _
& vbCrLf & vbCrLf & "「ご意見箱」を利用される方は、このトラブル内容を" _
& "「ご意見箱」の開発者(川添)へ報告して対応してもらうようにして下さい。" _
, vbExclamation, "《トラブル報告》保存先フォルダー不明"
Else
buf = Chr(0)
On Error Resume Next
buf = ExecuteExcel4Macro("'" & StoragePath _
& "\[" & PostFileName & "]" & PostSheetName & "'!R65536C256")
On Error GoTo 0
If buf = Chr(0) Then
PostingOK = False
MsgBox "「ご意見箱」の投書内容の保存先として設定されている" _
& vbCrLf & vbCrLf & PostFileName & vbCrLf & vbCrLf & _
"というExcelBookの中には、投書内容の転記先として設定されている" _
& vbCrLf & vbCrLf & PostSheetName & vbCrLf & vbCrLf & _
"というシート名のシートが見当たらないため、" & myInformation _
& vbCrLf & vbCrLf & "「ご意見箱」を利用される方は、このトラブル内容を" _
& "「ご意見箱」の開発者(川添)へ報告して対応してもらうようにして下さい。" _
, vbExclamation, "《トラブル報告》保存先シート不明"
ElseIf Not PostingOK Then
Windows(PostFileName).Activate
MsgBox "「ご意見箱」の投書内容の保存先のExcel Bookとして設定されている" _
& vbCrLf & vbCrLf & PostFileName & vbCrLf & vbCrLf & _
"と同名の別Book(保存先フォルダが異なるBook)が開いているため、 " _
& myInformation & vbCrLf & vbCrLf _
& "「ご意見箱」を利用される場合には、現在開かれている" & vbCrLf & vbCrLf _
& Left(PostFileName, InStrRev(PostFileName, ".") - 1) & vbCrLf & vbCrLf & _
"というWindowのExcel Bookを閉じても問題がないか否かを確認し、" _
& "特に問題がない場合には、そのWindowのExcel Bookを閉じてから、" _
& "このフォームを開き直して下さい。" _
, vbExclamation, "保存先ファイルへのアクセス不能"
End If
End If

End Sub


補足欄にも残りもう一つの「Module1」のVBA構文を掲載しておきます。

皆様、何卒ご教示の程、切にお願い申し上げます。(拝)

回答 (全1件)

  • 回答No.1

ベストアンサー率 45% (766/1688)

方法としては2つあります。

OSのネットワークドライブの追加の機能を利用し、
VBAからはローカルドライブのひとつとしてアクセス。
追加(マウント)の仕方
http://www.tku.ac.jp/iss/guide/network/tool/networkdrive/windiwswindows7.html

もうひとつは、SetCurrentDirectoryAなど、
OSのAPIを直接操作する方法です。
APIについては以下が参考になります。
http://officetanaka.net/other%5Cextra%5Ctips15.htm
お礼コメント
rhythm_red11

お礼率 68% (11/16)

skp026様

この度は御礼が遅くなりまして大変恐縮です。

skp026様より頂戴しましたネットワークドライブの設定にて思いどおりに動作することができました。

とても有用なご回答をくださり、真に有難うございました。

また機会がありましたら、宜しくお願い申し上げます。
投稿日時:2017/01/23 11:39
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

ピックアップ

ページ先頭へ