Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
344to348
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
344to348
344to348
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Endlosschleife

Endlosschleife
29.11.2003 15:41:37
toni
Hallo VBA' ler,

ich habe folgendes Problem:

In einem Tabellenblatt ("Tabelle1") stehen in den Spalten A bis C numerische Werte.
Nun berechne ich in Spalte D die Summe der drei Werte. In Spalte E erscheint das Ergebnis der Multiplikation der drei Werte.
Folgenden Code habe ich dazu in ein allgmeines Modul eingefügt:

Dim zahl1 As Integer, zahl2 As Integer, zahl3 As Integer
Dim addition As Integer, multiplikation As Integer

Sub rechnen(zeile)

zahl1 = Range("A" & zeile).Value
zahl2 = Range("B" & zeile).Value
zahl3 = Range("C" & zeile).Value

addition = zahl1 + zahl2 + zahl3
multiplikation = zahl1 * zahl2 * zahl3


Range("D" & zeile).Value = addition
' Range("E" & zeile).Value = multiplikation

Debug.Print "addition:"; addition
Debug.Print "multiplikation:"; multiplikation

End Sub


Ich möchte nun erreichen, dass die Ergebnisse (Spalte E und D) automatisch aktualisiert werden, wenn einer der Werte in Spalte A , B oder C geändert wird. Wenn nicht alle Zellen (A, B, C) einer Zeile gefüllt sind soll in die Ergebniszellen eine 0 eingefügt werden.
Dazu benutze ich das Ereignis Worksheet_Change.

Der folgende Code steht im Klassenmodul von Tabelle1:

Dim zeile As Integer, ChangeBereich As Range


Private Sub Worksheet_Change(ByVal Target As Range)
zeile = Target.Row
Set ChangeBereich = Range(Cells(zeile, 1), Cells(zeile, 3))
If WorksheetFunction.CountBlank(ChangeBereich) = 0 Then
Call rechnen(zeile)
Else
Cells(zeile, 4).Value = 0
End If
End Sub

Wenn ich nur das Ergebnis der Addition sehen will, klappt das ganze einigermaßen. Allerdings springt das Programm nach der Zeile

Range("D" & zeile).Value = addition

wieder in die Prozedur Worksheet_Change.

Das ganze passiert etwa 100 mal (das Debug.Print erscheint so oft im Direktfenster)

Wenn ich beide Ergebnisse sehen will:

Range("D" & zeile).Value = addition
Range("E" & zeile).Value = multiplikation

lande ich sogar in einer Endlosschleife.

Kann mir vielleicht jemand erklären was da passiert und vor allem was ich ändern muss, um zu meinem gewünschten Ergebnis zu kommen.

Ich hoffe, ich stelle mich nur zu dumm an und es ist nur eine Kleinigkeit.

Ciao, Toni

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Warum VBA und nicht Formel?
29.11.2003 16:02:43
Josef Ehrensberger
Hallo Toni,

warum berechnest du die Werte mit VBA und nicht einfach
mit einer Formel?

Gruß Sepp
AW: Warum VBA und nicht Formel?
29.11.2003 16:40:20
toni
Hallo Sepp,

es handelt sich hier nur um Beispielcode.
in Wirklichkeit geht die Prozedur Rechnen über hundert Zeilen mit etlichen Variablen.
Außerdem kenne ich mich mit Formeln überhaupt nicht aus.
Gibt es keine Lösung mit VBA?

Gruss, Toni
AW: Warum VBA und nicht Formel?
29.11.2003 16:57:29
Josef Ehrensberger
Hi Toni,

sicher gibt es eine Lösung in VBA.

Auch wenn ich nicht vertehe, warum du keine Formeln willst,
ein Tip.


Sub rechnen(zeile)
Application.EnableEvents = False
'Dein Code
Application.EnableEvents = True
End Sub


Gruß Sepp
Anzeige
AW: Warum VBA und nicht Formel?
29.11.2003 17:36:52
toni
Hallo Sepp,

genau das hab ich gesucht!!!
Unter Formeln verstehe ich das Zeug mit Wenn(i;)usw...
Das habe ich allerdings nicht drauf.
Oder meinst Du Funktionen?
Könnte ich 'Rechnen' als Funktion laufen (Sub Function oder so).
Ist die Lösung mit EnableEvents zu umständlich oder fehleranfällig?

Vielleicht kannst Du mir ja kurz erklären, wie Du das meinst.
Wie sähe mein Beispiel als Formel aus und wie müsste ich sie einbinden?

Auf jeden Fall schon mal vielen Dank!!!

Toni
AW: Warum VBA und nicht Formel?
29.11.2003 18:42:21
HerbertH
Hallo Toni,
Vielleicht probierst du es so:

'ins Tabellenmodul


'in Standardmodul


Gruß Herbert
Anzeige
AW: Warum VBA und nicht Formel?
29.11.2003 22:50:15
Josef Ehrensberger
Hallo Toni,

für diese einfache Berechnung würde ich auf jeden Fall
eine Formel nehmen.

In "D1"
=WENN(ANZAHL(A1:C1)=3;SUMME(A1:C1);0)

In "E1"
=WENN(ANZAHL(A1:C1)=3;PRODUKT(A1:C1);0)

Bei komplexen Berechnungen könnte man das sicher auch mit
einer UDF lösen.

Gruß Sepp

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige