Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1204to1208
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

kleine Makro-Anpassung

kleine Makro-Anpassung
David
Hallo,
beim Klick auf eine Schaltfläche wird das untenstehende Makro ausgeführt. Dabei wird die Tabelle "all_data_neu" bearbeitet. Jetzt soll einfach in das Makro eine weitere Tabelle "all_data_alt" hinzugefügt werden, sodass das gleiche Makro das auf die Tabelle "all_data_neu" ausgeführt wird auch in der Tabelle "all_data_alt" durchgeführt wird. Wahrscheinl. muss irgendwo nur ein kleiner Befehl eingebaut werden, aber ich bekomme es nicht heraus. Ich nehme in dem Teil, den ich im Code fett geschrieben habe, muss noch etwas hinzugefügt werden?!
Private Sub CommandButton1_Click()
Dim rng As Range, rngLoeschen As Range, StatusCalc As Long
Dim objWs As Worksheet, lngJ As Long, objWsAll As Worksheet
Dim arrWerteMaster() As String, lngIndex As Long, Spalte As Long, bLoeschen As Boolean
If Me.ComboBox1.ListIndex > -1 Then
Set rng = Sheets("Master").Range("Liste").Find(Me.ComboBox1.Text, lookat:=xlWhole)
If Not rng Is Nothing Then
If rng.Offset(0, 1) = Me.TextBox1.Text Then
intC = 0
If rng.Offset(0, 2)  "" Then
'Alle Blätter außer Übersicht ausblenden
For Each objWs In Me.Parent.Worksheets
If objWs.Name  "Übersicht" Then objWs.Visible = xlSheetVeryHidden
Next
'Blätter mit Zugriff für Name einblenden
For lngJ = 2 To 12
With rng.Offset(0, lngJ)
If .Text  "" Then
With Sheets(.Text)
.Visible = xlSheetVisible
.Activate
End With
End If
End With
Next
Set objWsAll = Worksheets("all_data_neu")
'Vergleichswerte aus Blatt Master einlesen
ReDim arrWerteMaster(13 To 16)
For lngIndex = 13 To 16
arrWerteMaster(lngIndex) = rng.Offset(0, lngIndex).Text
Next
With objWsAll
With Application
StatusCalc = .Calculation
If StatusCalc  xlCalculationManual Then .Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
.StatusBar = "Tabelle ""all_data_neu"" wird aufbereitet"
End With
'Spaltenwerte mit Werten aus Master vergleichen
'Wenn ein Wert übereinstimmt dann wird die Zeile nicht gelöscht
For lngJ = .Cells.SpecialCells(xlCellTypeLastCell).Row To 2 Step -1
bLoeschen = True
For lngIndex = LBound(arrWerteMaster) To UBound(arrWerteMaster)
If arrWerteMaster(lngIndex)  "" Then
For Spalte = 1 To 40
Select Case Spalte
Case 29, 30, 32, 33, 34 'Spalten AC,AD, AF, AG und AH
If .Cells(lngJ, Spalte).Text = arrWerteMaster(lngIndex) Then
bLoeschen = False
Exit For
End If
End Select
Next
If bLoeschen = False Then Exit For
End If
Next
If bLoeschen = True Then
If rngLoeschen Is Nothing Then
Set rngLoeschen = .Cells(lngJ, 1)
Else
Set rngLoeschen = Application.Union(rngLoeschen, .Cells(lngJ, 1))
End If
End If
Next
If Not rngLoeschen Is Nothing Then
rngLoeschen.EntireRow.Delete
End If
With Application
If StatusCalc  .Calculation Then .Calculation = StatusCalc
.ScreenUpdating = False
.EnableEvents = True
.StatusBar = False
End With
End With
Else
For Each objWs In Me.Parent.Worksheets
objWs.Visible = xlSheetVisible
Next
End If
Else
intC = intC + 1
If intC 

Danke!!!
Grüße,
David

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: kleine Makro-Anpassung
10.03.2011 11:37:07
Timo
Hallo David,
welche Zeile Du im Code fett markiert hast, sieht man leider nicht mehr, allerdings scheint mir die Zeile
Set objWsAll = Worksheets("all_data_neu")
der Angelpunkt zu sein. Einen Versuch ist es wert.
Füge folgendes bitte statt der oben genannten Zeile ein:
SCHLEIFE:
if objWsAll=nothing then
Set objWsAll = Worksheets("all_data_neu")
else
Set objWsAll = Worksheets("all_data_alt")
endif
Dann entweder unter "Me.Textbox1=""" (ziemlich am Ende des Codes) oder direkt vor "End Sub":
If objWsAll =Worksheets("all_data_neu") then goto SCHLEIFE
Teste das besser mit einer Kopie der Mappe, denn ich habe es jetzt nicht testen können.
Gruß
Timo
Anzeige
AW: kleine Makro-Anpassung
10.03.2011 11:58:02
David
Hallo Timo,
erstmal vielen Dank für Deine Antwort.
Bei mir kommt die Fehlermeldung, dass das "Nothing" im ersten Teil "Eine unzulässige Verwendung ist". Woran liegt das?
Grüße,
David
AW: kleine Makro-Anpassung
10.03.2011 12:48:29
Timo
Hi David,
dann versuch mal das nothing durch "" zu ersetzen.
Sollte das ebenfalls fehlschlagen, gibt es noch Ausweichmöglichkeiten:
Dim blnWs as boolean
blnWs=false
Schleife:
if blnWs = false then
Set objWsAll = Worksheets("all_data_neu")
else
Set objWsAll = Worksheets("all_data_alt")
endif
Dann entweder unter "Me.Textbox1=""" (ziemlich am Ende des Codes) oder direkt vor "End Sub":
If blnWs=false then
blnWs =true
goto SCHLEIFE
endif
Die Anweisung Dim blnWs as boolean deklariert eine Wahrheitsvariable, die also nur den Wert WAHR oder FALSCH annehmen kann. In der if Zeile wird abgefragt, ob die Variable noch auf Falsch steht, wenn ja, dann wird der Variable objWsAll das Tabellenblatt "all_data_neu" zugewiesen. In der letzten If Abfrage wird dann abgefragt, ob blnWs den Wert FALSCH hat, wird dann auf WAHR gesetzt und zur Sprungmarke SCHLEIFE gesprungen. Dann durchläuft das Makro wieder die Zeilen, die Abfrage zum Schluss ergibt aber dass blnWs nun WAHR ist, somit wird die schleife kein drittes mal durchlaufen, sondern mit dem nächsten Befehl im Makro weitergemacht.
Ich hoffe das ist einigermaßen verständlich ausgedrückt.
Gruß
Timo
Anzeige
AW: kleine Makro-Anpassung
11.03.2011 09:26:54
David
Hi,
klappt auch nicht ganz. Teilweise werden alle Werte aus der Tabelle "all_data_alt" gelöscht. Kann man evtl. das komplette Makro einfach kopieren und nochmal einsetzen? Bzw. den ersten Vorschlag den Du gemacht hast, anpassen?
Danke.
Grüße,
David
AW: kleine Makro-Anpassung
11.03.2011 16:41:15
Jürgen
Hallo David,
versuche es mal hiermit:
Private Sub CommandButton1_Click()
Dim rng As Range, rngLoeschen As Range, StatusCalc As Long
Dim objWs As Worksheet, lngJ As Long, objWsAll As Worksheet
Dim arrWerteMaster() As String, lngIndex As Long, Spalte As Long, bLoeschen As Boolean
If Me.ComboBox1.ListIndex > -1 Then
Set rng = Sheets("Master").Range("Liste").Find(Me.ComboBox1.Text, lookat:=xlWhole)
If Not rng Is Nothing Then
If rng.Offset(0, 1) = Me.TextBox1.Text Then
intC = 0
If rng.Offset(0, 2)  "" Then
'Alle Blätter außer Übersicht ausblenden
For Each objWs In Me.Parent.Worksheets
If objWs.Name  "Übersicht" Then objWs.Visible = xlSheetVeryHidden
Next
'Blätter mit Zugriff für Name einblenden
For lngJ = 2 To 12
With rng.Offset(0, lngJ)
If .Text  "" Then
With Sheets(.Text)
.Visible = xlSheetVisible
.Activate
End With
End If
End With
Next
'Set objWsAll = Worksheets("all_data_neu")
For Each objWsAll In Worksheets(Array("all_data_neu", "all_data_alt"))
'Vergleichswerte aus Blatt Master einlesen
ReDim arrWerteMaster(13 To 16)
For lngIndex = 13 To 16
arrWerteMaster(lngIndex) = rng.Offset(0, lngIndex).Text
Next
With objWsAll
With Application
StatusCalc = .Calculation
If StatusCalc  xlCalculationManual Then .Calculation =  _
xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
.StatusBar = "Tabelle ""all_data_neu"" wird aufbereitet"
End With
'Spaltenwerte mit Werten aus Master vergleichen
'Wenn ein Wert übereinstimmt dann wird die Zeile nicht gelöscht
For lngJ = .Cells.SpecialCells(xlCellTypeLastCell).Row To 2 Step -1
bLoeschen = True
For lngIndex = LBound(arrWerteMaster) To UBound(arrWerteMaster)
If arrWerteMaster(lngIndex)  "" Then
For Spalte = 1 To 40
Select Case Spalte
Case 29, 30, 32, 33, 34   'Spalten AC,AD, AF, AG und AH
If .Cells(lngJ, Spalte).Text = arrWerteMaster(lngIndex)  _
Then
bLoeschen = False
Exit For
End If
End Select
Next
If bLoeschen = False Then Exit For
End If
Next
If bLoeschen = True Then
If rngLoeschen Is Nothing Then
Set rngLoeschen = .Cells(lngJ, 1)
Else
Set rngLoeschen = Application.Union(rngLoeschen, .Cells(lngJ, 1))
End If
End If
Next
If Not rngLoeschen Is Nothing Then
rngLoeschen.EntireRow.Delete
End If
With Application
If StatusCalc  .Calculation Then .Calculation = StatusCalc
.ScreenUpdating = False
.EnableEvents = True
.StatusBar = False
End With
End With
Next
Else
For Each objWs In Me.Parent.Worksheets
objWs.Visible = xlSheetVisible
Next
End If
Else
intC = intC + 1
If intC 

Gruß, Jürgen
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige