Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

makroprogrammierung für kassenbuch





Frage

hallo experten ich hab ein kassen buch http://www.uploadagent.de/files/1162923219/Kassenbuch(makro-version).xls der versuch einer programmierung eines makros is meinerseits kläglich gescheitert. ich bräuchte ein makro für das einfügen einer beliebigen zeile. wenn nun eine neue zeile mitten in das kassenbuch eingefügt wurde, fehlt aber mein zellbezug und das sollte mittels makro automatisch funktionieren. auf den punkt gebracht soll mein makro eine neue zeile einfügen und die formel in die zellen schon integriert sein. kann mir jemand helfen gruß heiko

Antwort 1 von coros

Hallo Heiko,

unter den dem Link

http://www.netupload.de/img.php/1405822287e5edb8122910ebffb... kannst Du Deine Datei mit einer Lösungsmöglichkeit downloaden.

Ich habe zwei Buttons in Blatt "Jan" eingefügt, über die eine Zeile eingefügt oder gelöscht werden kann.
Das mit den Buttons für die Ausgabe des Endsaldos habe ich nicht verstanden. Das Saldo wird doch durch die Formeln automatisch berechnet und steht somit immer in der letzten Zeile in Spalte C.

Ich hoffe, Du hast das so gemeint und das Du klar kommst. Bei Fragen melde Dich bitte.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von coros

Hi,

ich nochmal. Hatte ich vergessen zu erwähnen, wenn eine Zeile eingefügt wurde, muss erst in Spalte A oder B ein Wert eingetragen werden, damit die nachfolgenden Formeln ein neues Ergebis ausgeben. Das hat den Grund, dass durch die eingefügte Zeile noch kein Ergebnis in Spalte C steht und somit alle nachfolgenden Ergebnisse in Spalte C einen Fehlerwert ausspucken. Daher habe ich die Formel um die Funktion "ISTFEHLER" erweitert. Dadurch werden erst Ergebnisse angezeigt, wenn ein plausibeles Ergebnis errechnet werden kann.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 3 von Coolpix

hallo Heiko,

obwohl ich ein VBA-Freak bin,
ist glaube ich die "nicht VBA-Variante" die einfachste.

wenn du z.B. auf deinen Monatsblättern in Zeile
3 die Einnahmen/Ausgabe von Zeile 8 bis 18 absummierst und saldierst, kannst du zwischen zeile 8 und 18 soviele Zeilen einfügen wie du willst und bekommst keinen BEZUG# - Fehler.

Ausserdem kannst du per 3D-Bezug auf einem Übersichtsblatt schnell eine Jahresübersicht berechnen.


Feedback fänd ich klasse

Greetings ;-)

Antwort 4 von heiko84

boar oliver, du bist so geil, weißt du das?? :o)

erstma ganz dickes dankeschön.....ich versuch mich da grad durchzufuchsen......

weißt du wo ich im internet oda so, was zu deiner formel finde??
Cells(iRow, 3).FormulaLocal = "=WENN(ISTFEHLER(WENN(A" & iRow & "+B" & iRow & "=0;"" "";C" & iRow - 1 & "+A" & iRow & "-B" & iRow & "));"""";" _
& "WENN(A" & iRow & "+B" & iRow & "=0;"" "";C" & iRow - 1 & "+A" & iRow & "-B" & iRow & "))"

weil ich soll die formel im einzelnen meinen kollegen erklären, weil die daran auch schon länger brüten...

nochma ganz dickes danke
heiko

Antwort 5 von coros

Hallo Heiko,

ich vermute mal, dass Du von der Formel, so wie sie im Makro steht, im Internet oder so nichts finden wirst. Die Formel macht auch nichts weiteres, als eine Formel mit variabeler Zeile in eine Zelle einzufügen.
Mal als Beispiel: Du würdest in Zeile 9 mit dem Makro eine Zeile einfügen. Dann erscheint in Zelle C9 die Formel

=WENN(ISTFEHLER(WENN(A9+B9=0;" ";C8+A9-B9));"";WENN(A9+B9=0;" ";C8+A9-B9))

Die gleiche Formel steht in dem Makro, Einziger Unterschied, ich lese am Anfang des Makro die markierte Zeilennummer ein und schreibe diese Zahl in die Variable "iRow". Dann werden einfach in der Formel die Zeilenzahlen durch "iRow" (in diesem Beispiel befindet sich in iRow die Zahl 9) bzw. iRow-1 um die Zeilenzahl 8 für die Formel zu erhalten.

Zu der Funktion "ISTFEHLER" gibt es nur soviel zu sagen, dass wenn aus der Formel

WENN(A9+B9=0;" ";C8+A9-B9)

ein Fehlerwert resultieren würde, soll die Zelle leer bleiben. Das sagen die beiden Anführungszeichen ( "" ) aus. Ergibt die Formel keinen Fehler, wird die Formel angewendet und das Ergebnis wird in der Zelle ausgegeben.

Ich hoffe, das genügt Dir als Erklärung. Wenn nicht, frage einfach noch mal nach.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 6 von heiko84

hy oliver, vielen dank nochmal für die programmierung und die erklärung....ohne dich wäre ich wohl aufgeschmissen. aber 2 fragen hab ich noch!! a,b,c in anführungszeichen ("") bedeutet, dass das meine variablen sind, oda?? und kannst du mir evt. noch ein letztes mal bezüglich der endsaldoausgabe helfen???

der endsaldo soll über den makrobutton noch einmal gesondert ausgewiesen werden. das heißt gesamte einnahmen, ausgaben und bestand des monats sollen nach der letzten zeile ausgewiesen werden.
um herauszubekommen, welche die letzte zeile ist, benötige ich eine zählschleife. hier meine vorstellung:

zeilennummer=??
spaltennummer=??
cells(zeilennummer,spaltennummer).value=??
b=cells(??,??).value
for to
.
.
wäre sehr nett, wenn du mir nochmal hilfst....
mit besten dank
heiko

Antwort 7 von coros

Hallo Heiko,

Du kannst Dir Deine Datei wieder unter http://www.netupload.de/img.php/7cbc51067f23a9a8fe1c170a2ce7c56... mit dem entsprechend integrierten Makro downloaden.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 8 von coros

Hallo ich nochmal,

da ist was mit dem Link schief gelaufen. Daher hier nochmal der Downloadlink.

http://www.netupload.de/img.php/6c48f287b1109d932f84f8ee8bc...

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 9 von heiko84

viiiiiiiiiiiiiiiiieeeeeeeeeeeeeeeelllllllllllleeeeeeeeeeennnnnnnnnn dank und so!!!!!!!!!!!!!!!
aber darf ich dir dazu noch 2 fragen stellen???

1. a,b,c in anführungszeichen ("") bedeutet, dass das meine variablen sind, oda??

2. das zeichen "&" bedeutet doch "und", oder? aber wieso kann ich denn im excel nicht "and" schreiben, oder hat dieses zeichen noch eine andere bedeutung???

vvvvvvvvvvvvvviiiiiiiiiiiiiieeeeeeeeeeellllllllllllleeeeeeeeeennnnnnnnnn dank nochmal!!!

heiko

Antwort 10 von coros

Moin Heiko,

zu 1.: Die Buchstaben A, B und C haben nichts mit Variablen zu tun. Das sind die Spaltenbezeichnungen Deiner Spalten, in denen Deine Werte stehen.

zu 2.: Eine Bedeutung zu den Zeichen kann ich Dir nicht schreiben. Aber, der Operator "And" kommt zum Einsatz, wenn etwas vergleichen werden soll, z.B. in einer If-Abfrage. Wobei bei einer If-Abfrage auch das &-Zeichen zum Einsatz kommen kann.
Das "&" Zeichen dient dazu, mehrere Werte oder Buchstaben oder Wörter oder oder oder, miteinander zu verbinden. Hier kann das Wort "And" aber nicht angewendet werden.

Sorry, besser kann ich Dir das nicht erklären, da ich nicht weiß, wie ich das besser beschreiben soll.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 11 von achim_13086

Guten Morgen Heiko,

unter dieser Adresse findest Du eine Mustervorlage meines Kassenbuches.

Es beinhaltet zwar keine Makros ist dafür aber voll funktionsfähig.

Aus der Mustervorlage (Endung .xlt) kann eine neue Datei mit der Endung .xls erstellt werden.

In der Zeile unter Mandant wird der Name der Firma eingetragen.

Monat und Jahr tauchen rechts oben auf, wenn das erste Datum eingetragen wurde.

Es gibt vier Spalten für die Eingabe:
Einnahmen, Ausgaben, Gegenkonto und Bu.-datum.

In der Spalte Buchungstext erscheint der Text automatisch. Hierfür gibt es ein Tabellenblatt " Konten ". Die Konten stellen den Kontenrahmen SKR3 für Klein- und Einzelbetriebe dar.

In den Zeilen der Spalte Buchungstext kann natürlich auch der Buchungsfall direkt eingetragen werden.

Ausgedruckt werden die Seiten des Kassenbuches bis zum Ende der Spalte Buchungstext. Die beiden letzten Spalten zeigen lediglich den Code für den Steuerschlüssel (SS) und den jeweiligen Saldo an. Der Code (SS) wird für ein Buchhaltungsprogramm benötigt.

Pro Monat gibt es 7 Seiten mit jeweils 48 Zeilen, also 336 Buchungsmöglichkeiten pro Monat.

Seitenzahlen, Anfangs- und Endbestände werden automatisch übertragen.

Am Ende jeder Seite wird automatisch die Umsatzsteuer und die Vorsteuer jeweils mit dem vollen und halben Steuersatz ausgewiesen.
Ab Januar 2007 sind die Steuersätze in dem Tabellenblatt Konten von 16 auf 19 zu ändern.

Beim Ausdruck des jeweiligen Monats lediglich die Spalten und Zeilen von A1 bis M?? markieren und unter Datei Druckbereich den Druckbereich festlegen auswählen. Mögliche leere Zeilen auf der letzten gebuchten Seite ausblenden. Danach den jeweiligen Monat einfach ausdrucken.

Anmerkung zu Formeln:
Anführungsstricke innerhalb einer Formel kennzeichnen in der Regel einen Text. Das kaufmännische " & " dient zum Zusammenfügen von Werten, Text und / oder Werten und Texte.

Beispiel: Spalte B = Namen und Spalte C = Vornamen.
In B2 = Mustermann und in C2 = Max
Formel: " =C2&" "&B2 " ergibt Max Mustermann .

Das Wort " and " kann sowohl n einer Formel in einer Exceltabelle als auch in einem Vba-Makro verwendet werden. Die Funktion ist bei beiden Möglichkeiten die selbe.

Tabellenbeispiel. " =WENN(AND(B2="";C2="");"Zelle ist leer";C2&" "&B2) " .
Das Wort " and " kann auch durch das Wort " und " ersetzt werden.

Makrobeispiel: " IF B2 ="" AND C2="" THEN "Zeile ist leer" ELSE C2&" "&B2 " .
Diese Form der Programmierung findest Du in den meisten Programmiersprachen wieder, die auf Basicdialekten basieren.

Im wesentlichen hat Coros diesen Aspekt bereits beantwortet.

Ich hoffe, ich konnte hinsichtlich des Kassenbuches zur Hilfe einwenig beitragen, auch wenn in meinem Exemplar kein Makro enthalten ist.

Gruß
Joachim

Antwort 12 von heiko84

hey, du stehst aber früh auf....

...hier noch 2 kleine verständnisfragen...

die frage mit a,b,c bezog sich auf die anführungszeichen.."+A" & iRow & "-B"....warum stehen diese in den anführungszeichen???

Offset(1, 0) bedeutet, dass die zeile um 1 nach unten verschoben wird, oder?

schönes wochenende noch

heiko

Antwort 13 von achim_13086

Hi Heiko,

schau bei Coros nach, der kann es noch früher.
Bei mir kommt es auf den Schönheitsschlaf nicht mehr an. Ich bin jenseits von Gut und Böse. Daher noch noch naturschön.

Jetzt zu deiner Frage.
Die Buchstaben A und B stellen in der Gesamtformel die Spalten dar. Würden die Anführungszeichen fehlen, interpretiert Excel das als Variable bzw. Konstante.

Heißt " +A " würde als Variable A erkant. Das gleiche gilt für B .
Da die Variable A und B nicht vorhanden sind, führt jedes für sich zu einer Fehlermeldung.

Spalte A wird postiv und Spalte B wird negativ gestellt. In Spalte C wird das Ergebnis analog zur Formel von Summe gebildet.

Das nachstehende Beispiel verdeutlicht Dir die Funktionsweise.
Beispiel: In A8 = 500 und in B8 = 250
Formel: " =SUMME(A8:-B8) " ergibt 250

Ich hoffe, ich konnte Dir hiermit helfen.

Gruß
Joachim

Antwort 14 von heiko84

lol....danke du naturschöner mann :o)

nur der befehl ist mir im einzelnen nich ganz verständlich:
lastRow = Range("C65536").End(xlUp).Offset(1, 0).Row

Range("C65536"). heißt die gesamte spalte (von zeile1 bis 65536)??
End(xlUp). heißt eine zeile nach oben verschieben?
offset(1,0).row heißt.....?

männer brauchen ja auch keinen schönheitsschlaf...wir altern nicht....wir werden nur reifer (so wie guter wein) :o)

heiko

Antwort 15 von coros

Hallo Heiko,

Offset(1,0).Row bedeutet, dass auf das Ergebnis der End-Eigenschaft, die Zeilennummerin der gleichen Spalte eine Zeile tiefer ermittelt wird. Im gesamten heist dass, das die Anweisung

lastRow = Range("C65536").End(xlUp).Offset(1, 0).Row


die erste leeren Zeile in Spalte C ermittelt. Dieser Wert wird in die Variable "lastRow" geschrieben.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 16 von achim_13086

Hallo Heiko,

war gerade dabei, meine Erläuterng für den Befehl LastRow zu formulieren. Coros ist meinem Vorhaben zuvor gekommen.

Zu Offset(1,0) nur soviel: Deine Vermutung, dass verschoben werden soll ist richtig.
Die 1 bedeutet einen Schritt nach unten und die Null besagt, dass die Spalte C bleibt.
Also heißt Offset81,09 nichts anderes, alsin der Spalte C die Schreibmarke (Cursor9 eine Zeile tiefer zu setzen.
Du kannst die Option auch so lesen:
Offset(Zeilenanzahl +1, Spalte C =Spalte C)

Ich hoffe, der zweite Teil deiner Frage ist damit auch beantwortet.

Gruß
Joachim

P.S.: Stimmt der Grundstock nicht, kann ein Wein auch zum Essig werden.

Antwort 17 von heiko84

ok, dann bedanke ich mich nochmal, bei dem früh-aufstehenden oliver und dem naturschönen achim......

falls ich noch ne frage habe, melde ich mich einfach..

vielen dank und schönes wochenende noch!!!

heiko

Antwort 18 von heiko84

oh man, oliver und achim...
es ist mir zwar unangenehm, aber ich muss schon wieder auf eure hilfe zurückgreifen und dabei müsste das makro eigentlich einfach sein...

ich benötige den makrobefehl für das drucken eines zellenbereichs.....
im genauen: von spalte a bis f und von zeile 1 bis zur letzten zeile (also lastrow + die endsaldoausgabe)
button hab ich schon eingefügt und verlinkt, aber mit dem zellbereich und den genauen druckbefehl hab ich meine probleme

danke
heiko

Antwort 19 von coros

Hallo Heiko,

mit der Zeile

Range(Cells(1, 1), Cells(ActiveSheet.UsedRange.Rows.Count, 6)).PrintOut


wird Dir der Bereich A1:F letzte Zeile des gesamten Dokument auf dem Standarddrucker ausgedruckt.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 20 von heiko84

danke!!

Antwort 21 von heiko84

hey, ich bin´s nochmal.....

da hat sich leider ein neuer fehler aufgetan:
http://www.uploadagent.de/files/1163444422/yeahkassenbuch.xls

kann man das problem nicht mit der von mir beschriebenen zählschleife lösen??? (antwort6)

danke im voraus
heiko

Antwort 22 von coros

Hallo Heiko,

und was soll das für ein Fehler sein? Du müsstest schon mal schreiben, was sich für ein Fehler aufgetan hat. Hellsehen ist hier nicht so unsere Stärke. Die Glaskugel hat gerade meine Frau in Beschlag und Karten legen liegt mir nicht so.

Wenn es darum geht, dass das Endsaldo nicht in die erste freie Zeile nach den Ein- und Ausgaben eingefügt wird, dann lösche die Formel aus Zelle C16, dann funktioniert das.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 23 von heiko84

ahhhh
danke für den tipp, hab den fehler gefunden
und noch schönen abend und schönen gruß an die frau mit der glaskugel :0)

daaaaaaaaaaanke bye
heiko