Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1848to1852
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA beschleunigen

VBA beschleunigen
18.09.2021 17:33:12
oraculix
Hallo
Ich kopiere per Hand aus einer HTML Datei eine menge Daten in meine Tabelle und das Macro übernimmt den Rest.
Ich habe mit dem Macro Recorder einen Code erstellt der mir über 3000Bilder löscht und die Tabelle Formatiert und unnötige Eintrage löscht.
Doch leider dauert es ca. 40sek.
Wäre dankbar wenn sich ein Profi das Macro ansieht und mir einen Tipp gibt wie ich es beschleunigen kann !
'FilmInfo Aktualisieren

Private Sub CommandButton1_Click()
Dim lngLetter As Long
Dim objCell As Range
Dim objShp As Shape
Application.ScreenUpdating = False
With Worksheets("FilmInfo")
For Each objShp In .Shapes
If objShp.Type = msoPicture Then objShp.Delete
Next
'Alles was keine Jahreszahlen hat löschen
For lngLetter = 65 To 90
Set objCell = .Columns(2).Find(What:=Chr$(lngLetter), _
LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then objCell.EntireRow.Delete
Next
Do
Set objCell = .Columns(2).Find(What:="Home", _
LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then
objCell.EntireRow.Delete
Else
Exit Do
End If
Loop
Do
Set objCell = .Columns(2).Find(What:="Alle Filme", _
LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then
objCell.EntireRow.Delete
Else
Exit Do
End If
Loop
Do
Set objCell = .Columns(2).Find(What:="Andere", _
LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then
objCell.EntireRow.Delete
Else
Exit Do
End If
Loop
Do
Set objCell = .Columns(2).Find(What:="0..9", _
LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then
objCell.EntireRow.Delete
Else
Exit Do
End If
Loop
End With
' Formatiern und Doppelpunkte löschen
Range("B2:B30000").Select
ActiveWindow.ScrollRow = 4573
ActiveWindow.ScrollRow = 4519
ActiveWindow.ScrollRow = 3659
ActiveWindow.ScrollRow = 2368
ActiveWindow.ScrollRow = 1265
ActiveWindow.ScrollRow = 486
ActiveWindow.ScrollRow = 2
Selection.Font.Bold = True
Selection.Font.Size = 14
With Selection.Font
.ThemeColor = xlThemeColorAccent4
.TintAndShade = 0.799981688894314
End With
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Selection
.HorizontalAlignment = xlLeft
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Replace What:=":", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
'Entfert Leerzeichen vor Hyperlink beginn
Dim objHyperlink As Hyperlink
For Each objHyperlink In Worksheets("FilmInfo").Columns(2).Hyperlinks
With objHyperlink
.TextToDisplay = LTrim$(.TextToDisplay)
End With
Next
Range("B1").Select
'Sortieren
Call CommandButton2_Click
Application.ScreenUpdating = True
End Sub
'Sortieren

Private Sub CommandButton2_Click()
Columns("B:B").Select
ActiveWorkbook.Worksheets("FilmInfo").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("FilmInfo").Sort.SortFields.Add2 Key:=Range( _
"B2:B55433"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("FilmInfo").Sort
.SetRange Range("B1:B55433")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("B1").Select
End Sub
Danke
Gruß
Oraculix

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA beschleunigen
18.09.2021 17:50:58
Peter
Kann es sein, dass du nicht den HTML-Code einer HTML-Seite sondern einen Bereich auf einer HTML-Seite kopiert und dann mit "Einfügen" ([Strg]+v) auf diese Excel-Seite kopiert hast?
Wenn du aber all die Links und Bilder gar nicht willst, solltest du anstatt "Einfügen" im Excelblatt "Einfügen" (Menü auf) - "An Zielformatierung anpassen (M)"" verwenden! Dann musst du dich mit den Bildern erst gar nicht rumplagen!!
AW: VBA beschleunigen
18.09.2021 18:27:38
oraculix
Danke für Deine Mühe!
Ich habe nie behauptet HTML Code zu kopieren sondern ich kopiere die Bilder und die Links.
Was meinst du mit Zielformatierung anpassen
Ken ich gar nicht.
Brauche eigentlich nur die Hyperlinks aus der HML und den anderen Mist Lösche ich weg.
Danke
Gruß
Oracilix
Anzeige
AW: VBA beschleunigen
18.09.2021 18:58:45
Peter
Einfach mal versuchen? Im Ribbon oben links Einfügen aufklappen - dann das rechte Symbol...
AW: VBA beschleunigen
18.09.2021 18:25:28
Nepumuk
Hallo,
teste mal:

'Info Aktualisieren
Private Sub CommandButton1_Click()
Dim lngLetter As Long
Dim objCell As Range, objRange As Range
Dim objShp As Shape
Dim objHyperlink As Hyperlink
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
Set objRange = Range(Cells(2, 2), Cells(Rows.Count, 2).End(xlUp))
For Each objShp In Shapes
If objShp.Type = msoPicture Then objShp.Delete
Next
'Alles was keine Jahre hat löschen
For lngLetter = 65 To 90
Set objCell = objRange.Find(What:=Chr$(lngLetter), _
LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then objCell.EntireRow.Delete
Next
Do
Set objCell = objRange.Find(What:="Home", _
LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then
objCell.EntireRow.Delete
Else
Exit Do
End If
Loop
Do
Set objCell = objRange.Find(What:="Alle Filme", _
LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then
objCell.EntireRow.Delete
Else
Exit Do
End If
Loop
Do
Set objCell = objRange.Find(What:="Andere", _
LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then
objCell.EntireRow.Delete
Else
Exit Do
End If
Loop
Do
Set objCell = objRange.Find(What:="0..9", _
LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then
objCell.EntireRow.Delete
Else
Exit Do
End If
Loop
' Formatiern und Doppelpunkte löschen
With Range("B2:B30000")
.Font.Bold = True
.Font.Size = 14
.HorizontalAlignment = xlLeft
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
With .Font
.ThemeColor = xlThemeColorAccent4
.TintAndShade = 0.799981688894314
End With
With .Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Call objRange.Replace(What:=":", Replacement:="", LookAt:=xlPart)
'Entfert Leerzeichen vor Hyperlink beginn
For Each objHyperlink In objRange.Hyperlinks
With objHyperlink
.TextToDisplay = Trim$(.TextToDisplay)
End With
Next
End With
CommandButton2.Value = True
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
Set objRange = Nothing
End Sub
'Sortieren
Private Sub CommandButton2_Click()
With Sort
.SortFields.Clear
.SortFields.Add2 Key:=Range("B1"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Columns(2)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("B1").Select
End Sub
Gruß
Nepumuk
Anzeige
Danke! gute 30sek, schneller der Code
18.09.2021 18:38:47
oraculix
Super Danke!
gute 30sek, schneller der Code
Gruß
Oraculix
AW: VBA beschleunigen
18.09.2021 23:50:28
Daniel
Hi
wenn deine Datei neben den zu löschenden Bildern keine weiteren Grafikobjekte enthält, dann kannst du du diese auch so löschen

ActiveSheet.DrawingObjects.Delete
Zeilen löschen geht am besten so (schnell und einfach)
1. denke dir eine Formel aus, die alle zu löschenden Zeilen mit 0 markiert und alle die stehen bleiben müssen mit der Zeilennummer (Zeile())
2. schreibe diese Formel in die erste freie Spalte am Tabellenende
3. schreibe in die erste Zeile dieser Spalte ebenfalls die 0 (Diese Zeile wird auf jeden Fall stehen bleiben, daher sollte das die Überschrift sein
4. wende dann auf die ganze Tabelle die Funktion Daten - Datentools - Duplikate entfernen an.
5. lösche die Hilfsspalte.
so kann man das per Hand machen und auch per Makro ist das der besten Weg. Da du dir den größten Teil der Schritte mit dem Recorder aufzeichnen kannst, solltest auch du es hinbekommen, diese Schritte über ein Makro ausführen zu lassen, ansonsten sollten sich entsprechende Beispielcodes für dieses vorgehen im WWW finden lassen.
Gruß Daniel
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige