2016-08-01 1 views
2

dies mein VBA-Code ist:VB-Code HTML-Code zu entfernen, hält Excel-Absturz für ~ 40k-Datensatz

Sub RemoveTags() 
Dim r As Range 
Selection.NumberFormat = "@" 'set cells to text numberformat 
With CreateObject("vbscript.regexp") 
    .Pattern = "\<.*?\>" 
    .Global = True 
For Each r In Selection 
    r.Value = .Replace(r.Value, "") 
    Next r 
End With 
End Sub 

es die ganze Auszeichnungssprache aus meinen Zellen aber stürzt nicht entfernt, wenn ich es für ~ 40k Aufzeichnungen führen. Ist mit meinem Code etwas nicht in Ordnung oder sollte ich die Excel-Einstellungen ändern?

+6

[Verwenden regex nicht HTML zu analysieren (oder sie zu verarbeiten)] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self -enthaltene Tags/1732454 # 1732454). Es ist wahrscheinlich besser, den HTML-Code in ein 'HTMLFile'-Objekt zu laden und beispielsweise den' .innerText' des Dokumentobjekts zurückzugeben. –

+0

versuchen Sie 'Selection.Replace" <*> "," "statt – Slai

Antwort

1

Meine Vermutung ist, dass Excel beim Versuch, den Text zurück in die Zelle zu schreiben, krächzt. Hier ist ein paar Dinge, die Sie ausprobieren können:

  • Verwenden .Value2 statt .Value mit dem Rohwert zu arbeiten.
  • Fügen Sie ein einfaches Zitat vor dem Text hinzu. Es wird nicht angezeigt, aber es wird das Textformat sicherstellen
  • Verwenden Sie ein nicht von Muster gefolgt, anstatt ein nicht gierig, um sicher zu sein, Zeilenumbrüche zu behandeln.
Sub RemoveTags() 
    Dim values(), r As Long, c As Long, re As Object 

    ' load the values in an array 
    values = Selection.Value2 

    ' create the regex 
    Set re = CreateObject("vbscript.regexp") 
    re.pattern = "<[^>]*>" 
    re.Global = True 

    ' remove the tags for each value 
    For r = 1 To UBound(values, 1) 
     For c = 1 To UBound(values, 2) 
      values(r, c) = "'" & re.replace(values(r, c), vbNullString) 
     Next 
    Next 

    ' write the values back to the sheet 
    Selection.Value2 = values 
End Sub 
Verwandte Themen