VBA in Excel, eine Zahl aus der Tabelle entnehmen und im Makro als Pausenzeit verwenden

Emil35Emil

Cadet 1st Year
Registriert
Dez. 2018
Beiträge
13
Hallo,

hoffe ihr könnt mir helfen.

Ein Makro soll ein Excel-Tabellenblatt abfragen von Zellspalte A bis z.B. Zellspalte R und die Dinge, die dort aufgeführt sind abarbeiten. Hat er die Zellspalte R abgearbeitet, geht es eine Zeile tiefer wieder von Zellspalte A los und immer so weiter bis das Makro beendet ist. Die Zeilen werden als Schleife abgearbeitet wobei jede Spalte seine eigene Schleife besitzt, die somit in jeder Zeile nur einmal abgefragt wird.

In bestimmten Zellen aber immer in den gleichen Spalten sind Zahlen hinterlegt die als Pausenzeit dienen sollen. Da sich diese Pausenzeiten immer ändern und von Zeile zu Zeile unterschiedlich lang sind, kann ich sie im Makro weder als feste Pausenzeit festlegen und auch nicht als feste Zellpositionen.

Diese Spalten werden nur für die Pausenzeiten verwendet. Sie werden mit der Hand eingetragen als Zahl, es steht keine Formel dahinter. Kommt das Makro nun auf die Zelle mit der Pausenzeit, soll es diese Zahl einfach nur nehmen und als Pause in Minuten verwenden. Die Dinge, die er in der Zeit ausführen soll, sollen nicht eingefroren werden. Die Pausen liegen zwischen 1 – 30 min.

So möchte ich, dass das Makro diese Zahlen aus der Excel-Zelle ausliest und als Pausenzeit in Minuten verwendet.

Wie lauten diese Befehlszeilen?

Die Befehlszeilen müssen nicht erkennen ob sie jetzt in der richtigen Spalte sind. Sie sollen nur, wenn diese Schleife abgearbeitet wird, den Wert nehmen und so lange pausieren.

Da meine Kenntnisse in VBA sehr gering sind, wäre es sehr schön, die Befehlsabfolge so zu bekommen, dass ich sie gleich verwenden kann ohne anzupassen.

Besten Dank schon im Voraus für jegliche Mühen.
 
Hallo,

danke für die Antwort. Ich hatte nur mal gelesen, dass es Pausenbefehle gibt, die das Makro einfrieren. Wie ist das eigentlich zu verstehen.

Frage:
Das Makro kopiert aus einer Zelle einen Text, fügt ihn in ein Sprachprogramm ein und spielt es ab. Dann geht es in die nächste Zelle wo die Pausenzeit hinterlegt ist und pausiert dementsprechend so lange, bis der Text zu Ende gesprochen ist und geht dann in die nächste Zelle. Wird das Abspielen des Textes jetzt irgendwie verhindert oder beeinträchtigt? Wenn nicht, könnte ich auch diesen Befehl nehmen, wenn er denn 1 – 30 min. Pause unterstützt.

Wie würde da der Befehl für mein Anliegen lauten?
 
Hallo,

habe diese Pausenfunktion getestet und sie funktioniert als solches für meine Zwecke hervorragend. Habe das wohl mit dem einfrieren missverstanden.

Application.Wait (Now + TimeValue("0:00:10"))

Kann mir bitte jetzt jemand diesen Befehl so anpassen, dass das Makro die Zeit aus der Exceltabelle bezieht, so wie in meiner ersten Anfrage beschrieben?
 
Du musst nur den relevanten Zellinhalt (ganz Minuten?!) in den Zeitstring von TimeValue einbauen.
TimeValue("0:" & F6 & ":0")

An die Experten die das vorschlugen:
Angenommen es ist 5 vor Mitternacht und ich addiere da 10 Minuten - landen wir da irgendwie im Nirwana weil die Zeitfunktion keine 24 Uhr 5 können können könnte..?

CN8
 
Ist das so gemeint?

Application.Wait (Now + TimeValue("0:" & F6 & ":0"))

Da kommt bei mir ein Laufzeitfehler `13‘:
Typen unverträglich

Habe in Zelle F6 einmal mit nur Zahl und dann 00:01:00

getestet.

Und F6 steht das hier für eine Feste Bezugszelle?

Dass soll es doch nicht sein. Sondern auf der Zelle die gerade aktiviert ist, da soll der Wert entnommen werden.
 
Du wolltest ein Syntaxbesispiel. OK, ich habe mich geirrt weil ich eben eine andere Schreibweise benutze. F6 ist einfach eine willkürliche Zelle.
Angenommen in F6 steht der numerische Wert 1 - dann (zum Vergleich)
TimeValue("0:1:0") → "00:01:00"
TimeValue("0:" & Cells(6, 6) & ":0") → "00:01:00"
TimeValue("0:" & Range("F6") & ":0") → "00:01:00"

Die Ziffern können bequem durch Variablen mit denen gezählt wird ersetzt werden.

CN8
 
Vielen Dank für die Mühen.

F6 oder Cells(6, 6) sind doch aber feste Bezugszellen.
Durch die ganzen Angaben ist es mir aber gelungen, mich da durchzukämpfen und die Lösung zu finden.

Für die, die auch vor diesem Problem stehen, hier eine Lösung.
Nimm die Zahl aus einer unbestimmten, aktiven Zelle und nimm sie als Pausenzeit in Sekunden =
Application.Wait (Now + TimeValue("0:0:" & ActiveCell))

oder in Minuten
Application.Wait (Now + TimeValue("0:" & ActiveCell & ":0"))
 
Und wie verstehe ich das nun, dass da eine Reihen von unterchiedlichen Wartezeiten abgearbeitet werden soll - «die» ActiveCell müsste sich ja nach jeder Aktion ändern?!
Das einmalig mit der markieren Zelle laufen zu lassen erscheint mir nicht recht effektiv.

CN8
 
Habe hier mal ein Beispiel erstellt. Bei diesem Beispiel geht es natürlich nur um die Pausenzeiten, um zu sehen, dass jedes mal die Pausen von den entsprechenden Zeilen genommen werden. Diese Schleife hier läuft 5x ab. Damit es nicht so lange dauert, habe ich die Pausenformel auf Sekunden eingestellt.


Das Makro kopieren

Sub Fünf()
Dim x As Long
For x = 1 To 5

ActiveCell.FormulaR1C1 = "2"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "8"
ActiveCell.Offset(0, 1).Select

'Pause Secunden
Application.Wait (Now + TimeValue("0:0:" & ActiveCell))


ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "45"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "55"

ActiveCell.Offset(1, 0).Select
Cells(ActiveCell.Row, 1).Select

Next

End Sub

Exceltabelle so einrichten und dann Zelle A2 aktivieren.

Makro1.JPG



Makro starten.

Hoffe, dass erklärt alles.
 
Nein, das erklärt nichts weil ich nicht verstehe was immer du da überhaupt willst!

Du beginnst im «luftleeren Raum», ohne eine Ausgangszelle zu deklarieren. Oder weißt du 100% dass du vor Start des Makros genau die richtige Ausgangszelle markiert hast?
Dann schreibst du in diese Zelle eine 2, gehst eine Zelle nach rechts, schreibst eine 8, gehst 1 Zelle nach rechts, nun diese seltsame Pause, wieder 1 nach rechts, eine 44, eins nach rechts, eine 55, nun eien Zelle runter und in die erste Zelle dieser Zeile. Das wiederholt sich 5-mal.

Was ist der Sinn dieser Übung? Wenn ich von Zelle A1 eine leeren Blattes als Start ausgehe sähe ein üblicher Code z.B. so aus:
Code:
Sub test()
Dim I As Integer
Dim J As Integer
 For I = 1 To 5
  J = 0
  J = J + 1
  Cells(I, J) = 2
  J = J + 1
  Cells(I, J) = 5
  J = J + 1
  Rem Welch Ironie, die ActiveCell ist genau jetzt eine leere Zelle
  Application.Wait (Now + TimeValue("0:" & Cells(I, J) & ":0"))
  J = J + 1
  Cells(I, J) = 44
  J = J + 1
  Cells(I, J) = 55
 Next
End Sub

CN8

PS: was für ein Makrorecorder zeichnet so einen Code mit Select und Offset auf..?
 
Hallo cumulonimbus8

möchte Dir hier noch kurz antworten. Wie ich bei meinem Beispiel schon geschrieben, sollte es nur als Beispiel für die Pausenfunktion dienen. Das eigentliche Makro funktioniert völlig anders.

In einer Exceltabelle sind Angaben, die mit Hand eingetragen werden. Derzeit sind es ca. 150 Zeilen. Es kommen mit der Zeit immer mehr Einträge dazu. Bestehende Einträge werden über die Zeit auch geändert.

Diese Einträge soll das Makro abfragen und ausführen. Ist eine Zelle leer oder farbig, soll es diese überspringen. So kann ich Einträge behalten, die aber durch die Zellfarbe dann nicht ausgeführt werden.

Es wird einfach irgendeine Zelle in der Zeile angeklickt, wo das Makro beginnen soll. Dann wird es aktiviert. Es springt automatisch in Spalte A und beginnt die Angaben der einzelnen Zellen auszuführen. Um eine optimale Ausführung zu gewährleisten, sind in Ecxel unteranderem auch Werte für die Drittprogramme, um sie einzustellen. So kann in jeder Zeile die Einstellung festgelegt werden, die für diese Zeile optimal ist. Da die Zeiten der Ausführung in jeder Zeile unterschiedlich sind, brauchte ich also den Befehl, „nimm den Wert der nicht festgelegten Zelle in Excel als Pausenzeit“. Danach wird das Makro jeweils weiter ausgeführt.

Das Makro kann zu jeder Zeit gestoppt werden. Wird es nicht gestoppt, läuft es alle Zeilen ab und macht jeweils seine Pause. Das geht bis zur Endmarkierung und stoppt dann automatisch.

So ist das Makro für eine Zeile geschrieben und über die Schleife für alle Zeilen nutzbar ganz gleich, von welcher Zelle und Zeile ich es jeweils starte.

Auch das ist nur ein kurzer Umriss des Ganzen, erklärt aber nun besser, wofür die Pausenzeit gebraucht wird.
Ergänzung ()

Ist also soweit alles OK bei mir und brauche keine weitere Hilfe.
 
Zurück
Oben