Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1220to1224
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 kürzen durch Variablen

VBA kürzen durch Variablen
Der
Hallo,
mit Freude habe ich in den letzten Jahren unter anderem dieses Forum bei div. Excel-Problemen besucht und wurde meistens fündig.
Nun habe ich seit zwei Tagen das Netz durchforstet und vermutlich nur die falschen Suchbegriffe benutzt.
Ich habe einen VBA-Code, der mir aber zu lang wird. Ich vermute, dass man diesen durch Variablen stark verkürzen könnte und benötige nun doch einmal Hilfe. Ich habe immer versucht, nen Bogen um VBA zu machen, aber nun komm ich da wohl nicht mehr drumherum.
Bitte schaut Euch diesen Code einmal an. Für Tipps bin bin ich dankbar:

If Target.Address = "$B$22" Then Range("E22") = Range("E22") + "0,01"
If Target.Address = "$D$22" Then Range("E22") = Range("E22") - "0,01"
If Target.Address = "$C$22" Then Range("E22") = "0"
If Target.Address = "$B$22" Then Range("A22").Select
If Target.Address = "$D$22" Then Range("A22").Select
If Target.Address = "$C$22" Then Range("A22").Select
If Target.Address = "$G$22" Then Range("F22") = Range("F22") - "0,01"
If Target.Address = "$I$22" Then Range("F22") = Range("F22") + "0,01"
If Target.Address = "$H$22" Then Range("F22") = "0"
If Target.Address = "$G$22" Then Range("A22").Select
If Target.Address = "$H$22" Then Range("A22").Select
If Target.Address = "$I$22" Then Range("A22").Select
If Target.Address = "$B$23" Then Range("E23") = Range("E23") + "0,01"
If Target.Address = "$D$23" Then Range("E23") = Range("E23") - "0,01"
If Target.Address = "$C$23" Then Range("E23") = "0"
If Target.Address = "$B$23" Then Range("A23").Select
If Target.Address = "$D$23" Then Range("A23").Select
If Target.Address = "$C$23" Then Range("A23").Select
If Target.Address = "$G$23" Then Range("F23") = Range("F23") - "0,01"
If Target.Address = "$I$23" Then Range("F23") = Range("F23") + "0,01"
If Target.Address = "$H$23" Then Range("F23") = "0"
If Target.Address = "$G$23" Then Range("A23").Select
If Target.Address = "$H$23" Then Range("A23").Select
If Target.Address = "$I$23" Then Range("A23").Select
If Target.Address = "$B$25" Then Range("$E$2:$F$23") = "0"
Die beiden großen Abschnitte haben ich aktuell für ca. 20 Zeilen so geschrieben/kopiert und das funktioniert auch gut, aber man kann doch da etwas sparen, oder?
Die letzte Zeile nutze ich nur einmal.
Und eine weitere Frage: Wenn ich den Code für weitere Zeilen kopieren würde, könnte man die Zellbezüge automatisch setzen, oder bleibt mir da nur "Suchen/Ersetzen"?
Vielen Dank im voraus.
Der Frosch
AW: VBA kürzen durch Variablen
01.07.2011 13:10:06
Rudi
Hallo,
teste mal:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ERRHDL
Application.EnableEvents = False
Select Case Target.Row
Case 2 To 23
Select Case Target.Column
Case 2 To 4, 7 To 9
Select Case Target.Column
Case 2
Target.Offset(, 3) = Target.Offset(, 3) + 0.01
Case 3
Target.Offset(, 2) = 0
Case 4
Target.Offset(, 1) = Target.Offset(, 1) - 0.01
Case 7
Target.Offset(, -1) = Target.Offset(, -1) - 0.01
Case 8
Target.Offset(, -2) = 0
Case 9
Target.Offset(, -3) = Target.Offset(, -3) + 0.01
End Select
Cells(Target.Row, 1).Select
End Select
Case 25
If Target.Column = 2 Then Range("$E$2:$F$23") = 0
End Select
ERRHDL:
Application.EnableEvents = True
End Sub

Gruß
Rudi
Anzeige
AW: VBA kürzen durch Variablen
01.07.2011 13:21:08
Der
Grundsätzlich verstehe ich, was Du vorhast, aber es funktioniert nicht. Da ich aber dafür nicht weit genug bin, seh ich den "vermutlichen Fehler" nicht.
Die Nummer mit dem "x Zellen rechts/links davon" hatte ich mir auch schon überlegt.
was geht nicht? owT
01.07.2011 13:27:07
Der
AW: was geht nicht? owT
01.07.2011 13:35:32
Der
Das Klicken in eine der betr. Zellen bringt nicht das gewünschte Ergebnis.
Allerdings kann ich nichmal nachvollziehen, ob der Code überhaupt abläuft.
AW: was geht nicht? owT
01.07.2011 13:48:31
Rudi
Hallo,
Makro wirkt in Zeile 2 bis 23 und 25, Spalte B:D und G:I.
Allerdings kann ich nichmal nachvollziehen, ob der Code überhaupt abläuft.
Dann setz dir mal einen Haltepunkt. Auf erste Zeile gehen und F9 drücken. Dann eine Eingabe machen.
Gruß
Rudi
Anzeige
AW: was geht nicht? owT
01.07.2011 14:00:57
Der
Wo das Makro/der Code wirkt, das seh ich. Und Deine Anpassungen sind mir auch grundsätzlich klar.
Aber selbst mit einem Haltepunkt bekomme ich keine Reaktion.
Evtl. Fehlerquelle auf meiner Seite: Private Sub Worksheet_Change (oder SelectionChange?)
Und ich habs jetzt eben in Excel 2007 geöffnet, grundsätzlich kams aber aus einer älteren Version.
AW: was geht nicht? owT
01.07.2011 14:10:07
Rudi
Hallo,
ich wusste ja nicht, was du bezweckst.
Benenne die Sub mal um.
Private Sub Worksheet_SelectionChange
Gruß
Rudi
Anzeige
AW: was geht nicht? owT
01.07.2011 14:15:27
Der
Ja sorry, mein Fehler. Das hätte ich im Eingangsthread mitkopieren müssen.
Habs eben mal auf eigene Verantwortung schon vorher geändert und das funktioniert leider noch immer nicht.
SelectionChange geht. owT
01.07.2011 14:22:12
Rudi
SelectionChange geht nicht...
01.07.2011 14:30:11
Der
Habs geändert und probiert, dat läuft immer noch nicht wie gewünscht....
Code auch im Tabellenmodul?
01.07.2011 14:45:23
Rudi
AW: Code auch im Tabellenmodul?
01.07.2011 14:53:40
Der
Ich hab nun auch noch einmal den kompletten Code in ein Modul kopiert. Dort läufts auch nicht.
Vielleicht bin ich aber auch einfach schon "betriebsblind" inzwischen. Eigentlich hab ich auch noch zu wenig Ahnung, um richtig mitreden zu können.
Ich hatte ja vorhin die Datei auch angehängt, kannst ja mal reinschauen, wenn Du garnix anderes zu tun hast. ;-) Ansonsten geh ich das LuxusProblem am Wochenende nochmal an, schließlich läufts ja auch erstmal so.
Kanns denn Probleme geben mit so langen Codes?
Und die zweite Frage war ja, ob ich den Code so kopieren kann, dass mit die Zellbezüge automatisch angepasst werden.
Danke trotzdem für die geduldige Hilfe.
Der Frosch
Anzeige
AW: Code auch im Tabellenmodul?
01.07.2011 15:26:59
Der
Vielleicht hat ja später noch jemand ne Idee. Deshalb noch offen. Danke.
AW: Code auch im Tabellenmodul?
01.07.2011 16:03:02
Erich
Hi,
wenn du Rudis Tipp befolgt hättest, liefe es:
"Benenne die Sub mal um. - Private Sub Worksheet_SelectionChange"
Eine Ergänzung: Application.Round() da, wo ,01 addiert oder subtrahiert wird, um "Fast-Null-Ergebnisse" zu vermeiden.
Viel mehr habe ich nicht getan, der Rest war ein wenig Optik.
"Ich hab nun auch noch einmal den kompletten Code in ein Modul kopiert. Dort läufts auch nicht."
Das konnte nichts bringen. Worksheet_SelectionChange muss natürlich in den Code der Tabelle, die zu überwachen ist.
Das hier läuft problemlos: https://www.herber.de/bbs/user/75559.xls
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort - Schönes Wochenende!
Anzeige
AW: Code auch im Tabellenmodul?
01.07.2011 16:36:31
Der
Ja ne, also ich hab die ja umbenannt und bei mir hat es zumindest nicht funktioniert. Aber ich will einen Fehler meinerseits, der ja offensichtlich ist, nicht ausschließen. Und als es nach dem dritten Mal noch nicht funktioniert hat, hab ich das hier reingeschrieben.
Deine Änderung funktioniert auf jeden Fall ganz hervorragend, obwohl Dein Code so wie meiner aussieht. Ich schau mir das daheim nochmal in Ruhe an, was ich da versemmelt habe.
Momentan versteh ich leider noch nicht ganz die Unterschiede, wo ich die Codes hinterlegen muss. Ich sehe es zwar im VBA-Editor, aber ich verstehe es nicht. Das sollte ich wohl mal nachlesen.
Rudi Erich und Der Storch, vielen Dank erstmal für Eure Hilfe. Das spart mir zumindest ziemlich viel Code.
Gruss und schönes Wochenende
Der Frosch
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige