Supportnet Computer
Planet of Tech

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 Sub


Sollte 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.

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...

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.

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:

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.:
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 :)

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.

Antwort 14 von nighty

hi softwarere :)

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

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.

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