Supportnet / Forum / Skripte(PHP,ASP,Perl...)
VBA Aktuelle Ausgabe einer bestimmten Zelle
Frage
Hallo,
brauche ein Makro oder Modul, welches mir den Wert einer Spalte (z.B."B"), der letzten beschriebenen Zelle ausgibt. Habe schon ein Code der mir eine bestimmte Zelle ausgibt, die ich aber bei verlassen der Datei selbst ändern muss.
[code]
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets("Ausgang").Activate
MsgBox "Aktueller Kontostand " & Worksheets("Bank").Range("F37")
End Sub
[/code]
Danke
Antwort 1 von Floooooo
Private Sub Workbook_BeforeClose(Cancel As Boolean)
dim i as Integer
i = 0
do until Worksheets("Bank").Cells(i+1, 6) = ""
i = i+1
loop
Worksheets("Ausgang").Activate
MsgBox "Aktueller Kontostand " & Worksheets("Bank").Cells(i, 6)
End SubSollte das Ergebnis liefern. Die Schleife sucht sich den letzten eingetragenen WErt einer Spalte (in diesem Fall F -> 6), und gibt ihn aus.
Rückmeldung wäre nett.
Antwort 2 von softwareRE
Hi,
hat leider nicht geklappt. Ist beim schließen hängen geblieben. Konnte MsgBox nicht ausführen.
hat leider nicht geklappt. Ist beim schließen hängen geblieben. Konnte MsgBox nicht ausführen.
Antwort 3 von Flooooo
Hmmm... bei mir gehts ohne Probleme.
Welches Office verwendest du (ich XP) - aber ich kann mir nicht vorstellen, das es daran liegt...
Welches Office verwendest du (ich XP) - aber ich kann mir nicht vorstellen, das es daran liegt...
Antwort 4 von softwareRE
Hab auch XP glaub auch nicht dass es daran liegt,....
Antwort 5 von softwareRE
Könnte es daran liegen,, dass nicht alle Zeilen in der Spalte F ausgefüllt sind? Ich glaub schon,oder!?
Antwort 6 von Flooooo
Ach du meinst, du hast zwischendrin Leerzellen, und dann aber nochmsal WErte? Das ist natürlich schlecht....
Eine Hilfsmöglichkeit wäre, wenn z.B. vielleivht in Spalte E vor der relevanten Zahl so was wie "Kontostand" oder so steht, in der Schleife in der Spalte E bis zu dieser Zelle zu iterieren.
Eine Hilfsmöglichkeit wäre, wenn z.B. vielleivht in Spalte E vor der relevanten Zahl so was wie "Kontostand" oder so steht, in der Schleife in der Spalte E bis zu dieser Zelle zu iterieren.
Antwort 7 von softwareRE
Ich hab in Spalte A Zwischenstand/Endstand stehen, wieß nicht ab das hilft,....
Antwort 8 von Flooooo
Klar hilft das:
Dann gibts du in der do-until Schleife folgende Bedingung an:
Damit iteriert Excel beginnend mit Zelle A1 alle Zeilen der Spalte A durch, bis eine Zelle als Inhalt "Endstand" hat. Wenn in Spalte F in derselben Zeile der Kontostand steht, den du ausgeben willst, müsste es dann so laufen - der Rest vom Code bleibt gleich
Dann gibts du in der do-until Schleife folgende Bedingung an:
do until Worksheets("Bank").Cells(i+1, 1) = "Endstand"Damit iteriert Excel beginnend mit Zelle A1 alle Zeilen der Spalte A durch, bis eine Zelle als Inhalt "Endstand" hat. Wenn in Spalte F in derselben Zeile der Kontostand steht, den du ausgeben willst, müsste es dann so laufen - der Rest vom Code bleibt gleich
Antwort 9 von Flooooo
Sorry, Korrektur: Hinten in der Ausgabe musst du nochmal eins aufs I draufzählen, sonst hängst du noch eine Zeile zu weit oben:
Worksheets("Bank").Cells(i+1, 6)Antwort 10 von softwareRE
Was kann ich machen wenn ich mehrmals Endstand stehen hab?
Antwort 11 von Flooooo
Das Problem ist halt, dass niemand genau deine Excel-Tabelle kennt.
Der Algorithmus meiner Lösung geht halt von oben her nach unten, bis er zum ersten Mal den gesuchten Begriff findet; (bzw. die alte Version, bis sie eine Leerzeile hat).
Das Problem ist, dass man nicht einfach immer weiter laufen kann, den du könntest ja nahezu beliebig viele Zeilen (ok, ich geb zu: das packt Excel nicht :-) in deiner Tabelle haben.
Die Tabelle scheint sowieso "interessant" zu sein, wenn zwischendurch einfach mal Leerzeilen usw. kommen.
Für den Suchalgorithmus am einfachsten wäre entweder, dass du in der Zeile, deren Stand ausgegeben soll, eine klar definierte Markierung hast (also "speziellen" Text, nach dem Gesucht werden kann), oder du baust einen Workaround um das Ende der Tabelle (und damit die letzte Zeile) anders zu bestimmen.
Eine nicht so saubere Lösung, die aber funktioniert, wäre z.B. folgende:
Annahme: folgen mind. 5 leere Zeilen direkt aufeinander, dann bist du auf jeden Fall am Tabellenende.
Das musst du einfach als Bedingung der Schleife prüfen (das ist jetzt hier aber echtnur die schnellste Quick-Hack-Version, die mir einfiel .-):
z.B.:
Der Algorithmus meiner Lösung geht halt von oben her nach unten, bis er zum ersten Mal den gesuchten Begriff findet; (bzw. die alte Version, bis sie eine Leerzeile hat).
Das Problem ist, dass man nicht einfach immer weiter laufen kann, den du könntest ja nahezu beliebig viele Zeilen (ok, ich geb zu: das packt Excel nicht :-) in deiner Tabelle haben.
Die Tabelle scheint sowieso "interessant" zu sein, wenn zwischendurch einfach mal Leerzeilen usw. kommen.
Für den Suchalgorithmus am einfachsten wäre entweder, dass du in der Zeile, deren Stand ausgegeben soll, eine klar definierte Markierung hast (also "speziellen" Text, nach dem Gesucht werden kann), oder du baust einen Workaround um das Ende der Tabelle (und damit die letzte Zeile) anders zu bestimmen.
Eine nicht so saubere Lösung, die aber funktioniert, wäre z.B. folgende:
Annahme: folgen mind. 5 leere Zeilen direkt aufeinander, dann bist du auf jeden Fall am Tabellenende.
Das musst du einfach als Bedingung der Schleife prüfen (das ist jetzt hier aber echtnur die schnellste Quick-Hack-Version, die mir einfiel .-):
z.B.:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
dim i as Integer
i = 0
do until (Worksheets("Bank").Cells(i+1, 6) = "")
AND (Worksheets("Bank").Cells(i+2, 6) = "")
AND (Worksheets("Bank").Cells(i+3, 6) = "")
AND (Worksheets("Bank").Cells(i+4, 6) = "")
AND (Worksheets("Bank").Cells(i+5, 6) = "")
i = i+1
loop
Worksheets("Ausgang").Activate
MsgBox "Aktueller Kontostand " & Worksheets("Bank").Cells(i, 6)
End Sub
Antwort 12 von nighty
hi alle :)
rem ermittlung von der letzten zeile wie spalte
Sub Makro1()
Set LastCell = ActiveSheet.Cells.SpecialCells(xlLastCell)
alta = LastCell.Row
a = LastCell.Row
Do While Application.CountA(Rows(a)) = 0 And a <> 1
a = a - 1
Loop
alta = a
altb = LastCell.Column
b = LastCell.Column
Do While Application.CountA(Columns(b)) = 0 And b <> 1
b = b - 1
Loop
altb = b
rem in lzeile steht die letzte zeil als zahl
rem in lspalte steht die letzte spalte als zahl,daher eine ableitung zum ascicode und daher bei diesem beispiel eine begrenzung der spalten bei Z
lzeile = alta
lspalte = altb
rem hier eine abtastung der tabelle mit den zuvor ermittelten maxwerten
For t% = 65 To 65 + lspalte - 1
For t1 = 1 To lzeile
rem kl.beispiel noch wie ansprechbar sein koennte
rem t% ist der ascicode bzw. spaltenbezeichner A,B,C u.s.w.
rem t1 die zeilennummer
Rem Range(Chr$(t%) & t1)
Next t1
Next t%
End Sub
gruss nighty :)
rem ermittlung von der letzten zeile wie spalte
Sub Makro1()
Set LastCell = ActiveSheet.Cells.SpecialCells(xlLastCell)
alta = LastCell.Row
a = LastCell.Row
Do While Application.CountA(Rows(a)) = 0 And a <> 1
a = a - 1
Loop
alta = a
altb = LastCell.Column
b = LastCell.Column
Do While Application.CountA(Columns(b)) = 0 And b <> 1
b = b - 1
Loop
altb = b
rem in lzeile steht die letzte zeil als zahl
rem in lspalte steht die letzte spalte als zahl,daher eine ableitung zum ascicode und daher bei diesem beispiel eine begrenzung der spalten bei Z
lzeile = alta
lspalte = altb
rem hier eine abtastung der tabelle mit den zuvor ermittelten maxwerten
For t% = 65 To 65 + lspalte - 1
For t1 = 1 To lzeile
rem kl.beispiel noch wie ansprechbar sein koennte
rem t% ist der ascicode bzw. spaltenbezeichner A,B,C u.s.w.
rem t1 die zeilennummer
Rem Range(Chr$(t%) & t1)
Next t1
Next t%
End Sub
gruss nighty :)
Antwort 13 von softwareRE
Hi,
also hab den Code jetzt mal so übernommen und eingeflechtet. Leider bekomm ich den Kontostand in der MsgBox nicht ausgewiesen.
also hab den Code jetzt mal so übernommen und eingeflechtet. Leider bekomm ich den Kontostand in der MsgBox nicht ausgewiesen.
Antwort 14 von nighty
hi softwarere :)
du kannst mir auch deine tabelle per email mal schicken,mit kurzbeschreibung des zieles.
gruss nighty
du kannst mir auch deine tabelle per email mal schicken,mit kurzbeschreibung des zieles.
gruss nighty
Antwort 15 von nighty
hi softwarere
hier ein beispiel was den letzten wert von spalte B nach zelle B1 schreibt :)
gruss nighty
Sub Makro1()
Set LastCell = ActiveSheet.Cells.SpecialCells(xlLastCell)
alta = LastCell.Row
a = LastCell.Row
Do While Application.CountA(Rows(a)) = 0 And a <> 1
a = a - 1
Loop
alta = a
altb = LastCell.Column
b = LastCell.Column
Do While Application.CountA(Columns(b)) = 0 And b <> 1
b = b - 1
Loop
altb = b
lzeile = alta
lspalte = altb
With Worksheets("Tabelle1")
rem hier ist die posangabe und uebergabe
Cells(1, 2) = Cells(lzeile, lspalte)
End With
End Sub
hier ein beispiel was den letzten wert von spalte B nach zelle B1 schreibt :)
gruss nighty
Sub Makro1()
Set LastCell = ActiveSheet.Cells.SpecialCells(xlLastCell)
alta = LastCell.Row
a = LastCell.Row
Do While Application.CountA(Rows(a)) = 0 And a <> 1
a = a - 1
Loop
alta = a
altb = LastCell.Column
b = LastCell.Column
Do While Application.CountA(Columns(b)) = 0 And b <> 1
b = b - 1
Loop
altb = b
lzeile = alta
lspalte = altb
With Worksheets("Tabelle1")
rem hier ist die posangabe und uebergabe
Cells(1, 2) = Cells(lzeile, lspalte)
End With
End Sub
Antwort 16 von softwareRE
Hallo,
Habe versucht den Code zu ändern, dass Spalte "F" die letzte Zeile angezeigt wird. Leider hat es nicht ganz hingehauen.
Habe versucht den Code zu ändern, dass Spalte "F" die letzte Zeile angezeigt wird. Leider hat es nicht ganz hingehauen.
Antwort 17 von nighty
hi softwarere
dann so :)
gruss nighty
Sub Makro1()
Set LastCell = ActiveSheet.Cells.SpecialCells(xlLastCell)
alta = LastCell.Row
a = LastCell.Row
Do While Application.CountA(Rows(a)) = 0 And a <> 1
a = a - 1
Loop
alta = a
altb = LastCell.Column
b = LastCell.Column
Do While Application.CountA(Columns(b)) = 0 And b <> 1
b = b - 1
Loop
altb = b
lzeile = alta
lspalte = altb
With Worksheets("Tabelle1")
Do
If Cells(lzeile, 6) <> "" Then
rem ausgabe der letzten zeile von spalte f
Cells(1, 2) = Cells(lzeile, 6)
Exit Do
End If
If lzeile > 1 Then
lzeile = lzeile - 1
Else
Exit Do
End If
Loop
End With
End Sub
dann so :)
gruss nighty
Sub Makro1()
Set LastCell = ActiveSheet.Cells.SpecialCells(xlLastCell)
alta = LastCell.Row
a = LastCell.Row
Do While Application.CountA(Rows(a)) = 0 And a <> 1
a = a - 1
Loop
alta = a
altb = LastCell.Column
b = LastCell.Column
Do While Application.CountA(Columns(b)) = 0 And b <> 1
b = b - 1
Loop
altb = b
lzeile = alta
lspalte = altb
With Worksheets("Tabelle1")
Do
If Cells(lzeile, 6) <> "" Then
rem ausgabe der letzten zeile von spalte f
Cells(1, 2) = Cells(lzeile, 6)
Exit Do
End If
If lzeile > 1 Then
lzeile = lzeile - 1
Else
Exit Do
End If
Loop
End With
End Sub

