ich habe folgendes Makro gefunden, dass grundsätzlich funktioniert, aber würde es gerne noch etwas anpassen:
Das Makro kopiert mir aus allen Reitern, die in H15 "Rechn.-Nr.:" stehen haben (außer Reiter "RechBetrag" und "Rechnung") die Rechnungsnummer (Zelle I15), den Rechnungsbetrag (Zelle I38) und das Rechnungsdatum (Zelle I12) die Werte in die Spalten A, B und C im Reiter "RechBetrag". Das funktioniert auch (zumindest meistens :-)).
Nun zu meinen vier Fragen/gewünschten Anpassungen:
1. Im Reiter "RechBetrag" werden die Werte erst ab Zeile 16 ausgegeben und dann ab Zeile 40 noch einmal (ich habe also alle Informationen doppelt kopiert). Wie kann ich die Daten ab Zeile 1 und nur einmalig ausgeben?
2. Ist es möglich, dass die Werte nur kopiert werden, wenn
a) sich für eine Rechnungsnummer das Datum und/oder der Betrag geändert haben (wahrscheinlich ist ein Abgleich mit den bestehenden Werten in RechBetrag nötig, da der bestehende "Rechnungsreiter" (z.B. für Rechn.Nr. 2018-01) gelöscht wird und mit den geänderten Daten neu erstellt)
b) neue Rechnungnummern hinzukommen, soll nicht alles neu kopiert werden, sondern nur a) und die neuen Rechnungnummern.
Hmm...irgendwie ist es schwer zu beschreiben, was ich bei Nr. 2 meine. Ich möchte quasi einen "dynamischen" Sverweis, der mir Betrag und Datum zu einer Rechnungsnummer in "RechBetrag" darstellt. Der Sverweis muss die Werte aus den vordefinierten Zellen der verschiedenen Rechnungsreitern ziehen, aber die Reiter werden ja erst nach und nach erstellt (Reitername: "Nr." & variable Werte), so dass ich nicht auf bestehende Reiter gehen kann.
Da die Gesamtmenge der Rechnungsnummern überschaubar ist (ca. 100 pro Jahr), kann ich auch in RechBetrag alle Rechnungsnummern von 2018-01 bis 2018-99 eintragen, wenn dies einfacher wäre.
3.) aktuell nimmt das Makro ja alle wks, die nicht Rechnung oder RechBetrag heißen. Kann man es so ändern, dass es nur die Reiter mit "Nr." im Reiternamen sucht (z.B. "Nr. 2018-01_MaxMustermann")?
4.) Ich erhalte immer wieder den Fehler Laufzeit 1004, Method 'Select' Object an der Stelle "wks.select". Im Forum habe ich schon gefunden, dass es an meinen ausgeblendeten Reitern liegt. Nun habe ich ein anderes Makro, dass alle Rechnungsreiter vorher einblendet. Funktioniert auch super. Aber ich habe noch andere Reiter (z.B. Vertrag, Übersicht etc), die weiterhin ausgeblendet sind. Manchmal läuft das Makro durch, manchmal hängt es sich an dieser Stelle auf. Kann es an meinen anderen ausgeblendeten Reitern liegen? Eigentlich möchte ich ja nur, dass die Rechnungsreiter abgefragt werden. Da auch die Anzahl der anderern Reiter variable ist (z.B. Vertrag 1, Vertrag 2, ....) möchte ich eigentlich nicht jedes mal alles einblenden und alles ausblenden.
Uff, viele Fragen und vorallem Fragezeichen in meinem Kopf. Für Vorschläge/Ideen bin ich sehr dankbar!
Viele Grüße
Gesa
PS: Könnte mir jemand erklären, was es mit i = 1 t 30 auf sich hat? Mir ist klar, dass hier gezählt wird, aber bei diesem Makro erschließt sich mir nicht ganz der Sinn dahinter bzw. was dadurch ausgelöst wird. Muss ich das auf i = 1 to 100 setzen, wenn ich 100 Rechnungen im Jahr habe? Danke!
aktuelles Makro
Sub Betrag_Rechnung()
Sheets("RechBetrag").Visible = True
Application.EnableEvents = False
Sheets("RechBetrag").Select
Range("A:C").Clear
Dim wks As Worksheet
Dim a As Long
Dim i As Long
For i = 1 To 30
For Each wks In ThisWorkbook.Worksheets
If wks.Name "RechBetrag" And wks.Name "Rechnung" Then
If wks.Range("H15") = "Rechn.-Nr.:" Then
wks.Select
Range("I15").Select
Selection.Copy
Sheets("RechBetrag").Select
Cells(i, "A").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
wks.Select
Range("I38").Select
Selection.Copy
Sheets("RechBetrag").Select
Cells(i, "B").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
wks.Select
Range("I12").Select
Selection.Copy
Sheets("RechBetrag").Select
Cells(i, "c").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End If
i = i + 1
End If
Next
Next
Application.EnableEvents = True
Sheets("RechBetrag").Visible = False
End Sub