Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1272to1276
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

Code ergänzen/erweitern

Code ergänzen/erweitern
Thomas
Hallo Excelfreunde,
ich würde gern mein Abrechnungsprogramm für mehrere Wohnungen erweitern. Bisher hab ich die Eingabe
der Abrechnungszahlen in die Tabelle "Liste" wo alle Wohnungen und Abrechnungspositionen gelistet ist eingetragen was immer sehr viel zu Scrollen ist. Um das zu umgehen dachte ich warum nutze ich nicht mein Abrechnungsformular gleichzeitig auch als Eingabemaske.
Wenn der CommandButton3 zum ToggelButton umwandel wird dann kann man Abrechnungen erstellen oder Zahlen zurück in die Liste schreiben.
'*********************************
' Abrechnung erstellen '
'*********************************

Private Sub CommandButton3_Click()
Application.EnableEvents = False
Range("B9:E37").ClearContents
Range("F9:G20").ClearContents
Range("I9:J21").ClearContents
Cells(13, 12).ClearContents
If Range("L8") > 0 And Range("L9")  "" Then
ReadValues
Read_NK_Miete
Fusszeile
Kopieren
End If
Application.EnableEvents = True
End Sub

Sub ReadValues()
Dim Jahr As Long, Bereich As String
Dim lngRow As Long, lngspalte As Long, pubLngCol As Variant, pubLngRow As Variant
On Error Resume Next
Application.ScreenUpdating = False
Jahr = Range("L8").Value
Bereich = Range("L2").Value
'Spalte mit Jahr in Zeile 3 von Blatt "Sheet2" suchen
With Sheet2
pubLngCol = Application.WorksheetFunction.Match(Jahr, .Rows(3), 0)
'Zeile unterhalb der Zeile mit dem Bereichsnamen ermitteln
'pubLngRow = 4 'Zeile für 1. Bereich
'Zeile mit Bereich suchen
pubLngRow = Application.WorksheetFunction.Match(Bereich, .Columns(2), 0) + 1
'oder Zeile mit Bereich fest vorgeben
Select Case Bereich
Case "Whg1": pubLngRow = 4
Case "Whg2": pubLngRow = 58
Case "Whg3": pubLngRow = 112
Case "Whg4": pubLngRow = 166
Case "Whg5": pubLngRow = 223
Case Else
MsgBox "Bereich """ & Bereich & """ fehlt als Case"
GoTo Beenden
End Select
Select Case Bereich
Case "Whg1", "Whg2", "Whg3"
Cells(9, 2) = "Wohngebäude"
Cells(10, 2) = "Haus- und Grundhaftpficht"
Cells(11, 2) = "Gewässerschaden"
Cells(12, 2) = "Grundstücksteuer"
Cells(9, 3) = .Cells(pubLngRow, pubLngCol) '1
Cells(9, 5) = .Cells(pubLngRow + 1, pubLngCol) '1,1
Cells(10, 3) = .Cells(pubLngRow + 2, pubLngCol) '2
Cells(10, 5) = .Cells(pubLngRow + 3, pubLngCol) '2,1
Cells(11, 3) = .Cells(pubLngRow + 4, pubLngCol) '3
Cells(11, 5) = .Cells(pubLngRow + 5, pubLngCol) '3,1
Cells(12, 3) = .Cells(pubLngRow + 6, pubLngCol) '4
Cells(12, 5) = .Cells(pubLngRow + 7, pubLngCol) '4,1
End Select
End With
Beenden:
Err.Clear
Application.ScreenUpdating = True
End Sub
Dies ist nur ein Teil des Cods mit dem ich die Abrechnungen der Wohnungen erstelle.
Nun zu meinem Anliegen da ich kein VBA-Profi bin brauch ich Starthilfe beim ToggelButton. Wenn der ToggelButton auf Abrechung steht dann soll mein Code wie oben steht ablaufen und wenn er auf Dateneingabe steht würde ich je nach dem was in L8=Jahr und L2=Bereich/Whg steht (die Zahlen sehen) oder Eintragen können und zurück schreiben.
Ich benötige nur mal die ersten paar Zeilen die restliche schreibarbeit mach ich selbst.
Danke schon im voraus.
Gruß Thomas aus Stuttgart

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Code ergänzen/erweitern
20.07.2012 19:27:15
Hajo_Zi
if ToggleButton1=True then
Ich baue keine Datei nach, die Zeit hat schon jemand investiert. Ein Link zur Datei wäre nicht schlecht.

AW: Code ergänzen/erweitern
20.07.2012 20:04:44
Thomas
Hallo Hajo,
ich hab festgestellt das der ToggelButton die falsche Wahl ist und ein OptionsButton vielleicht besser. Der Toggel reagiert bei jedem Klick will ich aber eine Abrechnung nach der anderen erstellen muss ich ja erst wieder zwei mal Klicken das ich die nächste erstellen kann.
Wenn ich ein Options-, UmschaltButton nehme und wenn der gedrückt ist dann soll Button3 aktiv sein und wenn nicht dann Button4 für die Datenübertragung.
Ich muss die Mappe noch zum Hochladen herrichten dauert kurz.
Gruß Thomas aus Stuttgart
Anzeige
AW: Code ergänzen/erweitern
20.07.2012 20:52:01
Thomas
Hallo,
nun die Datei.
https://www.herber.de/bbs/user/81103.xlsm
Also das erstellen der Anrechnungen funktoniert super und ich will das Tab Rechnung nun auch zur Dateneingabe für das Tab Liste verwenden und der Toggel hat sich nicht als der richtige für die Option was ich nun machen will raus gestellt. Was aber gehen könnte das ich dann dennoch mit dem Toggel arbeite aber der dann denjenigen CommandButton frei gibt. So wie If ToggelButton=True Then ComandButton "Abrechnung" mein Code sonst CommandButton "Daten übertragen" Code zum Daten Übertragen.
Die Spalte B soll beim übertragen sich nach wie vor auf die Zelle L2 sich auswirken und in Spalte C würd ich die neuen Zahlen eintragen und sollen dann mit dem Button Daten übertragen in die Liste der jeweiligen Bereiche/Whgs eingetragen werden zu der Spalte wo die gleiche Jahreszahl steht wie in Rechnung L8.
Also so wie die Daten in das Tab Rechnung eingelesen wird so will ich neue Daten zurück in Tab Liste schreiben.
Hoffe ich habe es nicht zu umständlich erklärt.
Gruß Thomas aus Stuttgart
Anzeige
AW: Code ergänzen/erweitern
21.07.2012 10:00:22
fcs
Hallo Thomas,
das VBA-Projekt in deiner Datei ist passwort-geschützt.
Da kann man dir schlecht helfen.
Ansonsten:
Wenn du mit Optionsschaltflächen arbeitest, dann brauchst du mindestens 2, damit du auch umschalten kannst. Alternativ recht ggf. auch eine Checkbox um zwischen 2 Einstellungen umschalten kannst.
Extra Toggle-Buttons, um die Eigenschaft "Enabled" der Schaltflächen umzuschalten, brauchst du nicht. Das kannst du auch direkt über die Änderung der OptionButtons/der Checkbox steuern.
"Die Spalte B soll beim übertragen sich nach wie vor auf die Zelle L2 sich auswirken..."
verstehe ich nicht. L2 wird doch durch Auswahl in L9 festgelegt, Spalte B hat damit nichts zu tun.
Gruß
Franz
Anzeige
AW: Code ergänzen/erweitern
21.07.2012 10:09:42
Hajo_Zi
Hallo Thomas,
ein OptionButton mußt Du erst abwählen, bevor wieder eine Aktion ausgelöst werden kann. Also vor End Sub wieder auf False setzen.
Gruß Hajo
AW: Code ergänzen/erweitern
21.07.2012 10:59:27
Thomas
Einen schönen guten Morgen euch beiden,
Franz ich will für alle 5 Wohnungen das Tab Rechnung zur eingabe verwenden und über L8 wähl ich das Jahr aus und mit L9 was sich mit L2 zusammen hängt die Wohnung aus. Da sich es um 3 Objekte handelt sind auch die Nebenkostenpositionen verschieden in Anzahl und Worten ud daher muss ich die Wohnung anwählen für ie ich die neuen Positionen zurück screiben möchte.
Da Hajo schreibt ich muss den OptionButton wieder zurück setzen und dann den zweiten dann setzen um in den anderen Modus umzuschalten wäre der Toggel doch die richtige Wahl wenn sich dieser auf den Button "Abrechnung erstellen" aktivieren bzw deaktiviert wird ja nach dem was beim Toggel gesetzt ist. Ich mach da mal ein Beispiel in die nun offene Mappe.
https://www.herber.de/bbs/user/81110.xlsm
Ich will nicht das eine ausschalten oder zurück setzen müssen um dann in den anderen Modus umzuschalten zu können.
Grüße Thomas T aus Stuttgart
Anzeige
AW: hier ein Beispiel ...
21.07.2012 11:54:27
Thomas
Hallo Matthias,
dies ist eine möglichkeit wie es aussehen könnte Danke.
Für Franz und Hajo ich habe den CommandButton "Daten übertragen" wie folgt mal belegt so das er meine Abrechnungspositionen je Objekt aufruft aber wie die Daten dann aus der Spalte B in das Tab Liste zu den jeweiligen Objekt zum zuordnen ist bin ich übervordert.
'*********************************
' Daten übertragen '
'*********************************
Private Sub CommandButton1_Click()
Application.EnableEvents = False
Range("B9:E37").ClearContents
If Range("L8") > 0 And Range("L9")  "" Then
Datenübertragen
End If
Application.EnableEvents = True
End Sub

Sub Datenübertragen()
Dim Jahr As Long, Bereich As String
Dim lngRow As Long, lngspalte As Long, pubLngCol As Variant, pubLngRow As Variant
On Error Resume Next
Application.ScreenUpdating = False
Jahr = Range("L8").Value
Bereich = Range("L2").Value
'Spalte mit Jahr in Zeile 3 von Blatt "Sheet2" suchen
With Sheet2
pubLngCol = Application.WorksheetFunction.Match(Jahr, .Rows(3), 0)
'Zeile unterhalb der Zeile mit dem Bereichsnamen ermitteln
'pubLngRow = 4 'Zeile für 1. Bereich
'Zeile mit Bereich suchen
pubLngRow = Application.WorksheetFunction.Match(Bereich, .Columns(2), 0) + 1
'oder Zeile mit Bereich fest vorgeben
Select Case Bereich
Case "Whg1": pubLngRow = 4
Case "Whg2": pubLngRow = 58
Case "Whg3": pubLngRow = 112
Case "Pfarrtor": pubLngRow = 166
Case "Frio": pubLngRow = 223
Case Else
MsgBox "Bereich """ & Bereich & """ fehlt als Case"
GoTo Beenden
End Select
Select Case Bereich
Case "Whg1", "Whg2", "Whg3"
Cells(5, 2) = "Straße" 'Straße
Cells(6, 2) = "Ort" 'Ort
Cells(9, 2) = "Wohngebäude"
Cells(10, 2) = "Haus- und Grundhaftpficht"
Cells(11, 2) = "Gewässerschaden"
Cells(12, 2) = "Grundstücksteuer"
Cells(13, 2) = "Heizung/ Warmwasser Brunata"
Cells(14, 2) = "Wasser / Abwasser"
Cells(15, 2) = "Kaltmiete"
Cells(16, 2) = "Gebühren Abfallbeseitigung"
Cells(17, 2) = "Leerungen im Jahr"
Cells(18, 2) = "Garage"
Cells(19, 2) = "Kehrwoche"
Cells(20, 2) = "Sat-Anlage"
Cells(21, 2) = "Tüv Öltank"
Cells(13, 4) = ""
Case "Pfarrtor"
Cells(5, 2) = "Straße" 'Straße
Cells(6, 2) = "Ort" 'Ort
Cells(9, 2) = "Heizung lt. Brunata"
Cells(10, 2) = "Gebäudeversichung"
Cells(11, 2) = "GBV- Versicherung TG"
Cells(12, 2) = "Haus- und Hofbesorgung"
Cells(13, 2) = "Aufwand Tiefgarage"
Cells(14, 2) = "Müllgebühren"
Cells(15, 2) = "Müllgebühren für Leerungen"
Cells(16, 2) = "Hausmeister"
Cells(17, 2) = "Hausreinigung"
Cells(18, 2) = "Allgemeinstrom Hs.01"
Cells(19, 2) = "Pumphebewerk"
Cells(20, 2) = "Kabelgebühren"
Cells(21, 2) = "Kfz.- Versicherung"
Cells(22, 2) = "Wasser- Abwasser"
Cells(23, 2) = "Allgemeinstrom TG"
Cells(24, 2) = "Brandschutz & Wartung"
Cells(25, 2) = "Grundsteuer"
Cells(26, 2) = "Kaltmiete"
Cells(27, 2) = "Sonstige Betriebskosten"
Cells(28, 2) = ""
Cells(29, 2) = ""
Cells(30, 2) = ""
Case "Frio"
Cells(5, 2) = "Straße" 'Straße
Cells(6, 2) = "Ort" 'Ort
Cells(9, 2) = "Gebäudebrandversicherung"
Cells(10, 2) = "Hafpflichtversicherung mit Ölvers."
Cells(11, 2) = "Wohngebäudeversicherung"
Cells(12, 2) = "Glasversicherung"
Cells(13, 2) = "Kaminfeger"
Cells(14, 2) = "Heizung/warmwasser lt. Brunata"
Cells(15, 2) = "Gartenbetreuung"
Cells(16, 2) = "Gartenbedarf"
Cells(17, 2) = "Wasser Garten"
Cells(18, 2) = "Wasser/ Abwassergeb. In cbm"
Cells(19, 2) = "Gundgebühren / Abfallbeseitigung"
Cells(20, 2) = "Leerung / Abfallbeseitigung"
Cells(21, 2) = "Müllbetreueng"
Cells(22, 2) = "Allgemeinstrom"
Cells(23, 2) = "Treppenhaus Fensterreinigung"
Cells(24, 2) = "Prüfung/Aust. Feuerlöscher"
Cells(25, 2) = "Wartungsvertrag Rückstauklappe"
Cells(26, 2) = "Wartung Heizung"
Cells(27, 2) = "Wartungsvertrag Kaltwasserzähler"
Cells(28, 2) = "Einzug und Auszugspauschale"
Cells(29, 2) = "Rechnung Kraft"
Cells(30, 2) = "Rechnung Wild"
Cells(31, 2) = "Rechnung Jost"
Cells(32, 2) = "Sonstiges"
Cells(33, 2) = "Stellplatz"
Cells(34, 2) = "Miete"
Cells(35, 2) = "Grundsteuer"
Cells(36, 2) = "Gutschrift"
Cells(37, 2) = "Tüv Öltank"
Cells(39, 2) = ""
End Select
End With
Beenden:
Err.Clear
Application.ScreenUpdating = True
End Sub
Hoffe das ihr mir nun bei dem zurückschreiben der Daten noch helfen könnt.
Gruß Thomas T. aus Stuttgart
Anzeige
Toggle funzt mit den ComButton :))
21.07.2012 13:08:16
Thomas
So hab ich nun das Aus- bzw. Einschalten der Buttons gelöst bekommen nur mit versuchen.
Gleich mal auf die Schulter klopfen. Danke Matthias dein Beispiel hat mir sehr dabei geholfen.
Private Sub ToggleButton1_Click()
ActiveCell.Activate
With ToggleButton1
.Caption = "Ich will " & IIf(.Value = True, "Daten übertragen", "Abrechnungen erstellen")
.BackColor = IIf(.Value = True, &HFF&, &HFF00&)
If .Value = True Then
CommandButton3.Enabled = ToggleButton1.Value = False
CommandButton1.Enabled = ToggleButton1.Value
Else
CommandButton1.Enabled = ToggleButton1.Value
CommandButton3.Enabled = ToggleButton1.Value = False
End If
End With
End Sub
Auf zur letzten Baustelle! Wer hilft?
Gruß Thomas T. aus Stuttgart
Anzeige
AW: Toggle funzt mit den ComButton :))
21.07.2012 17:25:09
fcs
Hallo Thomas,
tut mir leid, aber das ist mir in den Makros und im Blatt Liste zu unübersichtlich.
Wenn ich das richtig gelesen hab, dann müssen beim Übertragen der Eingabewerte bei den Objekten, in denen mehrere Wohnungen abgerechnet/umgelegt werden, einige Eingabewerte (Gesamtwerte der Position) bei der 1. Wohnung des Objekts eingetragen werden und einige Werte wie PersonzahlMüll oder auch Heizung/Warmwasserabrechnung bei der jeweiligen Wohnung.
Damit du Korrekturen der Eingaben machen kannst müssen im Übertragen-modus bei Auswahl einer Wohnung ja immer erst die Daten in die Spalten B und C, evtl auch D eingelesen werden. Dazu am Besten ein Ereignismakro für die Zelle L9 einrichten, ggf. auch L8. Damit nicht versehentlich die AltDaten überschrieben werden muss auch noch irgendwo das Jahr geprüft werden.
Für das Einlesen könnte man das vorhandene ReadValues-Makro verwenden oder eine angepasste Kopie.
Das Eintragen-Makro wird durch die oben beschrieben Fakten komplizierter .
Als Grundgerüst kannst du eine Kopie des ReadValues-Makro verwenden.
Als erstes löscht du dort alle Zeilen, die Werte in die Daten in die Spalten B(2) und E(5) des Rechnungsblattes schreiben. In diesen Spalten stehen im Blatt "Liste" ja Vorgabetexte oder Formeln. Bei den anderen Code-Zeilen muss du prüfen, ob sich im Blatt "Liste" um Zellen mit Vorgabetexten/Formeln handelt (dann Zeilen löschen) oder um Eingabezellen (dann nicht löschen).
Im nächsten Schritt muss du dann bei allen Objekten mit mehreren Wohneinheiten die codezeilen in 2 Blöcke teilen - Block1 = alle Zeilen mit Werten, die bei der 1. Wohnung eingetragen werden müssen, Block2 = alle Zeilen, die bei der jeweiligen Wohnung eingetragen werden müssen.
im Block1 muss du dann die Variable "pubLngRow" durch einen andere Namen ersetzen z.B. "lngRowStart" vor den Zeilen des Block1 fügst du eine Zeile ein in der der Wert auf die Zeile der 1. Wohnung gesetzt wird. z.B. lngRowStart = 4 für "Whg1"
Zum Schluss muss du in allen Zeilen, die Werte nach Rechnung eingelesen haben die Ausdrucke links und rechts vom Gleichheitszeichen vertaschen, damit der Eingabewert aus dem Blatt "Rechnung" in die "Liste" übertragen wird.
So das war jetzt erst einmal genug Text für dich zum Verdauen. Da war die Sache mit dem Toggle-Button das keinste Problem, das du lösen musstest.
Da solltest du dir ggf. die Eingabe der Daten im Blatt "Liste" ergonomischer gestalten.
1. Alle Zeilen, die nur Formeln oder für die Eingabe unwichtige Inhalte enthalten, ausblenden.
2. Eine Combox zur Auswahl der Wohnungen, die dann direkt das Scrollen zur 1. Zeile der gewählten Wohnung ausführt, wenn eine Wohnung gewählt wird.
Gruß
Franz
Anzeige
AW: Toggle funzt mit den ComButton :))
21.07.2012 18:15:38
Thomas
Hallo Franz,
für dich mag es unübersichtlich sein aber für einen Anfänger ist eine längere Schreibweise besser halt mehr Arbeit aber es geht.
Das Problem der Zuordnung zu den Objekten hab ich mit diesem Code was ich auf meine Mappe angepasst bekommen habe gelöst.
Option Explicit
Sub heiner()
Dim Q_x&, Z_X&, wksQ As Worksheet, wksZ As Worksheet
Dim MyRow&, MyCol&, x&
Dim Artikel$, Menge&, Woche&
Set wksQ = Tabelle2
Set wksZ = Tabelle1
For Q_x = 2 To 9
If wksQ.Cells(Q_x, 4) = "x" Then
Artikel = wksQ.Cells(Q_x, 1)
Menge = wksQ.Cells(Q_x, 2)
Woche = wksQ.Cells(Q_x, 3)
For Z_X = 3 To 17 'Artikel suchen
If wksZ.Cells(Z_X, 1) = Artikel Then
MyRow = Z_X 'Zeile merken
For x = 2 To 11 'Woche suchen
If wksZ.Cells(2, x) = Woche Then
MyCol = x
wksZ.Cells(MyRow, MyCol) = Menge
End If
Next
End If
Next
End If
Next
End Sub
Ich Sammel durch das fast tägliche mitlesen im Forum verschiedene Beispiele so auch diesen Code.
Beim ersten Übertrag sind weitere Anpassungen nötig gewesen da doch ein paar Positionen auch in dem einen oder anderen Mietobjekt vor gekommen und somit Zahlen im falschen Bereich aufgetaucht was ich aber nun auch hin bekommen habe. Ich bin froh das ich auch wie zuanfang das mit dem Toggle hin bekommen habe.
Excel ist wie Schiffe versenken und durch versuchen und testen immer und immer wieder bekommt man doch noch einiges selbst Geschäft. Aber es braucht doch hin und wieder Hilfe und wenn es nur mit Tipps sind die einem wieder einen Schritt weiter bringen.
Ich werde mir deinen Vorschlag auf jeden fall vor nehmen um zu schauen was dann auch schöner ausschaut.
Ich danke allen die mir geholfen haben und wünsche ein schönes Wochenende.
Gruß Tomas T. aus Stuttgart.
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige