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

Emil35Emil

Cadet 1st Year
Dabei seit
Dez. 2018
Beiträge
12
#1
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.
 

Emil35Emil

Cadet 1st Year
Ersteller dieses Themas
Dabei seit
Dez. 2018
Beiträge
12
#3
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?
 

Emil35Emil

Cadet 1st Year
Ersteller dieses Themas
Dabei seit
Dez. 2018
Beiträge
12
#5
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?
 
Dabei seit
Apr. 2012
Beiträge
8.023
#6
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
 

Emil35Emil

Cadet 1st Year
Ersteller dieses Themas
Dabei seit
Dez. 2018
Beiträge
12
#7
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.
 
Dabei seit
Apr. 2012
Beiträge
8.023
#8
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
 

Emil35Emil

Cadet 1st Year
Ersteller dieses Themas
Dabei seit
Dez. 2018
Beiträge
12
#9
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"))
 
Dabei seit
Apr. 2012
Beiträge
8.023
#10
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
 

Emil35Emil

Cadet 1st Year
Ersteller dieses Themas
Dabei seit
Dez. 2018
Beiträge
12
#11
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.
 
Dabei seit
Apr. 2012
Beiträge
8.023
#12
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..?
 
Top