4

HTML から Excel への変換について、週の初めに質問を投稿しましたが、うまくいきました。私が与えられたサンプル マクロ コードは、コードを HTML 形式から Excel セルに変換するという素晴らしい仕事をしました (Siddharth Rout に感謝します!)。私が今直面している問題は、IE オブジェクトが Excel で段落、区切り、およびリスト項目を処理する方法に関係しています。p、br、および li は、元のセルの下のセルにテキストを移動し、それらのセルにあったデータを上書きします。HTML のブロックを 1 つのセルだけに表示する方法はありますか (新しい行タグごとに同じセルに新しい行が作成されることを意味します)。

VBA コード

Sub Sample()
    Dim Ie As Object

    Set Ie = CreateObject("InternetExplorer.Application")

    With Ie
        .Visible = False

        .Navigate "about:blank"

        .document.body.InnerHTML = Sheets("Sheet1").Range("A1").Value

        .document.body.createtextrange.execCommand "Copy"
        ActiveSheet.Paste Destination:=Sheets("Sheet1").Range("A1")

        .Quit
    End With
End Sub

サンプル HTML

<p>  Here are some possible uses:</p>  <ul>  <li><font color = "red"> syntax highlighting code snippets</font></li>  <li style ="font-weight:bold; color: orange">validating credit card numbers, phone numbers, and zip codes</li>  <li style = "font-style: italic">styling email addresses and tags</li>  </ul>  

複数の行に表示されているサンプル出力(1 つのセルに複数の行を表示したい - Shift+Enter の動作と同様)

Here are some possible uses:



syntax highlighting code snippets

**validating credit card numbers, phone numbers, and zip codes**

*styling email addresses and tags*
4

1 に答える 1

1

それができるかどうかはわかりません (私が間違っている可能性があります)。ただし、データが上書きされるだけの問題である場合は、別の方法があります:)

ロジック:同じシートに貼り付ける代わりに、一時シートに貼り付けてから、それらの行をコピーしてシート 1 に挿入し、データが上書きされないようにします。スナップショットを参照してください。

スナップショット:

ここに画像の説明を入力

コード:

Sub Sample()
    Dim ws As Worksheet, wstemp As Worksheet
    Dim Ie As Object
    Dim LastRow As Long

    Set Ie = CreateObject("InternetExplorer.Application")

    Set ws = Sheets("Sheet1")

    '~~> Create Temp Sheet
    Set wstemp = Sheets.Add

    With Ie
        .Visible = True

        .Navigate "about:blank"

        '~~> I am assuming that the data is in Cell A1
        .document.body.InnerHTML = ws.Range("A1").Value

        '~~> Deleting the row which had the html string. I am assuming that it was in Row 1
        ws.Rows(1).Delete

        .document.body.createtextrange.execCommand "Copy"
        wstemp.Paste Destination:=wstemp.Range("A1")

        '~~> Find the last row in the temp sheet
        LastRow = wstemp.Cells.Find(What:="*", After:=wstemp.Range("A1"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

        '~~> Copy that data
        wstemp.Rows("1:" & LastRow).Copy

        '~~> insert it in Sheet1
        ws.Rows(1).Insert Shift:=xlDown

        .Quit
    End With

    '~~> Delete Temp sheet
    Application.DisplayAlerts = False
    wstemp.Delete
    Application.DisplayAlerts = True

End Sub

HTH

于 2012-04-05T22:17:18.530 に答える