
EXCEL2000で、EXCELのファイルと、データ専用のファイルを組にして運用しています。都度データファイルのバックアップを取るために、VBA中でネットワークコンピュータ(LAN)のフォルダにFileCopyしようとするのですが、ファイルが見つからないというエラーが出て、コピー出来ません。しかし、エクスプローラーで一回ネットワークフォルダーを開いてから終了し、再度VBAを実行すると問題なくコピー出来ます(何か道筋が出来るらしい)。
また、WEBで調べてAPIのCopyFileを用いると良いという記事をみて、トライしましたが事態は同じでした。なお、過去の類似の質問で、WindowsXPの場合のMicrosoftの情報が紹介されていましたが、本ケースでは両方のPCともWindows98です。
以上、宜しくお願いします。
No.5ベストアンサー
- 回答日時:
こんにちは。
様子が見えてきましたね。パスワードの件、おそらく他に正解があると思いますが、
ネットワークドライブを割当てるのが手っ取り早いかと。
Dim FS, WshNet
Const strDrive = "Z:"
Set FS = CreateObject("Scripting.FileSystemObject")
Set WshNet = CreateObject("WScript.Network")
If Not FS.DriveExists(strDrive) Then
WshNet.MapNetworkDrive strDrive, "\\コピー先PC\コピー先フォルダ", False, , "パスワード"
End If
FS.CopyFile "コピー元パス", strDrive & "\", True
Set WshNet = Nothing
Set FS = Nothing
です。
ドライブ割当ては、
WshNet.MapNetworkDrive "ドライブレター", "割当てパス", False, "ユーザ名", "パスワード"
の部分で、False を True にすると、起動時に再接続します。
また、WinMe で確認しましたがユーザ名は省略できるようです。
ファイルのコピーに FileSystemObject を使っているようなので大丈夫とは思いますが、
念のため、実行する端末には最新の Win98 用 スクリプトランタイムを入れてください。
下記からダウンロードできます。
参考URL:http://www.microsoft.com/downloads/details.aspx? …
ご教示いただいたコードで、ネットワークコンピュータのフォルダにバックアップが取れるようになりました。勤務先のPCであり、スクリプトランタイムの最新版インストールにはシステム管理部門の承認が必要なため、とりあえず現状のままでやってみましたが、問題なく動作しました。
従来、ワークシート中にデータも保管していた時は、パス指定で保存する方法でバックアップを取っていましたが、それでも時々失敗することがありました。それも、今思うと同じ原因だったのでしょう。
これでスッキリしました。ありがとうございました。
No.4
- 回答日時:
こんにちは。
前回のアドバイス内容は、WSH(Windows Script Host)ネタの一種です。
WSH で検索すると色々と技が習得できます。
今回、Win98 だったので まるで動かないかな? と不安もありました(^^;
>コピー元のパスが、昔ながらのDOSのルールの命名でないと・・・
ショートネームで動くのであれば、ロングネームをダブルコーテンションで括ってください。
前回の内容から例にすると、
.NameSpace("\\コピー先PC\コピー先フォルダ").CopyHere """C:My Document\コピー元パス.xls""", 16
引用符(ダブルコーテーション)内部に引用符を記述するには "" と 2回重ねてください。
また、コピー元パスを変数に格納した場合は、
.NameSpace("\\コピー先PC\コピー先フォルダ").CopyHere """" & strCopyPath & """", 16
になります。
コピー状況表示が表示されなかったのは、コピーサイズが小さかったか、
転送速度が速かったか、またその両方かで、表示するより早くコピーが終了した為です。
重いネットワーク、大きなサイズまたは多数のファイルをコピーすると出ます。
アドバイスありがとうございます。ダブルクォーテーション2重はまだ試行しておりませんが(勤務先でないと出来ない)、本日ひょんな事で原因が分かった様な気がします。エクスプローラで、当該ネットワークフォルダーを含むツリーを表示させ、別のMy Documentのフォルダーのウィンドウからファイルをドラッグ&ドロップすると、「ファイルシステムのエラーです、パスワードが違っていますという」エラーメッセージが出ました。このフォルダーへのパスワードはエクスプローラでは保存されているため、ダブルクリックすれば普通に開くことが出来ます。というわけで、単にVBAからFileCopyをしただけでは、パスワードを渡せないためエラーが出るのだと思います。
WSHを用いてパスワードを渡してコピーする(ファイルオブジェクトを作る?)事は可能でしょうか。よろしくお願いします。
No.3
- 回答日時:
こんにちは。
#1 で書いた、Wendy02 です。
If Not .DriveExists(myPath) Then Exit Sub
の代わりに、
If Not .DriveExists(myPath) Then Msgbox "存在していません。": Exit Sub
If Not .IsReady Then Exit Sub
の代わりに、
'myPath = "\\○○\××"
If Not .IsReady Then
Set objNetwork = CreateObject("WScript.Network")
objNetwork.MapNetworkDrive "X:", myPath
End If
などとしてみるのも方法です。
うまく出来ないとしたら、他の要因があるかもしれませんが、私は、こちらの方面は詳しくありません。
ご回答ありがとうございます。
その後判明した事ですが、ネットワークフォルダーにフルアクセスのパスワードが一つ設定してあり、エクスプローラ上ではパスワードを記憶しているため、フォルダーが開け、一旦開通するとその状態が維持されるものの、それを行わずに単純にVBAからFileCopyしても、パスワードが違うとしてはねられてしまうと考えられます。上記操作をパスワードを渡して行う事は可能でしょうか?ご教示下さい。
No.2
- 回答日時:
こんにちは、わたしも同様に様子が解っていません (^_^;
>しかし、エクスプローラーで一回ネットワークフォルダーを開いて・・・・
とありますので、コードからエクスプローラを
立ち上げてしまうのは、ドロくさいですか。例えば、
With CreateObject("Shell.Application")
.Explore("\\コンピュータ名\フォルダ名")
End With
ただし、開いたエクプローラを閉じる方法を知りません。m(__)m
あと、以下のコピー方法もお試しください。
With CreateObject("Shell.Application")
On Error Resume Next
.NameSpace("\\コピー先PC\コピー先フォルダ").CopyHere "コピー元パス", 16
If Err Then
MsgBox "ユーザによりコピーが中断されました"
End If
On Error GoTo 0
End With
これは、エクプローラの機能でファイルをコピーします。(引数 16 は上書コピー指定)
コピー状況が表示され、またコピー元パスにワイルドカードが使えます。
この回答への補足
アドバイスありがとうございます。Auto_Closeの中で、コピー元、先共にファイル名までフルパスを指定して、FileCopy sourceFile, destFile とやっているだけです。
教えていただいた内容を試行できるのは月曜になりますので、補足の形で返事をさせていただきます。
試行した結果をお知らせします。
いきなりエラーが出て、原因調査のため試行錯誤を行っていたため、遅くなって申し訳ありませんでした。
コピー元のパスが、昔ながらのDOSのルールの命名でないと、ファイルシステムのエラーというのが出て、うまく行きません。フォルダーが"\My Document"の場合、ファイル名が2バイト文字の場合共にエラーが発生します。"C:\test\test.txt"といった名前だと、正常動作しました(コピー状況表示は出ませんでしたが)。制約が多すぎて、それ以上の検証は行っておりません。何か対応法がありましたら、ご教示下さい。
No.1
- 回答日時:
こんばんは。
コードをみないと、なんともコメントしがたいのですが、私は、状況をあまり把握していません。
コードの最初に
MyPath = "\\サーバー名 \○○\"
If Dir(MyPath & Fname) <> "" Then
'-実行
End If
とするか、
Set objFSO = CreateObject("Scripting.FileSystemObject")
With objFSO
If Not .DriveExists(myPath) Then Exit Sub
With .GetDrive(myPath)
If Not .IsReady Then Exit Sub
End With
End With
'-実行
なんていう、オプションをつければよいのではないでしょうか?
この回答への補足
アドバイスありがとうございます。
”コードをみないと”という程、大それたものではありません。Auto_Closeの中で、コピー元、先共にファイル名までフルパスを指定して、
FileCopy sourceFile, destFile
とやっているだけです。
アドバイスいただいた内容に関しては、下記の通りのコードを、FileCopy sourceFile, destFileに先駆けてやってみましたが変化無しです。
Dim myPath As String
Dim objFSO As Object
myPath = "\\○○\××"
Set objFSO = CreateObject("Scripting.FileSystemObject")
With objFSO
If Not .DriveExists(myPath) Then Exit Sub
With .GetDrive(myPath)
If Not .IsReady Then Exit Sub
End With
End With
帰宅間際に少しいじっただけなので、吟味は出来ていませんが、
上のような理解で良いのでしょうか?次に試行できるのは月曜になりますが、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロの付いたExcelが開けません 3 2023/02/01 10:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/07/01 12:54
- その他(データベース) Excel VBA 転記について 1 2022/04/20 16:55
- Visual Basic(VBA) Excel VBA ファイル取得について フォルダの中に、ファイル名“会議“を含むファイルが1つまた 9 2022/10/12 01:18
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Excel(エクセル) Excel ハイパーリンク設定について 教えてください 例なんですが、 VBAにてファイル1の列Gに 2 2022/11/04 17:52
- Excel(エクセル) 1つのファイルを3つのフォルダにファイル名を【明日の日付】にして、コピーをしたい 2 2022/12/21 17:43
- PostgreSQL ポストグレにあるExcelファイルを開くには 1 2022/12/13 18:07
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
このQ&Aを見た人はこんなQ&Aも見ています
-
マクロでネットワーク上のコンピューターへの接続
Excel(エクセル)
-
【Excel VBA】ネットワーク上の共有フォルダにあるExcelを開く
Excel(エクセル)
-
会社のネットワーク上のファイルを開けない こんにちわ 今大変困ってます 会社のネットワーク上のファイ
Visual Basic(VBA)
-
-
4
VBAでサーバーにアクセスするにはどうすればいいの?
Access(アクセス)
-
5
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
6
ネットワーク上にある共有ファイルのVBAエラー
Excel(エクセル)
-
7
VBAでサーバー上のファイルを開く
Excel(エクセル)
-
8
ネットワークドライブのファイルをFileCopyできない
Visual Basic(VBA)
-
9
VBAで文字を反映させると255文字の制限になってしまいます。
Visual Basic(VBA)
-
10
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
11
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
12
Access画面を非表示にする方法
その他(データベース)
-
13
エクセルマクロでエラーの原因がわかりません。
Visual Basic(VBA)
-
14
Accessで別mdbのテーブルをコピー
その他(プログラミング・Web制作)
-
15
VBA ネットワーク上のファイルでカレントフォルダを取得するには?
Visual Basic(VBA)
-
16
Excelで指定したフォルダに保存するマクロ
Excel(エクセル)
-
17
お助けください!VBAのファイル名エラーについて
Visual Basic(VBA)
-
18
vba クリップボードクリアについて教えてください
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ひとつのファイルを一括で複数...
-
複数のフォルダへ同時にファイ...
-
XCOPYで指定したフォルダとファ...
-
ファイル名の順番通りにコピー...
-
コマンドプロンプトでフォルダ...
-
ファイルのコピー正常終了を確...
-
バッチ
-
パソコン、ワンドライブをプリ...
-
右クリックのショートカットメ...
-
DOSコマンドでファイルをコピー...
-
ニンテンドースイッチのSDカー...
-
windows10 フォルダを上書きす...
-
ACCESSでエラーになるの...
-
SONY VAIO PCG-SRX7のHDD交換に...
-
Windows10 正しくファイルコピ...
-
バッチでファイルをコピーしよ...
-
外付HDDにフォルダーが作れず、...
-
DVD-Rに取り込んだ写真について...
-
コピーエラーが起きないように...
-
robocopyでフォルダ自体のコピ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ひとつのファイルを一括で複数...
-
複数のフォルダへ同時にファイ...
-
XCOPYで指定したフォルダとファ...
-
DOSコマンドでファイルをコピー...
-
ROBOCOPYで移行元と先でサイズ...
-
SDカードをパソコンに落とす...
-
Windows10 で登録した外字を他...
-
VBAマクロ 実行時エラーが出た...
-
ファイル 「送る」と「コピー...
-
ファイルのコピー正常終了を確...
-
パソコン、ワンドライブをプリ...
-
ファイル名の順番通りにコピー...
-
robocopyでフォルダ自体のコピ...
-
Windows10使用中。「同名ファイ...
-
VBAでネットワークコンピュータ...
-
robocopyコマンドのミラーコピ...
-
特定の拡張子だけディレクトリ...
-
windows10 フォルダを上書きす...
-
外付けHDDのデータ転送が遅い
-
エクセルに添付された画像をフ...
おすすめ情報