はじめまして。
会社で「若い」と言う理由だけで、プログラムの作成を任されてしまいました。
ですので、いままでVBを触った事のないはまったくの初心者です。
もう自分の力ではどうしようもないので、皆さんのお力を貸してください。
作りたいプログラムは、とあるサーバーのあるフォルダ内のファイルを全て別の
サーバーにFTP(PUT)すると言う物です。
色々な参考書などを見ていたところ、以下のプログラムが使えそうなのですが…。
----------------------------------------
Option Explicit
Private Sub Form_Load()
Dim strFtpSvr As String
Dim strUserID As String
Dim strPassword As String
Dim strRemoteFile As String
Dim strLocalFile As String
strFtpSvr = "*****" 'サーバー名を設定
strUserID = "*****" 'ユーザーIDを設定
strPassword = "*****" 'パスワードを設定
strRemoteFile = "*****" 'リモートファイルのパスを設定
strLocalFile = "*****" 'ローカルファイルのパスを設定
If FtpPut(strFtpSvr, strUserID, strPassword, strRemoteFile, strLocalFile) Then
End If
End Sub
'----------------------------------------------------------
' FTP PUT
'----------------------------------------------------------
Function FtpPut(strFtpSvr As String, strUserID As String, strPassword As String, strRemoteFile As String, strLocalFile As String) As Boolean
Dim hInternet As Long
Dim hFTP As Long
Dim lngret As Long
Dim strErrText As String
FtpPut = True
On Error GoTo ErrHandler
hInternet = InternetOpen(vbNullString, _
INTERNET_OPEN_TYPE_PRECONFIG, _
vbNullString, _
vbNullString, _
0&)
If hInternet = 0 Then
strErrText = "InternetOpen:GetLastError=" & Err.LastDllError()
MsgBox strErrText, vbOKOnly + vbExclamation, App.Title & "<FtpPut>"
FtpPut = False
Exit Function
End If
hFTP = InternetConnect(hInternet, _
strFtpSvr, _
INTERNET_DEFAULT_FTP_PORT, _
strUserID, _
strPassword, _
INTERNET_SERVICE_FTP, _
0&, _
0&)
If hFTP = 0 Then
strErrText = "InternetConnect:GetLastError=" & Err.LastDllError()
MsgBox strErrText, vbOKOnly + vbExclamation, App.Title & "<FtpPut>"
FtpPut = False
Exit Function
End If
lngret = FtpPutFile(hFTP, _
strLocalFile & vbNullChar, _
strRemoteFile & vbNullChar, _
FTP_TRANSFER_TYPE_BINARY, _
0&)
lngret = InternetCloseHandle(hFTP)
lngret = InternetCloseHandle(hInternet)
Exit Function
ErrHandler:
FtpPut = False
MsgBox "<" & Err & ">" & Error(Err), vbOKOnly + vbExclamation, App.Title & "<FtpPut>"
Exit Function
End Function
----------------------------------------
長くなってしまい申し訳ありません。
これでは、一つのファイルのみで複数のファイルがPUTで来ません。
素人考えで、LOOP処理を入れてあげれば良いのでは?とは思うのですが、どのよう
にすればよいのかさっぱりわかりません。
また、実現可能なのであれば同じファイルがFTP先にも存在する場合はPUTしない
と言う処理も入れたいと思っています。
色々と試しては見たものの、うまくいかなくてただいま手詰まり状態です。
よろしければ、どの様に上記のプログラムを変更したらよいのかを教えていただき
たいと思います。
FTPのことは詳しくないので素人レベルでの返答です。
ソースを見た限りだと
lngret = FtpPutFile(hFTP, _
strLocalFile & vbNullChar, _
strRemoteFile & vbNullChar, _
FTP_TRANSFER_TYPE_BINARY, _
0&)
この行をループすればいいのではないかとを思うのですがどうでしょう?
k.k様
>この行をループすればいいのではないかとを思うのですがどうでしょう?
その通りですね。
問題はどうやってループさせれば良いのか?と言うところで悩んでいました。
とりあえず、Dir関数を使いFTP元のフォルダを検索。
ファイルが存在すればPUTするという処理を実現する事が出来ました。
また「同じファイルがFTP先にも存在する場合はPUTしない」と言うのも、
PUTした際にそのファイルを違うフォルダに移す事で何とかなりそうです。
どうもありがとうございました。
ツイート | ![]() |