Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Mehrere Makros zusammenfügen zu einem

618 views
Skip to first unread message

hakan.kay...@googlemail.com

unread,
May 31, 2018, 5:36:41 AM5/31/18
to
Hallo geschätztes Forum

Ich habe hier drei Makros, die jedes einem Button zu geordnet sind und durch Klick auf den jeweiligen Button ausgeführt werden können.

Ich möchte gerne erreichen, das alle drei Makros durch einen Klick auf "NUR" einen Button hintereinander ausgeführt werden. Sozusagen alle Makros in einem Button :-)

Das 1. Makro fügt Rohdaten aus einer externen Quelle ein.
Das 2. Makro löscht bedingt.
Das 3. Makro löscht ebenfalls bedingt.

Für Hilfe zur Lösung wäre ich sehr dankbar.
Nutze WIN 10 Und Office 2016

Mit freundlichen Grüßen
Hakan

Hier die betreffenden Makros:

Makro 1:

Sub Aus_FARMS_Einfügen()
'
' Aus_FARMS_Einfügen Makro
' Fügt ungefilterete Rohdaten aus FARMS ein und eliminiert die Überschrift
'
' Tastenkombination: Strg+o
'
Range("B3").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Rows("3:3").Delete Shift:=xlUp
End Sub



Makro 2:

Sub Zeilen_weg()
Dim TB, RR As Double, i As Double, ZE As Integer, Sp1 As Integer, Sp2 As Integer

Application.ScreenUpdating = False

ZE = 3 'wegen Überschrift
Sp1 = 11
Sp2 = 12

With ActiveWorkbook.Sheets("Vorbereitung")

RR = .Cells.SpecialCells(xlCellTypeLastCell).Row 'Letzte Zeile des gesamten Blattes

For i = RR To ZE Step -1
If .Cells(i, Sp1) <> "" Or .Cells(i, Sp2) <> "" Then
.Rows(i).Delete xlUp
End If
Next
End With
End Sub



Makro 3:

Sub ZeilenLöschen()
Dim varDaten As Variant
Dim LRow As Long
Dim i As Integer

'Hier die Werte eingeben, bei denen gelöscht werden soll
varDaten = Array("LSH", "H03", "Y04", "Y08")

With ActiveWorkbook.Sheets("Vorbereitung")
LRow = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 7 To 8
'Hier Bereich anpassen
.Range("A1:Z" & LRow).AutoFilter Field:=i, _
Criteria1:=varDaten, Operator:=xlFilterValues
.Range("A2:A" & LRow).SpecialCells(xlCellTypeVisible) _
.EntireRow.Delete
.ShowAllData
Next
.AutoFilterMode = False
End With
End Sub

Claus Busch

unread,
May 31, 2018, 5:54:33 AM5/31/18
to
Hallo Hakan,

Am Thu, 31 May 2018 02:36:40 -0700 (PDT) schrieb
hakan.kay...@googlemail.com:

> Ich habe hier drei Makros, die jedes einem Button zu geordnet sind und durch Klick auf den jeweiligen Button ausgeführt werden können.
>
> Ich möchte gerne erreichen, das alle drei Makros durch einen Klick auf "NUR" einen Button hintereinander ausgeführt werden. Sozusagen alle Makros in einem Button :-)
>
> Das 1. Makro fügt Rohdaten aus einer externen Quelle ein.
> Das 2. Makro löscht bedingt.
> Das 3. Makro löscht ebenfalls bedingt.

ich würde die Makros nicht zusammenführen. Die einzelnen Makros sind
übersichtlicher und du findest leichter die Stellen, an denen du
eventuell etwas ändern musst.
Du kannst Makros aus einem anderen Makro heraus aufrufen.
Weise also deinem Button das erste Makro zu und schreibe bei diesem
Makro unterhalb des jetztigen Codes den Namen des 2. Makros (Zeilen_weg)
und dann unterhalb des Codes des 2. Makros den Namen des 3. Makros
(ZeilenLöschen).


Mit freundlichen Grüßen
Claus
--
Windows10
Office 2016

hakan.kay...@googlemail.com

unread,
May 31, 2018, 6:13:31 AM5/31/18
to
Hallo Claus

Du meinst das in etwas so...?

Makro 1:

Sub Aus_FARMS_Einfügen()
'
' Aus_FARMS_Einfügen Makro
' Fügt ungefilterete Rohdaten aus FARMS ein und eliminiert die Überschrift
'
' Tastenkombination: Strg+o
'
Range("B3").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Rows("3:3").Delete Shift:=xlUp
End Sub
Zeilen_weg()


Claus Busch

unread,
May 31, 2018, 6:22:38 AM5/31/18
to
Hallo Hakan,

Am Thu, 31 May 2018 03:13:29 -0700 (PDT) schrieb
hakan.kay...@googlemail.com:

> Sub Aus_FARMS_Einfügen()
> '
> ' Aus_FARMS_Einfügen Makro
> ' Fügt ungefilterete Rohdaten aus FARMS ein und eliminiert die Überschrift
> '
> ' Tastenkombination: Strg+o
> '
> Range("B3").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
> SkipBlanks:=False, Transpose:=False
> Application.CutCopyMode = False
> Rows("3:3").Delete Shift:=xlUp
> End Sub
> Zeilen_weg()

nein, am Ende des Codes, aber vor End Sub:

Sub Aus_FARMS_Einfügen()
'
' Aus_FARMS_Einfügen Makro
' Fügt ungefilterete Rohdaten aus FARMS ein und eliminiert die
'Überschrift
'
' Tastenkombination: Strg+o
'
Range("B3").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Rows("3:3").Delete Shift:=xlUp
Zeilen_weg
End Sub

Claus Busch

unread,
May 31, 2018, 6:32:18 AM5/31/18
to
Hallo Hakan,

Am Thu, 31 May 2018 03:13:29 -0700 (PDT) schrieb
hakan.kay...@googlemail.com:

> Du meinst das in etwas so...?

du kannst auch ein neues Makro schreiben und dies dem Button zuweisen.
Mit diesem Makro werden die Makros nacheinander aufgerufen:

Sub Alle()
Aus_FARMS_Einfügen
Zeilen_weg
ZeilenLöschen
End Sub

hakan.kay...@googlemail.com

unread,
May 31, 2018, 6:51:34 AM5/31/18
to
Hallo Claus,

vielen Dank für diesen Vorschlag. das klappt so auch, allerdings verhaspelt er sich beim 3. Makro. Das heißt während er das 1. Makro sowie das zweite perfekt hintereinander ausführt, wirft er mir beim dritten einen Fehler aus.

Er löscht dann auch die erste Zeile (Spaltenüberschriften).
Ich vermute da interferiert etwas in den Makros 2 und 3.

So sehen die Makros nach Umsetzung Deiner Anweisung aus:


Sub Aus_FARMS_Einfügen()
'
' Aus_FARMS_Einfügen Makro
' Fügt ungefilterete Rohdaten aus FARMS ein und eliminiert die Überschrift
'
' Tastenkombination: Strg+o
'
Range("B3").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Rows("3:3").Delete Shift:=xlUp
Zeilen_weg
End Sub


Sub Zeilen_weg()
Dim TB, RR As Double, i As Double, ZE As Integer, Sp1 As Integer, Sp2 As Integer

Application.ScreenUpdating = False

ZE = 3 'wegen Überschrift
Sp1 = 11
Sp2 = 12

With ActiveWorkbook.Sheets("Vorbereitung")

RR = .Cells.SpecialCells(xlCellTypeLastCell).Row 'Letzte Zeile des gesamten Blattes

For i = RR To ZE Step -1
If .Cells(i, Sp1) <> "" Or .Cells(i, Sp2) <> "" Then
.Rows(i).Delete xlUp
End If
Next
End With
ZeilenLöschen
End Sub


Sub ZeilenLöschen()
Dim varDaten As Variant
Dim LRow As Long
Dim i As Integer

'Hier die Werte eingeben, bei denen gelöscht werden soll
varDaten = Array("LSH", "H03", "Y04", "Y08")

With ActiveWorkbook.Sheets("Vorbereitung")
LRow = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 7 To 8
'Hier Bereich anpassen
.Range("A1:Z" & LRow).AutoFilter Field:=i, _
Criteria1:=varDaten, Operator:=xlFilterValues
.Range("A2:A" & LRow).SpecialCells(xlCellTypeVisible) _
.EntireRow.Delete
.ShowAllData
Next
.AutoFilterMode = False
End With
End Sub

Fehleranzeige:

.ShowAllData (gelb markiert)


Gruß Hakan

hakan.kay...@googlemail.com

unread,
May 31, 2018, 7:12:26 AM5/31/18
to
Hallo Claus,

habe Dir einen Onedrive - Link mit der Originaldatei gesendet.

Mit freundlichen Grüßen

Hakan Kaya

Claus Busch

unread,
May 31, 2018, 7:27:19 AM5/31/18
to
Hallo Hakan,

Am Thu, 31 May 2018 04:12:25 -0700 (PDT) schrieb
hakan.kay...@googlemail.com:

> habe Dir einen Onedrive - Link mit der Originaldatei gesendet.

das erste Makro zum Einfügen von Daten fängt an mit
Range("B3").PasteSpecial.

Davor muss doch zuerst einmal etwas kopiert werden, sonst läufst du doch
hier schon in einen Fehler. Das Blatt bleibt leer und die anderen Makros
können nicht getestet werden.

hakan.kay...@googlemail.com

unread,
May 31, 2018, 7:43:12 AM5/31/18
to
Hallo Claus,

das erste Makro fügt den Inhalt des -Zwischenspeichers- ein und eliminiert Spaltenüberschriften der importierten Rohdaten.

In meiner Originaldatei, die ich Dir zugesandt hatte, nehme ich diese Rohdaten zu Testzwecken aus dem Tabellenblatt mit der Bezeichnung "Rohdaten Muster".

Gruß Hakan

Claus Busch

unread,
May 31, 2018, 8:06:55 AM5/31/18
to
Hallo Hakan,

Am Thu, 31 May 2018 04:43:11 -0700 (PDT) schrieb
hakan.kay...@googlemail.com:

> das erste Makro fügt den Inhalt des -Zwischenspeichers- ein und eliminiert Spaltenüberschriften der importierten Rohdaten.
>
> In meiner Originaldatei, die ich Dir zugesandt hatte, nehme ich diese Rohdaten zu Testzwecken aus dem Tabellenblatt mit der Bezeichnung "Rohdaten Muster".

du hättest das 3. Makro deiner Tabelle entsprechend anpassen müssen.
Als ich das schrieb, wußte ich nicht, dass Spalte A leer ist und deine
Tabelle erst in Zeile 3 anfängt.
Schau mal hier:
https://1drv.ms/x/s!AqMiGBK2qniTgc5nJE23tkmwxh99WQ

hakan.kay...@googlemail.com

unread,
May 31, 2018, 9:11:29 AM5/31/18
to
Hallo Claus,

vielen Dank :-) Durch Deine Anpassung habe ich sehen können wo ich was ändern muss, um das richtige Ergebnis zu erzielen. Nun macht das Tool was es soll. Aus drei Klicks mach einen. Nochmals herzlichen Dank für Deine Hilfe und für die Makros.

Gruß Hakan
0 new messages