ich habe ein funktionierendes Programm, bei welchem jedoch zu oft
select oder activate verwendet wird. Dies ist sehr zeitaufwendig.
Das nachstehende Makro möchte ich gerne so umgestalten, dass die hierin befindlichen
Ereignisse ausgeführt werden, ohne die jeweiligen Tabellen zu aktivieren.
Ist das überhaupt möglich?
Folgende Daten habe ich vorbereitet:
Dim WB As Workbook
Dim wksSc1 As String 'ScantabelleKopierer1
Dim wksSc2 As String 'ScantabelleKopierer2
Dim wksH As String 'Hilfstabelle
Dim lngI As Long, intWert As Integer
Dim EndeB As Integer
Dim EndeF As Integer
Application.ScreenUpdating = False
Set WB = ThisWorkbook 'Worksheets("Hilfstabelle").Range("Z16")
wksH = Worksheets("Hilfstabelle").Range("V2")
'wksSc1 = Worksheets("Hilfstabelle").Range("V6")
'wksSc2 = Worksheets("Hilfstabelle").Range("V7")
wksSc1 = Worksheets(wksH).Range("V6")
wksSc2 = Worksheets(wksH).Range("V7")
Debug.Print wksH
Debug.Print wksSc1
Debug.Print wksSc2
Diese Daten würde ich als zweite Zeile einsetzen.
funktioniert bei mir jedoch nicht.
das bisherige Makro:
Sub Scantabelle_2_mit_1_vergleichen_filtern_kopieren()
Dim lngI As Long, intWert As Integer
Dim EndeB As Integer
Dim EndeF As Integer
Application.ScreenUpdating = False
Worksheets("ScantabelleKopierer2").Activate
With Worksheets("ScantabelleKopierer2")
For lngI = 1 To Cells(Rows.Count, 2).End(xlUp).Row
intWert = Application.WorksheetFunction. _
CountIf(Worksheets("ScantabelleKopierer1").Range("B:B"), Cells(lngI, 2).Value)
If intWert > 0 Then
Cells(lngI, 2).Interior.ColorIndex = 3
End If
Next lngI
'Filtert den nicht farbigen Bereich
.Range(Cells(1, 1), Cells(Cells(65536, 2).End(xlUp).Row, 5)).AutoFilter
ActiveSheet.Range("$A$1:$E$210").AutoFilter Field:=2, Operator:= _
xlFilterNoFill
Dim rBereich As Range
Dim rzelle As Range
With ThisWorkbook.Worksheets("ScantabelleKopierer2") ' den Tabellenblattnamen ggf. anpassen!
Set rBereich = .Range("B1:B" & .Cells(Rows.Count, 2).End(xlUp).Row)
For Each rzelle In rBereich
If rzelle.Interior.ColorIndex = xlNone Then GoTo errorhandler
Next rzelle
End With
' MsgBox " alles rot"
Worksheets("ScantabelleKopierer2").Range("A1:E" & Cells(Rows.Count, 5).End(xlUp).Row). _
AutoFilter
Worksheets("ScantabelleKopierer2").Range("B1:B" & Cells(Rows.Count, 2).End(xlUp).Row). _
Interior.ColorIndex = xlNone
Worksheets("ScantabelleKopierer2").Range("A1").Select
Application.ScreenUpdating = True
Exit Sub
errorhandler:
' MsgBox "Die Zelle " & rZelle.Address(0, 0) & " hat keine Hintergundfarbe.", _
' 64, " Information für " & Application.UserName
Range(Cells(2, 1), Cells(ActiveSheet.UsedRange.Rows.Count, 5)).SpecialCells( _
xlCellTypeVisible).Copy
Sheets("Hilfstabelle").Range("BG2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Worksheets("Hilfstabelle").Activate
Worksheets("Hilfstabelle").Range(Cells(2, 62), Cells(Rows.Count, 63).End(xlUp)) = "0" 'ändert _
Wert in Spalte 62 und 63 auf 0
Worksheets("Hilfstabelle").Range(Cells(2, 59), Cells(Rows.Count, 63).End(xlUp)).Interior. _
ColorIndex = 3
Worksheets("Hilfstabelle").Range(Cells(2, 59), Cells(Rows.Count, 63).End(xlUp)).Copy
Worksheets("ScantabelleKopierer1").Activate
Worksheets("ScantabelleKopierer1").Range("A1").End(xlDown).Offset(1, 0). _
PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Worksheets("ScantabelleKopierer2").Activate
Worksheets("ScantabelleKopierer2").Range("A1:E" & Cells(Rows.Count, 5).End(xlUp).Row). _
AutoFilter
Worksheets("ScantabelleKopierer2").Range("B1:B" & Cells(Rows.Count, 2).End(xlUp).Row).Interior. _
ColorIndex = xlNone
'ScantabelleKopierer1_Text_in_Zahlen_umwandeln_Null_entfernen
Worksheets("ScantabelleKopierer1").Activate
Columns("B:B").Select
Application.CutCopyMode = False
Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
Worksheets("ScantabelleKopierer1").Range("A1").Select
Application.ScreenUpdating = True
Set rBereich = Nothing
End With
End Sub
Besten Dank für eure Hilfe.
Gruss
Peter