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

Makro erweiterung

Makro erweiterung
Jochen
Hallo Excel-Freund, habe folgendes Makro das wenn ich in dem Bereich E9:BX38 einen Wert eintrage wird das Ergebnis in Spalte C bzw. D aus gegeben:
Public Function Monate()
Const Monat_Max = 48
jahr = Cells(1, 83)
Debug.Print monat
Debug.Print jahr
For j = 9 To 38
monat = Cells(1, 82)
If Cells(1, 84) = "hinten" Then
monat = monat + 12
End If
summe = 0
summeESS = 0
For i = 1 To 6
summe = summe + Cells(j, (monat + (monat - 1) + 4) + monat - 1)
summeESS = summeESS + Cells(j, (monat + (monat - 1) + 6) + monat - 1)
monat = monat + 1
Next
Monate = summe
Debug.Print summe
Debug.Print summeESS
Cells(j, 3) = Monate
Cells(j, 4) = summeESS
Next
End Function
Nun mein Problem: Es wird immer der ganze Bereich neu berechnet. Besteht die Möglichkeit das nur die Zeile in der ich einen Wert ändere berechnet wird.
Danke im Voraus.
Gruß
Jochen

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Makro erweiterung
20.08.2012 14:48:51
Rudi
Hallo,
wie wird die Funktion denn aufgerufen?
Per Worksheet_Change-Event? Dann übergib die Zeile der geänderten Zelle an die Funktion.
Public Function Monate(j as long)
Const Monat_Max = 48
jahr = Cells(1, 83)
Debug.Print monat
Debug.Print jahr
monat = Cells(1, 82)
If Cells(1, 84) = "hinten" Then
monat = monat + 12
End If
summe = 0
summeESS = 0
For i = 1 To 6
summe = summe + Cells(j, (monat + (monat - 1) + 4) + monat - 1)
summeESS = summeESS + Cells(j, (monat + (monat - 1) + 6) + monat - 1)
monat = monat + 1
Next
Monate = summe
Debug.Print summe
Debug.Print summeESS
Cells(j, 3) = Monate
Cells(j, 4) = summeESS
End Function

btw: Funktionen sollten ausschließlich Werte zurück geben und nie irgendwelche Aktionen ausführen.
Gruß
Rudi
Anzeige
AW: Makro erweiterung
20.08.2012 15:08:24
Jochen
Hiermit wird das ganze ausgelöst:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("E9:BX38")) Is Nothing Then
Call Monate
End If
End Sub
Gruß
Jochen
AW: Makro erweiterung
20.08.2012 16:30:02
Rudi
Hallo,
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("E9:BX38")) Is Nothing Then
Call Monate target.Row
End If
End Sub
Public SubMonate(j as long)
Const Monat_Max = 48
jahr = Cells(1, 83)
Debug.Print monat
Debug.Print jahr
monat = Cells(1, 82)
If Cells(1, 84) = "hinten" Then
monat = monat + 12
End If
summe = 0
summeESS = 0
For i = 1 To 6
summe = summe + Cells(j, (monat + (monat - 1) + 4) + monat - 1)
summeESS = summeESS + Cells(j, (monat + (monat - 1) + 6) + monat - 1)
monat = monat + 1
Next
Monate = summe
Debug.Print summe
Debug.Print summeESS
Cells(j, 3) = Monate
Cells(j, 4) = summeESS
End Sub

Mit Call werden Subs aufgerufen!
Gruß
Rudi
Anzeige
AW: Makro erweiterung
20.08.2012 16:48:10
Jochen
Hallo Rudi,
diese beiden Zeilen sind Rot geschrieben:
Call Monate target.Row
Public SubMonate(j as long)
Hast Du dafür eine Antwort?
Gruß
Jochen
AW: Makro Erweiterung
20.08.2012 19:57:33
Rudi
Hallo,
Hast Du dafür eine Antwort?
Sicher. Das kommt davon, wenn man direkt im Forum programmiert und nicht im VBA-Editor. ;-)
Call Monate (Target.Row)
Public Sub Monate(j as long)
Könnte man aber auch selbst drauf kommen.
Gruß
Rudi
AW: Makro Erweiterung
21.08.2012 07:19:44
Jochen
Guten Morgen Rudi,
danke für die Antwort, aber der Hinweis "Könnte man aber auch selbst drauf kommen" war nicht i.O.
Wenn Du mal schaust ich habe VBA bescheiden angegeben!
Nun einen schönen und sonnigen Tag,
Gruß
Jochen
Anzeige
VBA bescheiden
21.08.2012 10:56:19
Rudi
Hallo,
dass zwischen Sub und den Namen der Prozedur ein Leerzeichen gehört, ist doch wohl klar.
Und dass bei einer Call-Anweisung die Argumente der aufgerufenen Prozedur in () stehen müssen, kannst du in der Hilfe lesen.
Gruß
Rudi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige