0

VBA では、財務データを取得するツールを作成するために WebQuery を活用しようとしています。
これと同様のコードで WebQuery を作成します。

    url = "URL;http://my.url.com/"
    With Worksheets("Sheet1").QueryTables.Add(Connection:=url, Destination:=Worksheets("Sheet1").Range("A1"))
    .PostText = "Param1=Foo&Param2=Bar"
    .Name = "My Query"
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlOverwriteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 1
    .WebSelectionType = xlEntirePage
    .WebFormatting = xlWebFormattingNone
    .WebPreFormattedTextToColumns = True
    .WebConsecutiveDelimitersAsOne = True
    .WebSingleBlockTextImport = False
    .WebDisableDateRecognition = False
    .WebDisableRedirections = False
    .Refresh BackgroundQuery:=False
End With

私が直面している問題は、my.url.com基本認証のユーザーID とパスワードを必要とすることです。
このコードを単純に実行すると、ランタイム エラー 1004 が発生します。認証資格情報の入力を求めるプロンプトは表示されません。

しかし、Excel の [データ] リボンに移動して [Web から] を選択し、ミニ Web ブラウザーでhttp://my.url.com/にアクセスすると、ユーザー ID とパスワードの入力を求められます。
このウィンドウを閉じてから、何も変更せずに VBA コードを再実行すると、クエリが機能します。しかし、Excel を閉じて再実行すると、この非常に醜い手動認証手順を実行しない限り、再び失敗します。これらの資格情報を永続的に保存するように Internet Explorer に指示した場合でも.

この余分な手順を実行する必要がないように、基本認証を使用し てWebQueryをプログラムで認証するように VBA を取得するにはどうすればよいですか?

(編集: WebQuery がどのように開始されたかに関係なく、これ、またはこのプロンプトを強制的に発生させる設定が Excel 内にありますか?)

Windows 7 で Excel 2010 (32 ビット) を使用していますが、ターゲット ユーザーはさまざまな Excel バージョン (すべて Windows) を使用している可能性があります。

4

3 に答える 3

0

他の回答から判断すると、私の正しい行動方針は、WebQuery を認証させようとすることさえせず、途中でユーザー ID とパスワードを POST 引数として取り、「本物」と通信するサーバー側スクリプトを使用することだと思います。基本認証を介したバックエンド。

私はすでにそれを書いてテストしましたが、これは私が対処しようとしている実際の問題を解決しているようです。

于 2015-12-15T22:15:21.863 に答える
0

ソースコードに移動して、ボタン、ユーザー名テキストボックス、パスワードテキストボックスのIDを見つけてから、次のようにする必要があります。

 If objExist("LoginButton id", IE) Then
                    .Document.getElementById("username textbox id").Value = "username"
                    .Document.getElementById("password textbox id").Value = "password"
                    .Document.getElementById("LoginButton id").Click 
 End If
于 2015-12-15T20:48:21.760 に答える