求助:通过类名获取换行符文本及提取高亮行的VBA代码
Hey Rajesh, let's tackle this problem step by step. I'll break down how to extract those highlighted rows and also show you how to grab text with line breaks using class names in VBA.
一、提取Excel高亮行的VBA代码
Assuming you're working with highlighted (filled color) rows in Excel, this code will scan your target sheet, identify rows matching the highlight color, and copy them to a new sheet for you:
Sub ExtractHighlightedRows() Dim sourceSheet As Worksheet Dim targetSheet As Worksheet Dim lastRow As Long Dim i As Long Dim highlightColor As Long ' Set your source sheet (change "Sheet1" to your actual sheet name) Set sourceSheet = ThisWorkbook.Worksheets("Sheet1") ' Create or reuse a sheet to store results On Error Resume Next Set targetSheet = ThisWorkbook.Worksheets("HighlightedRows") On Error GoTo 0 If targetSheet Is Nothing Then Set targetSheet = ThisWorkbook.Worksheets.Add(After:=sourceSheet) targetSheet.Name = "HighlightedRows" End If ' Get the highlight color (uses the first highlighted cell's color; you can also hardcode like RGB(255,255,0) for yellow) highlightColor = sourceSheet.Cells.Find(What:="*", SearchFormat:=True, SearchOrder:=xlByRows, SearchDirection:=xlNext).Interior.Color ' Find the last row with data in column A lastRow = sourceSheet.Cells(sourceSheet.Rows.Count, "A").End(xlUp).Row ' Loop through each row to check for highlight For i = 1 To lastRow ' Checks if the entire row is highlighted; modify to check a specific column if needed (e.g., Cells(i, "B")) If sourceSheet.Rows(i).Interior.Color = highlightColor Then sourceSheet.Rows(i).Copy targetSheet.Cells(targetSheet.Rows.Count, "A").End(xlUp).Offset(1, 0) End If Next i MsgBox "Highlighted rows extracted successfully!", vbInformation End Sub
Quick Notes:
- If only specific cells in a row are highlighted, adjust the check to target a single column (e.g.,
sourceSheet.Cells(i, "C").Interior.Color) - You can replace the auto-detected
highlightColorwith a fixed RGB value if you know the exact highlight shade
二、通过类名获取带换行符的文本内容
If you're scraping text with line breaks from a webpage using class names, this VBA code uses Internet Explorer to fetch and format the text properly:
Sub GetTextWithLineBreaksByClassName() Dim ie As Object Dim targetElements As Object Dim targetElement As Object Dim rawText As String Dim formattedText As String ' Initialize IE object Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ' Set to False to run in background ' Navigate to your target webpage (replace with your URL) ie.Navigate "https://example.com" ' Wait for page to fully load Do While ie.Busy Or ie.ReadyState <> 4 DoEvents Loop ' Get elements by class name (replace "content-block" with your target class) Set targetElements = ie.Document.getElementsByClassName("content-block") If targetElements.Length > 0 Then ' Grab the first matching element (loop through targetElements if you need all) Set targetElement = targetElements(0) ' Replace HTML line breaks with VBA line breaks, then strip extra HTML tags rawText = targetElement.innerHTML formattedText = Replace(rawText, "<br>", vbCrLf) formattedText = RemoveHTMLTags(formattedText) ' Output to cell A1 of Sheet1, or use a MsgBox to preview ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = formattedText MsgBox "Extracted text:" & vbCrLf & formattedText, vbInformation Else MsgBox "No elements found with the specified class name!", vbExclamation End If ' Clean up IE ie.Quit Set ie = Nothing End Sub ' Helper function to strip HTML tags for pure text Function RemoveHTMLTags(text As String) As String Dim regex As Object Set regex = CreateObject("VBScript.RegExp") regex.Global = True regex.Pattern = "<[^>]+>" RemoveHTMLTags = regex.Replace(text, "") End Function
Key Details:
getElementsByClassNamereturns a collection of elements—loop throughtargetElementsif you need to extract text from all matching elements- The
Replacefunction converts HTML<br>tags to VBA'svbCrLfto preserve line breaks - The
RemoveHTMLTagshelper clears out any remaining HTML markup to give you clean plain text
If your use case isn't web scraping (e.g., Word documents or other applications), feel free to share more details and I can adjust the code accordingly!
内容的提问来源于stack exchange,提问作者rajesh raj

