- 締切済み
VBAでNAS上の共有フォルダ内のファイルに書き
皆様、宜しくお願い致します。 私は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)
- 専門家の回答
みんなの回答
- skp026
- ベストアンサー率45% (1010/2238)
方法としては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
お礼
skp026様 この度は御礼が遅くなりまして大変恐縮です。 skp026様より頂戴しましたネットワークドライブの設定にて思いどおりに動作することができました。 とても有用なご回答をくださり、真に有難うございました。 また機会がありましたら、宜しくお願い申し上げます。