15.10.2020, 10:41
(Dieser Beitrag wurde zuletzt bearbeitet: 15.10.2020, 22:34 von WillWissen.
Bearbeitungsgrund: Codetags
)
Hallo an alle Excel-Freunde,
nach langem Hin- und Herprobieren bitte ich wirklich um Hilfe durch das Forum , da ich bei meinem VBA-Code, der mittlerweile recht lang und komplex geworden ist, nicht mehr weiter weiß. Rein formal stimmt der VBA-Code, doch er rechnet mir nicht.
- Ich habe drei Tabellenblätter namens "Garagenmieter", "Kontoauszüge" und "Hilfstabelle".
- Im Blatt "Garagenmieter" stehen in Spalte "A" ab "A6"die Kontonummern der Garagenmieter drinnen.
- Im Blatt "Kontoauszüge" stehen sämtliche Konten der Mieter, u.a. auch jene der Garagenmieter und deren Kontonummern in Spalte "B".
- Im Blatt "Hilfstabelle" steht in Zelle "B21" das aktelle Monat der Abrechnung drinnen, z.B. "8" für den Monat August.
- Im Blatt "Garagenmieter" stehen u.a. auch die Mietforderungen. Die Monate der semestralen Mietforderungen stehen in den Spalten "I" und "J".
1. Schritt: Eine Schleife für Blatt "Garagenmieter" Spalte "A" einbauen und suchen mit der Range.Find-Methode in Tabelle "Kontoauszüge", d.h. ich suche die Kontonummer des Garagenmieters im Blatt "Kontoauszzüge", um das richtige Konto anzusteuern.
2. Schritt: Ich bilde eine CurrentRegion für das betreffende Mieterkonto; oberhalb und unterhalb des Mieterkontos befinden sich leere Zeilen.
3. Schritt: Über ein Array suche ich die Zelle, in der "Mietforderung" steht. Diese steht immer in Spalte "D"; In Spalte "E" steht dann der Betrag, den es zu ändern gilt. -> über Offset(0, 1) anzusteuern
Es gilt: Wenn sich der aktuelle Monat (Hilfstabelle B21) zwischen dem ersten und letzten Zahlmonat befindet (zwischen den Werten der Zellen E und F im Blatt "Gargenmieter"), dann befindet sich der neue Wert der Mieteinnahmen in Blatt "Garagenmieter" Spalte "I" -> IF ...
Es gilt auch: Wenn der aktuelle Monat (Hilfstabelle B21) größer oder gleich des letzten Zahlmonats ist(>= F im Blatt "Garagenmieter"), dann befindet sich der neue Wert der Mieteinnahmen in Blatt "Garagenmieter" Spalte "J" -> ElseIf...
Wie gesagt: Formal ist mein VBA in Ordnung, aber es rechnet nicht. Vielleicht kann sich jemand die Zeit nehmen, sich meines Problems anzunehmen.
Ich danke jedem Leser und v.a. jenem, der mir weiterhelfen kann.
Vilen Dank schon mal im voraus und schöne Grüße, Mirko
Und hier mein Code:
________________________
nach langem Hin- und Herprobieren bitte ich wirklich um Hilfe durch das Forum , da ich bei meinem VBA-Code, der mittlerweile recht lang und komplex geworden ist, nicht mehr weiter weiß. Rein formal stimmt der VBA-Code, doch er rechnet mir nicht.
- Ich habe drei Tabellenblätter namens "Garagenmieter", "Kontoauszüge" und "Hilfstabelle".
- Im Blatt "Garagenmieter" stehen in Spalte "A" ab "A6"die Kontonummern der Garagenmieter drinnen.
- Im Blatt "Kontoauszüge" stehen sämtliche Konten der Mieter, u.a. auch jene der Garagenmieter und deren Kontonummern in Spalte "B".
- Im Blatt "Hilfstabelle" steht in Zelle "B21" das aktelle Monat der Abrechnung drinnen, z.B. "8" für den Monat August.
- Im Blatt "Garagenmieter" stehen u.a. auch die Mietforderungen. Die Monate der semestralen Mietforderungen stehen in den Spalten "I" und "J".
1. Schritt: Eine Schleife für Blatt "Garagenmieter" Spalte "A" einbauen und suchen mit der Range.Find-Methode in Tabelle "Kontoauszüge", d.h. ich suche die Kontonummer des Garagenmieters im Blatt "Kontoauszzüge", um das richtige Konto anzusteuern.
2. Schritt: Ich bilde eine CurrentRegion für das betreffende Mieterkonto; oberhalb und unterhalb des Mieterkontos befinden sich leere Zeilen.
3. Schritt: Über ein Array suche ich die Zelle, in der "Mietforderung" steht. Diese steht immer in Spalte "D"; In Spalte "E" steht dann der Betrag, den es zu ändern gilt. -> über Offset(0, 1) anzusteuern
Es gilt: Wenn sich der aktuelle Monat (Hilfstabelle B21) zwischen dem ersten und letzten Zahlmonat befindet (zwischen den Werten der Zellen E und F im Blatt "Gargenmieter"), dann befindet sich der neue Wert der Mieteinnahmen in Blatt "Garagenmieter" Spalte "I" -> IF ...
Es gilt auch: Wenn der aktuelle Monat (Hilfstabelle B21) größer oder gleich des letzten Zahlmonats ist(>= F im Blatt "Garagenmieter"), dann befindet sich der neue Wert der Mieteinnahmen in Blatt "Garagenmieter" Spalte "J" -> ElseIf...
Wie gesagt: Formal ist mein VBA in Ordnung, aber es rechnet nicht. Vielleicht kann sich jemand die Zeit nehmen, sich meines Problems anzunehmen.
Ich danke jedem Leser und v.a. jenem, der mir weiterhelfen kann.
Vilen Dank schon mal im voraus und schöne Grüße, Mirko
Und hier mein Code:
________________________
Code:
Sub Garagenmieter()
Dim wksQ As Worksheet
Dim wksZ As Worksheet
Dim lngZ As Long
Dim lngZZ As Long
Set wksQ = Worksheets("Garagenmieter") 'Quellblatt
Set wksZ = Worksheets("Kontoauszüge") 'Zielblatt
lngZZ = 2
With wksQ
For lngZ = 6 To .Range("A65536").End(xlUp).Row
If wksQ.Cells(lngZ, 1) = wksZ.Cells(lngZZ, 2) And Sheets("Hilfstabelle").Range("B21") <= wksQ.Cells(lngZ, 5) < wksQ.Cells(lngZ, 6) Then
wksZ.Cells(lngZZ, 2).Select
' Einbau CurrentRange-Absatz
Dim FirstAddress As String
Dim myArr As Variant
Dim Rng As Range
Dim O As Long
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
myArr = Array("*Mietforderung*")
With ActiveCell.CurrentRegion
For O = LBound(myArr) To UBound(myArr)
Set Rng = .Find(What:=myArr(O), _
After:=.Cells(.Cells.count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not Rng Is Nothing Then
FirstAddress = Rng.Address
Do
Rng.Offset(0, 1).Value = wksQ.Cells(lngZ, 9)
Set Rng = .FindNext(Rng)
Loop While Not Rng Is Nothing And Rng.Address <> FirstAddress
End If
Next O
End With
ElseIf wksQ.Cells(lngZ, 1) = wksZ.Cells(lngZZ, 2) And Sheets("Hilfstabelle").Range("B21") >= wksQ.Cells(lngZ, 6) Then
wksZ.Cells(lngZZ, 2).Select
Dim FirstAddress1 As String
Dim myArr1 As Variant
Dim Rng1 As Range
Dim O1 As Long
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
myArr1 = Array("*Mietforderung*")
With ActiveCell.CurrentRegion
For O1 = LBound(myArr1) To UBound(myArr1)
Set Rng1 = .Find(What:=myArr(O), _
After:=.Cells(.Cells.count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not Rng1 Is Nothing Then
FirstAddress1 = Rng1.Address
Do
Rng1.Offset(0, 1).Value = wksQ.Cells(lngZ, 9) + wksQ.Cells(lngZ, 10)
Set Rng1 = .FindNext(Rng1)
Loop While Not Rng1 Is Nothing And Rng1.Address <> FirstAddress1
End If
Next O1
End With
End If
Next
End With
End Sub