[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『インターネット経由でEXCELファイルのダウンロード』(どらみ)
EXCELファイルの自動バージョンアップ的な意味でマクロで インターネット経由でEXCELファイルをダウンロードしたいのですが 可能でしょうか? http://???.ddo.jp/db/test.xlsと言った感じで、ユーザー、パスワードは 聞いてこずフリーです。 出来れば、インターネットエクスプローラーも起動せず、無表示のままで、 ファイルがダウンロードされるだけ。
参考になると思います。
『Colo's Excel Junk Room -vba tips』 http://puremis.net/excel/code/028.shtml (MARBIN)
例ではindex.shtmlとなっておりshtml?となりましたが、 以下の様にわりとすんなりいけました。 Option Explicit Private Declare Function URLDownloadToFile Lib "urlmon" Alias _ "URLDownloadToFileA" ( _ ByVal pCaller As Long, ByVal szURL As String, _ ByVal szFileName As String, _ ByVal dwReserved As Long, _ ByVal lpfnCB As Long) As Long '-------------------------------------------------------------------------------- Sub DownloadFileFromWeb() Const strUrl As String = "http://???.ddo.jp/ex/test.xls" Dim strSavePath As String Dim returnValue As Long strSavePath = ThisWorkbook.Path & "\" & "test.xls" returnValue = URLDownloadToFile(0, strUrl, strSavePath, 0, 0) If returnValue = 0 Then MsgBox "Sccess!" Else MsgBox "Did not success." End If End Sub
どうせならアップロードもやりたい(どらみ) DownloadとなっているところをUploadと変えれば出来るかと 甘い事を考えましたが、結果は、 URLUploadToFileAが urlmon dllファイル内に見つかりません。 となります。URLUploadToFileAは、無いっちゅう事ですね? ちなみにURLUploadToFileも同じ。
試してないけどいけるとおもいます。
http://www.happy2-island.com/access/gogo03/capter90302.shtml
(MARBIN)
えらい難しくなりました。(どらみ) コピーして動かしただけではエラーしましたので、 Public Declare Function を他のところから見つけてコピーしました。apiは別途必要と下に書いてあった。
'接続に成功したら、FTPサーバへファイルをアップロードします If lngRC = 0 Then ここで接続されていない事がわかりました。 fcFTPConnect("????.ddo.jp", "user", "pass")のドメイン名、user passは、 fttpソフトで接続テストをやり何度やってもOKです。 つながらない理由わかりますか?すみませんね。
' ------------------------------------------------------ ' インターネットセッション ' ------------------------------------------------------ Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" ( _ ByVal sAgent As String, _ ByVal lAccessType As Long, _ ByVal sProxyName As String, _ ByVal sProxyBypass As String, _ ByVal lFlags As Long _ ) As Long ' ------------------------------------------------------ ' セッションクローズ ' ------------------------------------------------------ Public Declare Function InternetCloseHandle Lib "wininet.dll" ( _ ByVal hInet As Long _ ) As Integer
' ------------------------------------------------------ ' インターネット接続 ' ------------------------------------------------------ Public Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" ( _ ByVal hInternetSession As Long, _ ByVal sServerName As String, _ ByVal nServerPort As Integer, _ ByVal sUsername As String, _ ByVal sPassword As String, _ ByVal lService As Long, _ ByVal lFlags As Long, _ ByVal lContext As Long _ ) As Long
'変数の定義 ※(General)(Declarations)です Private lngWinINet As Long 'インターネットハンドルの保存用 Private lngFtpHnd As Long 'FTPハンドルの保存用 '---------------------------------------------------------------------- Sub prcFTPUpLoadSample() Dim lngRC As Long 'インターネットサービスをオープンします lngRC = fcInternetOpen 'オープンに成功したらFTPサーバとの接続と切断を行います If lngRC = 0 Then 'FTPサーバへ接続します lngRC = fcFTPConnect("????.ddo.jp", "user", "pass") '接続に成功したら、FTPサーバへファイルをアップロードします If lngRC = 0 Then 'Call fcFTPPutFile("c:\happy\filename.txt" _ , "/work/data/filename.txt" _ , FTP_TRANSFER_TYPE_ASCII) End If End If 'FTPをクローズします Call fcFTPDisConnect 'インターネットサービスをクローズします Call fcInternetClose End Sub '---------------------------------------------------------------------- Function fcFTPPutFile(dLc As String, dRmt As String, dMd As Long) As Boolean 'dLc /ローカルファイル 'dRmt/リモートファイル 'dMd /転送モード 'FTPサーバへファイルをアップロード fcFTPPutFile = FtpPutFile(lngFtpHnd _ , dLc _ , dRmt _ , dMd _ , 0) End Function '---------------------------------------------------------------------- Function fcFTPConnect(Server As String, User As String, Psw As String) As Long 'APIの実行/FTPサーバへ接続 lngFtpHnd = InternetConnect(lngWinINet _ , Server _ , INTERNET_DEFAULT_FTP_PORT _ , User _ , Psw _ , INTERNET_SERVICE_FTP _ , 0 _ , 0) 'この関数の戻り値には、APIの処理結果コードを返します fcFTPConnect = Err.LastDllError End Function '---------------------------------------------------------------------- Function fcFTPDisConnect() As Long 'APIの実行/FTPサーバから切断 Call InternetCloseHandle(lngFtpHnd) 'この関数の戻り値には、APIの処理結果コードを返します fcFTPDisConnect = Err.LastDllError End Function '---------------------------------------------------------------------- Function fcInternetOpen() As Long 'APIの実行/インターネットサービスをオープン lngWinINet = InternetOpen(vbNullString _ , INTERNET_OPEN_TYPE_PRECONFIG _ , vbNullString _ , vbNullString _ , 0) 'この関数の戻り値には、APIの処理結果コードを返します fcInternetOpen = Err.LastDllError End Function '---------------------------------------------------------------------- Function fcInternetClose() As Long 'APIの実行/インターネットサービスをクローズ Call InternetCloseHandle(lngWinINet) 'この関数の戻り値には、APIの処理結果コードを返します fcInternetClose = Err.LastDllError End Function
自分のHPなどを持ってないので検証する環境がありません。 識者のレスをお待ち下さい。 (MARBIN)
こんにちは。かみちゃん です。
横から失礼します。
最近、仕事でFTPサーバーとの送受信をVBAで作ったところですので、識者ではないですが、 何かのお役に立てればと思い、コメントさせていただきます。
> コピーして動かしただけではエラーしました
MARBINさんご紹介のページの記述だけをコピーして試した場合、エラーになります。 http://www.happy2-island.com/access/gogo03/capter90100.shtml から順番に一通り試してみてください。 そうすることにより、エラーは出なくなります。
> '接続に成功したら、FTPサーバへファイルをアップロードします > If lngRC = 0 Then > ここで接続されていない事がわかりました。 > fcFTPConnect("????.ddo.jp", "user", "pass")のドメイン名、user passは、 > fttpソフトで接続テストをやり何度やってもOKです。
"????.ddo.jp"、"user"、"pass"は、接続テストでOKとなっている実際の値に置き換えていますか? 同じ端末からFFFTPなどのソフトで接続はできるということでいいですか?
以下のようなコードにすると、いかがでしょうか? If lngRC = 0 Then MsgBox "接続しました。アップロードします" If fcFTPPutFile("c:\happy\filename.txt" _ , "/work/data/filename.txt" _ , FTP_TRANSFER_TYPE_ASCII) Then MsgBox "アップロードに成功しました" Else MsgBox "アップロードに失敗しました" End If Else MsgBox "接続に失敗しました" End If
私の手元の環境では、うまく動作することを確認しています。
なお、代替案ですが、BASP21というフリーコンポーネントを利用する例として、以下のような案もありますので、参考にしてみてください。 http://www.officetanaka.net/excel/vba/tips/tips47.htm
(かみちゃん) 2009-02-21 23:46
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.