Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Makros für Button und Dropdown-Menu
#1
Hallo,

ich kenne nur ein paar Grundlagen von Excel.
Von VBA habe ich leider gar keine Ahnung.
Nun benötige ich allerdings 2-3 Makros und damit Hilfe.

Folgende Situation:

Ich möchte Übertragungsraten errechnen und speichern.
Dazu habe ich bereits zwei Zeilen in Tabelle1 (Titel "Rechner") angelegt.
In Zeile 2 befinden sich die Überschriften für die Spalten von A-J.
In Zeile 3 können dann die Daten eingetragen werden und die benötigten Ergebnisse werden durch Funktionen bereits errechnet. Die Zellen sind wie gewünscht formatiert.

In B2 habe ich ein Dropdown-Menu (Liste) eingefügt mit den Parametern "Abruf" und "Archivierung". Zusätzlich existiert ein Button "Speichern" in J4.

Zielstellung:

Der Benutzer soll bei Eingabe der Daten im Drop-Down (Zelle B3) auswählen müssen um welchen Typ es sich handelt, "Abruf" oder "Archivierung".
Bei Aktivierung des Buttons "Speichern" soll dann je nach Typ in Tabelle 2 (Abruf) oder Tabelle 3 (Archivierung) die ganze Eingabezeile (bzw. die Zellen A3 - J3), im selben Format und mit den selben Werten gespeichert werden.
Die Funktionen müssen dabei nicht übernommen werden.
Sollte keine Auswahl im Dropdown-Menu erfolgen, darf die Speicherfunktion nicht ausgeführt werden und ein Hinweis wird aktiviert.

Die kopierten Angaben (Zeilen/Zellen) sollen in Zeile 2 der jeweiligen Tabelle eingefügt werden. Zuvor dorthin kopierte Angaben sollen um eine Zeile nach unten verschoben werden.
Nach 5 Zeilen sollen zwei Zeilen leer gelassen werden (7 u. 8).

In Zeile 7 möchte ich einen Mittelwert der in Spalte J enthaltenen Werte ermitteln wobei leere Zellen ignoriert werden sollen. Zeile 8 bleibt als optischer Absatz leer.

Ab Zeile 9 soll die Verschiebung nach unten der (in Zeile 7 und 8 pausierten) älteren Datensätze fortgeführt werden. Die Liste soll insgesamt höchstens 50 Einträge erfassen.
Ab dem 51. Eintrag soll dann ganz unten der älteste Eintrag gelöscht werden.

Am Ende möchte ich noch die Eingabezellen in Tabelle 1 zurücksetzen.
Zellen zur Eingabe von Zahlenwerten haben bereits eine Funktion um bei leerem Inhalt mit 0 zu arbeiten ebenso wie Zellen mit Berechnungen welche bei 0-Angaben Fehler angeben würden.
Die Zelle B1 stellt mit =Heute das Datum bereit. Was beim DropDown Menu (B3) bei ClearContent passiert weiss ich nicht genau.

Zusätzlich möchte ich in Tabelle 1 eine Möglichkeit bieten, mit den errechneten Mittelwerten der letzten 5 Einträge aus Tabelle 2 (Abruf) oder Tabelle 3 (Archivierung),
eine voraussichtliche Dauer und Transferrate je Datengröße (GB) bereit zu stellen. Dies kann ich allerdings in zwei Abschnitten selbst mit Funktionen lösen.
Eleganter wäre es auch hierfür das Dropdown Menu zu benutzen, wofür allerdings ein weiteres Makro benötigt würde.

Zur Veranschaulichung habe ich die Arbeitsmappe ohne Makros, aber mit Beispieleinträgen erstellt und hochgeladen, siehe Anhang

.xlsm   UebertragungsrateVorschau.xlsm (Größe: 26,28 KB / Downloads: 6)

Unter diesen Links habe ich zu Teilabschnitten spezielle Codes gefunden:

http://www.herber.de/forum/archiv/1016to...pdown.html

Makro nicht ausführen bei keine Auswahl aus Dropdown, allerdings für Zelle B3 in etwa so, aber wo?:

Sub leer()
    If Cells(1, 1).Value = "" Then
        MsgBox "Bitte Typ-Auswahl treffen"
    End If
End sub

http://www.herber.de/forum/archiv/1004to...ieben.html
http://www.clever-excel-forum.de/Thread-...erschieben



Ich habe durchaus versucht mir die Codes selbst zu basteln, aber mir fehlt das Verständnis für die
Syntax um gefundene Codes für meine Bedürfnisse anzupassen und sinnvoll miteinander zu verknüpfen.

Für jegliche Form der Hilfestellung wäre ich dankbar.
Ich erwarte nicht, dass mir jemand alles komplett erstellt, geschweigedenn die ganze Arbeitsmappe.
Leider komme ich ab diesem Punkt eben nr nicht weiter.


Ich danke im Voraus für eure Zeit und Bemühungen,

Grüße

Bud
Antworten Top
#2
Hallo Bud,

Deine Frage sieht so bisschen nach einer Anfrage nach einem Dienstleister aus, erwartest Du ein Angebot? Smile
Erst mal zu dem konkreten Makro.
Cells(1, 1).Value steht für den Inhalt von Zella A1. Die erste Zahl steht hier für die Zeile, die zweite für die Spalte.

Das mit dem Kopieren und Einfügen könntest Du übrigens mit dem Makrorekorder aufzeichnen. Das hat dann vor allem mit Überlegungen zum Ablauf zu tun und weniger mit Excel. Das sollte im Gegensatz zu "unten anfügen" gleich mit dem aufgezeichneten Code funktionieren.

Vor dem Aufzeichnen solltest Du die selektierten Zellen und auch das aktive Blatt so beliebig auswählen, dass Du bei der Aufzeichnung die nötigen Zellen und das Blatt anklicken musst. Man kann nicht davon ausgehen, dass beim Start des Makros schon alles richtig selektiert ist …
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Bud
Antworten Top
#3
Hey,

als Dienstleistung war das wirklich nicht gedacht. Es war nur der Stand an dem ich nicht weiter kam.
Ich wusste bisher auch nichts darüber wie man Makros aufzeichnet.

Danke für den Tipp! Damit habe ich das Grundlegende hinbekommen.

Ich habe je ein Makro aufgezeichnet welche die Werte der ersten Tabelle entweder in die zweite oder eben dritte Tabelle kopiert und an oberster Stelle einfügt.
Die anderen Zeilen verschieben sich dann wie gewünscht. Die letzte  Zeile wird gelöscht.
Und zum Schluss die Eingabezeile in Tabelle 1 wieder zurückgesetzt.

So weit so gut.


Nun fehlt nur noch ein Makro.

Und zwar, dass je Auswahl im Dropdown-Menu eines der anderen beiden Makros die nun funktionieren, aktiviert werden.

Dazu habe ich folgenden Code gefunden und mit meinen Werten angepasst:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect (Target, Range ("B3")) Is Nothing Then
     Select Case Range("B3")
        Case "Abruf": Speichern1
        Case "Archivierung": Speichern2
     End Select
  End If
End Sub

Nur, so funktioniert das leider nicht.

Zum einen kann ich den Code so nicht einfach in ein neu erstelltes Makro einfügen.
Und der Eintrag 'Is Nothing then' lässt mich auch daran zweifeln dass dieser Code in der Form der Richtige ist.
Wenn 'Is Nothing then' bedeuet dass die Zelle leer ist, könnte ich ab diesem Strang einfügen dass keines der Cases ausgeführt wird und eine Message erscheint?
Tut mir leid, aber dies lässt sich glaube ich nicht mit einer Aufzeichnung lösen.
Auch für einen Tip wo ich ansetzen könnte, wäre sehr hilfreich.
Danke,
Bud
Antworten Top
#4
Hola,

zur Info....

http://www.herber.de/forum/messages/1646408.html

Gruß,
steve1da
[-] Folgende(r) 1 Nutzer sagt Danke an steve1da für diesen Beitrag:
  • Bud
Antworten Top
#5
Hallo Bud,

das Makro kommt erst mal in das Tabellenblattmodul, wo Du per Dropdown was auslösen willst. Wo anders passiert sonst nix oder zumindest nicht das gewünschte Sad . Wenn Du was änderst - WorkSheetChange - dann greift dieses Makro.

Die Zeile mit dem Nothing vergleicht, ob die Eingabezelle (Target) die gewünschte Zelle B3 ist. Bei Nothing wäre sie es nicht.

Freut mich übrigens, dass Du den Tipp aufgegriffen hast und so weit gekommen bist  :28:
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Bud
Antworten Top
#6
… habe gerade noch den Link zu Herber gesehen. Dort wird ja alles per Schleife nach unten gebracht … Ich wäre beim Aufzeichnen speziell des Verschiebens / Freimachen der Zeile 2 im Prinzip so vorgegangen:


Bereich Zeile 9 bis 49 kopieren
in Zeile 10 einfügen

Bereich Zeile 6 kopieren
in Zeile 9 einfügen

Bereich Zeile 2 bis 5 kopieren
in Zeile 3 einfügen


Muss natürlich nicht die ganze Zeile sein.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Bud
Antworten Top
#7
Hallo Bud,

ich glaube, das könnte Dir in Deinem VBA-Leben weiterhelfen
Mehr auf Nachfrage.


Angehängte Dateien
.pdf   VBA-Programmierung FernUni.pdf (Größe: 927 KB / Downloads: 8)
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
[-] Folgende(r) 1 Nutzer sagt Danke an Käpt'n Blaubär für diesen Beitrag:
  • Bud
Antworten Top
#8
In der Aufzeichnung habe ich es auch genau so gemacht, wie der Lösungsansatz von Dir, schauan. Mit Kopieren und Einfügen und das funktioniert auch super.

Wenn WorkSheetChange sich also auf das Dropdown Menu selbst bezieht,
habe ich mich wohl etwas doof ausgedrückt.

Im Prinzip soll das Speichern immer noch per Button aktiviert werden, nur dass eben aus der Zelle B3 wo sich das Dropdown Menu befindet ausgelesen werden soll welche Wahl getroffen worden ist.
Je nachdem soll dann eines der Copy/Paste Makros greifen. Damit eben in Tabelle 2 (Abrufen) oder Tabelle 3 (Archivierung) eingefügt wird.

So ist dieser Code wohl doch nicht der Richtige.

Vielen Dank für so viel Aufwand @PeterK, der mir ja praktisch den ganzen Code wenn auch in anderer Form geschrieben hat!
So viel Arbeit wollte ich eigentlich niemandem unentgeltlich auflasten.

Der noch fehlende Teil, den Du an den Anfang gestellt hast löst zwar den Teil welcher verhindert dass ein Makro ausgeführt wird bei fehlender Typauswahl,
allerdings bietet er mit Else nur eine Variante als Alternativfunktion:


Sub Speichern() ' Wird einem Button zugeordnet
If Trim(ActiveSheet.Range("B3")) = "" Then
MsgBox ("Bitte Auswahl in der Spalte TYP")
Exit Sub
Else
Call DoSpeichern(Trim(ActiveSheet.Range("B3")))
End If
End Sub

Könnte man denn nach Else noch Cases einfügen?


Zur Not kann ich das Dropdown Menu ja auch weglassen und jeweils eine Eingabezeile verwenden. Wäre eben nur eleganter alles in einer Zeile zu haben.
Also kein Problem, wenn euch die Geduld mit meiner Unfähigkeit ausgeht. ;)

Da mir PeterK bei herber geantwortet hat, ist denn damit auch der Hinweis auf Crossposting gemeint den ich erhalten habe?
Es sind ja unterschiedliche Webseiten, da dachte ich es wären auch unterschiedliche User und damit insgesamt mehr zu erreichen.
Entschuldigung wenn das missverstanden oder von mir missbraucht wurde.

Danke nochmal,
alles Gute,

Bud
Antworten Top
#9
Hallo Bud,

Zitat:Da mir PeterK bei herber geantwortet hat, ist denn damit auch der Hinweis auf Crossposting gemeint den ich erhalten habe?
Es sind ja unterschiedliche Webseiten, da dachte ich es wären auch unterschiedliche User und damit insgesamt mehr zu erreichen.
Entschuldigung wenn das missverstanden oder von mir missbraucht wurde.

Viele User, die sich die ersten Male in einem Forum aufhalten, machen sich keine Gedanken zum Thema CP. Deshalb nur zur Info:

http://www.clever-excel-forum.de/misc.php?action=help&hid=10
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#10
Hallo Günter,

das hatte ich per PN gesendet …

Zitat: ist denn damit auch der Hinweis auf Crossposting gemeint den ich erhalten habe?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste