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

Ist das per VBA realisierbar

Ist das per VBA realisierbar
16.01.2022 02:41:09
Chris
Guten Morgen zusammen,
ich habe ein Tabellenblatt mit 1200 Zahlen. Diese werden durch diverse Kriterien auf Gültigkeit geprüft. Damit ich jetzt nicht jedesmal eine Zahl löschen und neu eintragen muss, habe ich mir folgendes einfallen lassen:
auf dem Tabellenblatt befindet sich ein CommandButton, mit dem ich ein UserForm aufrufe. In dieser UserForm befindet sich ein Spinnbutton und ein CommandButton. Der SpinButton soll nun folgendes machen: Die Zahlen stehen in F13-F16, F18-F21 usw. bis F163-F166. Wenn nun Zelle F13 aktiv ist und ich auf SpinDown klicke soll Zelle F18 aktiv werden usw. bis unten. Mit dem SpinUp umgekehrt nach oben. Das darf aber nur passieren, wenn eine der Zellen F13,F18 -F166 aktiv ist, was heissen soll, das bei F15,F20 nix passieren soll. Entsprechendes soll mit den Spalten M, T Aa usw. geschehen
Mit dem CommandButton möchte ich die Zahlen in jedem Block, der aktiv ist mit jedem Klick verschieben. Also wenn F13 aktiv ist und ich den Button klicke, dann soll der Wert aus F13 nach F14,F14 nach F15,F15 nach F16 und F16 nach F13 verschoben werden. Entsprechendes soll mit den Spalten M, T, AA usw. geschehen, jenachdem, welche Zelle grad aktiv ist.
Nun meine Frage: Lässt sich dies mit VBA bewerkstelligen?
Hab eine Beispielmappe mal hochgeladen: https://www.herber.de/bbs/user/150408.xls
Gruß Chris
P.S die Zahlen bleiben genau an diesen Positionen

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ist das per VBA realisierbar
16.01.2022 10:19:46
Yal
Hallo Chris,
Ja, kann man. Ich würde es aber nicht so kompliziert machen ( bin nicht am Rechner und kann daher dein Beispiel nicht öffnen).
Mit dem Makro Rekorder hast Du vor der Aufnahme, die Möglichkeit eine Buchstabe hinzuweisen.
Mache daraus Strg+d für down, Strg+u für up, Strg+ t für Tausch.
Dann nimmt die Makro auf und schaue dir den Code an.
Im erster Fall muss Du immer
ActiveCell.Offset(5,0).Select
machen (Down) oder Offset(-5,0) für up.
Zweites ist auch einfach und ähnlich. Ich lasse es dich aber grübeln.
VG
Yal
AW: Ist das per VBA realisierbar
16.01.2022 11:13:21
volti
Hallo Chris,
falls das Grübeln noch nicht zum Erfolg geführt haben sollte, hier eine Idee zu Deinem Anliegen:
Code:

[Cc][+][-]

Private Sub SpinButton1_Change() If GetFeld = True Then With ActiveCell If SpinButton1.Value = 0 And .Row < 163 Then .Offset(5, 0).Select ElseIf SpinButton1.Value = 2 And .Row > 13 Then .Offset(-5, 0).Select End If End With SpinButton1.Value = 1 End If End Sub Function GetFeld() As Boolean Dim iZeile As Integer, iSpalte As Integer ' Feststellen, ob Feld aktiv ist For iZeile = 13 To 163 Step 5 For iSpalte = 6 To 104 Step 7 If ActiveCell.Address = Cells(iZeile, iSpalte).Address Then GetFeld = True Exit Function End If Next iSpalte Next iZeile End Function Private Sub UserForm_Activate() SpinButton1.Value = 1 End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Ist das per VBA realisierbar
16.01.2022 11:58:22
Chris
Guten Morgen Karl-Heinz,
der erste Teil von dir gefällt mir viel besser, als wie ich es mittlerweile gelöst habe:

Private Sub SpinButton1_Up()
ActiveCell.Offset(-5,0).Select
End Sub
Private Sub SpinButton1_Down()
ActiveCell.Offset(-5,0).Select
End Sub
Jetzt habe ich noch 3 Fragen:
1. Wozu brauche ich die beiden anderen Teile?(zum besseren Verständnis)
2. gehören alle 3 Teile in denselben Code?
3. Ist es in diesem Fall normal, dass ich - während die UserForm offen ist, per Maus keine Zelle einer anderen Spalte aktivieren kann?
Gruß Chris
Anzeige
AW: Ist das per VBA realisierbar
16.01.2022 14:21:18
volti
Hallo Chris,
da ich hier den Value des SpinButton abfrage und 2 für "Rauf" und 0 für "Runter" nehme, muss der Grundvalue also 1 sein.
Dieses wird bei der Sub UserForm_Activate erstmals gesetzt, denn der SpinButton-Wert ist ja eigentlich 0.
Die GetFeld-Funktion ermittelt, ob eines der gewünschten Felder aktiv ist und gibt dann "Wahr" zurück, denn Du wolltest ja nicht immer rauf/runter zählen.
Der gesamte Code gehört in das Userform-Modul.
Und sorry, hatte vergessen dass Du die Userform "modal"aufrufen musst, wenn Du bei offener UF in den Felder rumspringen möchtest.
Also dieser Aufruf hier:


Private Sub CommandButton1_Click()
UserForm1.Show modal
End Sub
Gruß
Karl-Heinz
Anzeige
AW: Ist das per VBA realisierbar
16.01.2022 14:59:32
Chris
Hallo Karl-Heinz,
wie geil ist das denn? Genauso habe ich mir das vorgestellt. Vielen lieben Dank. Hast du denn eventuell auch ne Idee für den Command-Button? Ich finde leider keine Beispiele, die ich gebrauchen könnte.
Gruß Chris
AW: Ist das per VBA realisierbar
16.01.2022 15:07:33
Guesa
Hallo Chris
In Bezug auf die Buttonbelegung hatte ich mir mal was ähnliches geschrieben, funktioniert mit Umwegen, vielleicht meldet sich Volti nochmal
der kann das bestimmt besser und kürzer. Naja schau mal rein, ist immer hin ein Ansatz.
Gruß, Guesa
https://www.herber.de/bbs/user/150418.xlsm
Anzeige
AW: Ist das per VBA realisierbar
16.01.2022 15:51:56
Chris
Hey Guesa,
mal abgesehen davon, dass der Code bei mir gelegentlich ruckelt und das UserForm bei jedem Klick an eine bestimmte Stelle springt(nachdem ich es mit der Maus verschoben habe), funktioniert deine Lösung doch genauso, wie ich mir das vorgestellt habe. Kann das daran liegen, weil ich deine Mappe zuerst ins XLS-Format umwandeln musste. Ich benutze immer noch Version 2003
Und dann hätte ich eine Frage: Im Gegensatz zu Karl-Heinz hast du hier

Private Sub UserForm_Activate()
SpinButton1.Value = 1
Worksheets("Tabelle1").Cells(13, 6).Activate
End Sub
noch die Zeile mit dem Worksheets eingefügt. Hat das einen besonderen Grund?
Gruß Chris
Anzeige
AW: Ist das per VBA realisierbar
16.01.2022 16:07:39
Guesa
Hallo Chris
Als ich deine Datei geöffnet habe muss man zuerst in eine von dir festgelegten Zellen klicken damit Voltis Code funktioniert.
Die Codezeile Worksheets("Tabelle1").Cells(13, 6).Activate sorgt eigentlich nur dafür, sobald du auf deinen Startbutton klickst das die Zelle F13 aktiviert wird
dann kannst du direkt mit dem Spinnbutton arbeiten, kannst du auch raus nehmen.
Keine Ahnung warum es ab und zu ruckelt, kann eigentlich auch nicht am umwandeln liegen. Füge mal am Anfang in deinem Startbutton diese Zeile hinzu
Application.ScreenUpdating = False, das verhindert das Bildschirmflackern. Vielleicht hilft es.
Gruß, Guesa
Anzeige
AW: Ist das per VBA realisierbar
16.01.2022 16:29:56
Guesa
So müsste der Startaufruf deiner Userform aussehen
Application.ScreenUpdating = False
UserForm1.Show vbModeless
AW: Ist das per VBA realisierbar
16.01.2022 18:13:44
volti
Hallo zusammen,
hier meine Idee zum zweiten Teil, Rotieren des Päckchens....
Das Aktivieren einer gültigen Zelle hatte ich absichtlich nicht gemacht, weil ich annahm, dass der User bewusst eine der gewünschten Zellen aktiviert und ansonsten nichts passieren soll.
@Guesa: "UserForm1.Show modal" bei einer bereits geöffneten Userform macht keinen Sinn.
Im gezeigten Code habe ich wegen der geringen Fallzahl auf eine Schleifenabarbeitung verzichtet. Die Daten werden i ein Array geschoben und von dort mit einem Rutsch ausgegeben. So erspart man sich Application.Screenupdating und es ruckelt trotzdem nix.
Hoffe, es passt so.
Code:

[Cc]

Sub CommandButton1_Click() Dim vArr(3) As Variant With ActiveCell vArr(0) = .Offset(3, 0) vArr(1) = .Offset(0, 0) vArr(2) = .Offset(1, 0) vArr(3) = .Offset(2, 0) .Resize(4, 1).Value = Application.Transpose(vArr) End With End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Ist das per VBA realisierbar
16.01.2022 18:51:19
volti
Noch eine kleine Korrektur,
auch hier sollte ja wohl nur Action passieren, wenn ein gewünschtes Feld aktiv ist...
Code:

[Cc][+][-]

Sub CommandButton1_Click() Dim vArr(3) As Variant If GetFeld() = True Then With ActiveCell vArr(0) = .Offset(3, 0) vArr(1) = .Offset(0, 0) vArr(2) = .Offset(1, 0) vArr(3) = .Offset(2, 0) .Resize(4, 1).Value = Application.Transpose(vArr) End With End If End Sub Private Sub SpinButton1_Change() If GetFeld() = True Then With ActiveCell If SpinButton1.Value = 0 And .Row < 163 Then .Offset(5, 0).Select ElseIf SpinButton1.Value = 2 And .Row > 13 Then .Offset(-5, 0).Select End If End With SpinButton1.Value = 1 End If End Sub Function GetFeld() As Boolean Dim iZeile As Integer, iSpalte As Integer ' Feststellen, ob Feld aktiv ist For iZeile = 13 To 163 Step 5 For iSpalte = 6 To 104 Step 7 If ActiveCell.Address = Cells(iZeile, iSpalte).Address Then GetFeld = True Exit Function End If Next iSpalte Next iZeile End Function Private Sub UserForm_Activate() SpinButton1.Value = 1 End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Ist das per VBA realisierbar
16.01.2022 19:31:05
Guesa
Hallo Volti
Hab ich doch erwähnt das du das besser hinkriegst :-)
Das mit der Userform hatte ich zu spät gesehen, da ich in der Datei in Eigenschaften der Userform dies bereits aktiviert hatte.
Gruß, Guesa
AW: Ist das per VBA realisierbar
16.01.2022 20:27:48
Chris
Hallo,
@Guesa "UserForm1.Show vbModeless" bzw. "UserForm1.Show Modal" war der Übeltäter, dass die UserForm imer wieder an eine Stelle sprang. Aber ansonsten läuft dein Code. Das Stocken zwischendurch merkt man kaum.
@Karl_Heinz Deine Lösung läuft flüssiger, zumindest bei mir.
Vielen lieben Dank an Euch beiden, damit habt ihr mir sehr viel Arbeit erspart. Jetzt muss ich nur noch raus finden, warum die UserForm an der Stelle startet, obwohl bei "StartUpPosition - Fenstermitte" steht.
Gruß Chris
Anzeige
AW: Ist das per VBA realisierbar
16.01.2022 22:00:57
Chris
Ups, da bin ich ausversehen auf den Absende-Button gekommen. Am Besten sieht man es in F48-F51. In G8 habe ich als Quersumme 12 eingegeben und dann in der Auswahlliste QS-Solo. Soweit funktioniert auch alles. Wenn ich nun aber die Zellen mit dem schönen neuen Tool tausche, dann wird nicht automatisch geprüft bzw. der Wert in G48-G51 aktualisiert.
Eigentlich hab ich gedacht, es würde automatisch verglichen bzw. aktualisiert werden.
Gruß Chris
AW: Ist das per VBA realisierbar
18.01.2022 08:50:40
volti
Hallo Chris,
falls noch nicht gelöst, solltest Du Deine Datei hier einstellen. Aus anderen Quellen läd sich meistens niemand was herunter.
Falls irgendwelche Formeln nach Veränderung durch das Makro nicht aktualisiert werden sollten, kannst Du eine Neuberechnung erzwingen:
ActiveSheet.Calculate
Gruß
Karl-Heinz

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige