1

私はExcel VBAの初心者です。問題は次のとおりです。識別子を指定して、Web ページから一部のテキストを削除したいと考えています。理想的には、ページのテキストを単一のセルに保存したいと考えています。QueryTable を作成する関数を作成しましたが、取得したテキストが複数の行にコピーされることがあります。

すべてのテキストを単一のセルに配置する方法はありますか?

私の関数のコードは次のとおりです。

Function Articolo(myRange As Range, code As String)
  Dim myURL As String
  Dim myName As String

  myURL = "URL;http://techstore.runner.it/feed/dettagli_csv.php?codcli=111367&pwd=03142110786&sku=" & code
  myName = "dettagli_csv.php?codcli=111367&pwd=03142110786&sku=" & code

  With ActiveSheet.QueryTables.Add(Connection:= _
    myURL _
    , Destination:=myRange)
    .Name = myName
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = False
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlOverwriteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = False
    .RefreshPeriod = 0
    .WebSelectionType = xlEntirePage
    .WebFormatting = xlWebFormattingNone
    .WebPreFormattedTextToColumns = False
    .WebConsecutiveDelimitersAsOne = False
    .WebSingleBlockTextImport = True
    .WebDisableDateRecognition = False
    .WebDisableRedirections = False
    .WebConsecutiveDelimitersAsOne = True
    .Refresh BackgroundQuery:=False
  End With
End Function

テストとして、コードとして 8E4374 を使用できます

ご協力いただきありがとうございます!

4

2 に答える 2

0

その URL からのデータには、キャリッジ リターンとライン フィードが埋め込まれているようです。そのため、Excel で別のセルに分割しています。

1 つの解決策は、VBA コードを実行してクエリを実行し、キャリッジ リターン/ライン フィード文字を取り除き、結果をセルに入れることです。問題は、更新を処理するのではなく、コードを実行して更新する必要があることです。

より簡単な答えは、次のような数式で別のセルを追加することです。

=A1&" "&A2&" "&A3&" "&A4
于 2012-09-29T06:10:54.113 に答える
0

クエリテーブルは、多くの場合、遅くて扱いにくいものです。代わりに httprequest オブジェクトの 1 つを使用すると、はるかに高速になり、応答の解析方法をより詳細に制御できます。以下は、セッションを管理したり、ページがキャッシュされているかどうかを確認したりしない基本的な例です。

Option Explicit

Sub test()
Dim rng As Range
Dim code As String

    Set rng = Sheet1.Range("A1")
    code = "8E4374"
    Articolo rng, code

End Sub

Sub Articolo(myRange As Range, code As String)
  Dim myURL As String
  Dim myName As String

  myURL = "http://techstore.runner.it/feed/dettagli_csv.php?codcli=111367&pwd=03142110786&sku=" & code
  myRange.Value = ExecuteWebRequest(myURL)

End Sub

Function ExecuteWebRequest(ByVal url As String) As String

    Dim oXHTTP As Object

    Set oXHTTP = CreateObject("MSXML2.XMLHTTP")
    oXHTTP.Open "GET", url, False
    oXHTTP.send
    ExecuteWebRequest = oXHTTP.responseText
    Set oXHTTP = Nothing

End Function

編集: 上記のコードは、UDF ではなく Sub として実行するように設計されています。UDF は他のセルに影響を与えることができないため、唯一のオプションは、呼び出し元のセルに文字列を返すか、イベントとして、またはコントロール (ボタンなど) から実行するようにコードをセットアップすることです。

以下は UDF の例です。これは Excel から呼び出され=Articolo(C1)、C1 は必要なコードを含む任意のセル (例: 8E4374)を使用して呼び出されます。

Option Explicit

Function Articolo(ByVal code As String) As String
Dim myURL As String

  myURL = "http://techstore.runner.it/feed/dettagli_csv.php?codcli=111367&pwd=03142110786&sku=" & code
  Articolo = ExecuteWebRequest(myURL)

End Function

Function ExecuteWebRequest(ByVal url As String) As String
Dim oXHTTP As Object

    Set oXHTTP = CreateObject("MSXML2.XMLHTTP")
    oXHTTP.Open "GET", url, False
    oXHTTP.send
    ExecuteWebRequest = oXHTTP.responseText
    Set oXHTTP = Nothing

End Function

また、これは http リクエストを作成しているため、完全な再計算を強制するたびに、UDF も再計算されます。これは、数百または数千のリクエストを作成する可能性があるため、おそらく必要なものではありません。次のような定義されたループから一度だけ実行することをお勧めします

For Each code in Listofcodes : <Download Page> : Next code
于 2012-09-29T09:50:57.340 に答える