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

VBA vode

VBA vode
24.07.2023 14:11:09
Sebi
Hallo,

ich habe hier einen Code:

hier werden von allen Tabellenblätter B2 die Werte gezählt und in Test eingetragen.
Jetzt kommt immer 0 raus, bestimmt, weilalle Werte in B2 eine Formel hinterlegt ist. Wie kann ich das ändern, das er den Wert nimmt ?


Sub SumValues()

Dim ws As Worksheet
Dim total As Double
Dim testSheet As Worksheet
Dim j5 As Range

total = 0

For Each ws In ThisWorkbook.Sheets
If ws.Name = "test" Then
Set testSheet = ws
Exit For
End If
total = total + ws.Range("B2").Value
Next ws

Set j5 = testSheet.Range("J5")
j5.Value = total

End Sub


Da nke

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA vode
24.07.2023 14:37:04
Daniel
Hi
das Problem ist, dass du die Schleife abbrichst, sobald sie über das Sheet "Test" läuft.
dh alle Sheets, die nach "Test" kommen, werden nicht mehr aufsummiert.
wenn jetzt das Sheet "Test" das erste in der Reihe ist, dann bleibt die Summe 0.
du darfst also nicht abbrechen, wenn das Sheet "Test" dran ist, sondern nur nicht summieren aber ansonsten normal weiter machen:

also im Prinzip so:

For Each ws In ThisWorkbook.Sheets
If ws.Name = "test" Then
Set testSheet = ws
Else
total = total + ws.Range("B2").Value
End If
Next ws


wobei ich die Zuweisung von testSheet nur dann in der Schleife machen würde, wenn damit zu rechnen ist, dass des das Sheet "Test" nicht gibt" und das Makro dann auf diesen Fall ohne Fehlerabbruch reagieren soll:

also wenn das Sheet "test" immer vorhanden ist, besser so:

Set testSheet = Sheets("test")
For Each ws In ThisWorkbook.Sheets
If ws.Name > testSheet.Name Then total = total + ws.Range("B2").Value
Next ws
testSheet.Range("j5").value = total

anderen falls müsste man entsprechen prüfen:

For Each ws In ThisWorkbook.Sheets
If ws.Name = "test" Then
Set testSheet = ws
Else
total = total + ws.Range("B2").Value
End If
Next ws
if testSheet is nothing then
Msgbox "Blatt test fehlt!", vbcritical
else
testSheet.Range("j5").value = total
end if


Gruß Daniel
Anzeige
AW: VBA vode
24.07.2023 15:42:34
GerdL
Moin Sebi,

wenn überall in B2 Zahlen sind, geht es auch nach diesem Schema.
Sub Unit()


Dim Ws As Worksheet, dblSumme As Double

For Each Ws In ThisWorkbook.Worksheets
dblSumme = dblSumme + Ws.Range("B2").Value
Next
Tabelle1.Range("J5") = dblSumme - Tabelle1.Range("B2").Value

End Sub

Gruß Gerd
AW: VBA Code
24.07.2023 14:20:01
Rudi Maintaire
Hallo,
es wird summiert und nicht gezählt.

Sub SumValues()

Dim ws As Worksheet
Dim total As Double
Dim testSheet As Worksheet
Dim j5 As Range

Set testSheet = Sheets("test")
Set j5 = testSheet.Range("J5")
total = 0

For Each ws In ThisWorkbook.WorkSheets
If Not ws Is testSheet Then total = total + ws.Range("B2").Value ' nicht auf test summieren
Next ws

j5.Value = total

End Sub
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige