[[20090219162229]] 『インターネット経由でEXCELファイルのダウンローメx(どらみ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『インターネット経由でEXCELファイルのダウンロード』(どらみ)
 EXCELファイルの自動バージョンアップ的な意味でマクロで
 インターネット経由でEXCELファイルをダウンロードしたいのですが
 可能でしょうか?
 http://???.ddo.jp/db/test.xlsと言った感じで、ユーザー、パスワードは
 聞いてこずフリーです。
 出来れば、インターネットエクスプローラーも起動せず、無表示のままで、
 ファイルがダウンロードされるだけ。


 参考になると思います。

 『Colo's Excel Junk Room -vba tips』
http://puremis.net/excel/code/028.shtml
 (MARBIN)

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


BASP21にて実現出来ました。(どらみ)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.