Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1660to1664
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

Enfache Loop Schleife

Enfache Loop Schleife
12.12.2018 15:55:47
Anna
Hallo,
Ich habe eine Tabelle mit X zeilen in Spalte B und ein Code:
Sub Bsp()
zahl_a = Range("b1").Value
Call Clipboard.Clipboard(zahl_a)
Call MausLinks_Klick
SendKeys "^{v}", True
SendKeys "{DOWN}", True
End Sub
Ich möchte, dass der Code für alle Zellen in der Spalte B ausgeführt wird. Also bei mir fängt er nur bei "B1" an. Er soll alle Zeilen durchlaufen.

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Enfache Loop Schleife
12.12.2018 16:06:34
Maik
Hallo Anna,
For iZähler = 1 To iRowMax
zahl_A = Sheets("Registername").Cells(iZähler,1)
Erklärung: Cell(Zeile,Spalte)
iRow_Max = Sheets("Registername").Cells(1048576, 1).End(xlUp).Row
Maik
AW: Enfache Loop Schleife
12.12.2018 16:11:29
Anna
Hi, dein Code funktioniert so auch nicht :/
AW: Enfache Loop Schleife
12.12.2018 16:07:15
Daniel
Hi
alle Zellen in Spalte B?
hast du schon mal geschaut, wieviele das sind?
seit Excel 2007 c.a 1,04 Millionen.
nehmen wir nur mal alle Zellen, die zum genutzen Bereich gehören, sonst musst du etwas länger warten, bis das Makro durch ist:
Sub Bsp()
dim Zelle as Range
dim zahl_a
For each Zelle in Intersect(Columns(2), ActiveSheet.Usedrange))
zahl_a = Zelle.Value
Call Clipboard.Clipboard(zahl_a)
Call MausLinks_Klick
SendKeys "^{v}", True
SendKeys "{DOWN}", True
Next
End Sub
Gruß Daniel
Anzeige
AW: Enfache Loop Schleife
12.12.2018 16:10:51
Anna
Hallo Daniel, Natürlich meinte ich alle benutzen Zellen :)
Aber dein Code Funktioniert so nicht:
bei der Zeile "For each..."
wird es als fehlerhaft angezeigt.
AW: Enfache Loop Schleife
12.12.2018 16:19:42
Daniel
hi
ist nur ne klammer zu viel am Ende.
wie korrierst du eigentlich deine Tippfehler, wenn du selber programmierst?
oder schreibst du nur ab ohne selber mit zu denken?
Gruß Daniel
AW: Enfache Loop Schleife
12.12.2018 16:21:38
Anna
Das habe ich schon korrieigert gehabt, aber bei deinem Code kopiert er immer nur die letzte Zeile, also den Wert der letzten Zeile und das x mal
AW: Enfache Loop Schleife
12.12.2018 16:28:43
Daniel
Hmm
wenn du das schon korrigiert hattest, warum hast du das nicht gleich gesagt und diese Beschreibung schon bei deiner ersten Rückmeldung mit angegeben?
die Fehlerbeschreibung "funktioniert nicht" ist als Fehlermeldung ungefähr so hilfreich wie die Hilfestellung "dann machs anders"
Gruß Daniel
Anzeige
AW: Enfache Loop Schleife
12.12.2018 16:31:43
Anna
Ok mein Fehler also nochmal:
Bei deinem Code kommt ein Loop, aber nur die letzte Zeile wird Ausgeführt, da glaube ich "Zelle" sich auf die letzte Zeile bezieht und der Code nur die Zelle "Zelle" ins Clipboard nimmt und kopiert. Ich wollte gerne, dass es von der ersten zelle bis zur benutzen Zelle im Loop durchläuft. Also im Grunde soll im ersten Durchlauf b1 kopiert werden im zweiten durchlauf soll diesmal b2 kopiert werden, bis zum Schluss. Da habe ich noch Probleme. Ich hoffe du kannst mir dabei helfen. Sorry nochmal :/
AW: Enfache Loop Schleife
12.12.2018 16:38:45
Daniel
Hi
lass mal diesen Code laufen:
Sub Bsp()
dim Zelle as Range
dim zahl_a
For each Zelle in Intersect(Columns(2), ActiveSheet.Usedrange))
zahl_a = Zelle.Value
debug.Print Zelle.Address, zahl_a
Next
End Sub
dieser Code zeigt dir im Direktfenster an, über welche Zellen die Schleife läuft und welche Werte dann an das andere Makro übergeben werden.
da ich die beiden Makros, die du aufrufst, nicht kenne und das Problem und auch nicht weiß, was du mit dem Makro überhaupt errreichen willst, kann ich dir da jetzt auch nicht weiter helfen.
die Schleife sollte schon über alle Zellen laufen, aber was mit den Werten dann weiterhin passiert, weißt nur du.
Gruß Daniel
Anzeige
AW: Enfache Loop Schleife
12.12.2018 16:47:09
Anna
Hi, ich glaube hier liegt ein Missverständnis vor :)
also nochmal:
Sub Bsp()
zahl_a = Range("b1").Value
Call Clipboard.Clipboard(zahl_a)
Call MausLinks_Klick
SendKeys "^{v}", True
SendKeys "{DOWN}", True
End Sub
Das ist der Code und fängt bei B1 an. Nehmen wir an die Spalte B hat X einträge.
zahl_a = Range("b1").Value
das soll nach jedem Durchgang +1 sein, d.h. bei Durchgang 1 wird der Code mit B1 ausgeführt. Beim Durchgang 2 wird die Range durch B2 ersetzt. Bei Durchgang 3 wird die Range durch B3 ersetzt. Und das so weiter bis der letzte EIntrag erreicht ist. Mir geht es nur darum, das die Range bei zahl_a immer so oft +1 gemacht wird, bis die letzte Zeile erreicht wird.
Danke nochmal für deine Geduld.
Anzeige
AW: Enfache Loop Schleife
12.12.2018 16:58:36
Daniel
Hi
und genau das macht meine Schleife.
das Problem dürfte in deinen aufgerufenen Makros liegen oder in dem Part, der bei den Sendkeys durchführen willst.
da Sendkeys aber nicht besonders zuverlässig ist, sollstest du mal beschreiben, was du überhaupt erreichen willst.
Steuerung+V ist ja ein Einfügen, und wenn du uns sagst, WO das kopierte eingefügt werden soll, könnte man sich eventuell das Sendkeys-gedöns sparen und das ganze zuverlässiger programmieren.
Gruß Daniel
AW: Enfache Loop Schleife
12.12.2018 17:02:45
Anna
Achso ok.
Also ich habe eine Tabelle, welches Artikelnummern in Spalte B hat. Von B1 bis BX sind nur Strings.
Hier sind die Codes für die anderen Makros:
Public Sub Clipboard(text)
Dim oData As New DataObject
oData.SetText text
oData.PutInClipboard
End Sub
Public Function HoleTextVonZwischenablage() As String
Dim oData As New DataObject
On Error Resume Next
oData.GetFromClipboard
HoleTextVonZwischenablage = oData.GetText
End Function
und
Private Declare Sub mouse_event Lib "user32.dll" _
(ByVal dwFlags As Long, ByVal dx As Long, _
ByVal dy As Long, ByVal dwdata As Long, _
ByVal dwExtraInfo As Long)
Private Declare Function SetCursorPos Lib "user32" _
(ByVal X As Long, ByVal Y As Long) As Long
Sub MausLinks_Klick()
Const MOUSEEVENT_LEFTDOWN = &H2
Const MOUSEEVENT_LEFTUP = &H4
'Position 1. Parameter Horizontal, 2.Parameter Vertikal
SetCursorPos 503, 920
mouse_event MOUSEEVENT_LEFTDOWN, 0, 0, 0, 0   'linksklick
mouse_event MOUSEEVENT_LEFTUP, 0, 0, 0, 0     'Taste loslassen
mouse_event MOUSEEVENT_LEFTDOWN, 0, 0, 0, 0   'linksklick
mouse_event MOUSEEVENT_LEFTUP, 0, 0, 0, 0     'Taste loslassen
End Sub

Mein Code soll eine Zeile aus der Excel Tabelle kopieren und in einem Anderen Programm in eine Zeile für das Angebot einfügen. Danach soll im Programm mit der Pfeiltaste nach unten in die neue leere Spalte und dann soll in Excel die nächste Zeile kopiert werden und wieder in das Anegbotsprogramm eingefügt werden. Dann wieder mit der Pfeiltaste nach unten für die nächste leere Spalte und das solange bis alle Artikel der Excel eingefügt wurden.
Anzeige
AW: Enfache Loop Schleife
12.12.2018 17:37:38
Daniel
Hi
Ich vermute, dass du in deinem Angebotsprogramm nicht korrekt in die nächste Spalte wechselst und daher die Werte immer an der selben Stelle einfügst und somit den vorherigen Wert überschreibst.
Somit siehst du am Ende nur den letzten Eintrag.
Gruß Daniel
AW: Enfache Loop Schleife
12.12.2018 18:04:43
Anna
Ne, es wird schon in die nächste Spalte gewechselt, aber nur die letzte Zeile wird eingefügt und das mehrmals.
Bsp:
Spalte B mit
B1 = 1
B2 = 2
B3 = 3
B4 = 4
dann wird im Angebotsprogramm viermal den Wert 4 in 4 verschiedene Spalten eingetragen.
AW: Enfache Loop Schleife
13.12.2018 00:29:54
Anna
Hast du keine Lösung für mich?
AW: Enfache Loop Schleife
13.12.2018 08:27:45
Daniel
dazu müsste ich dein ganzes Konstrukt mal live testen können.
Gruß Daniel
Anzeige
Wo ist der Wald, ich seh nur Bäume?
13.12.2018 08:40:04
PeterK
Hallo Anna, Hallo Daniel
Daniels Schleife funktioniert wunderbar, Dein Ergebnis war leider zu erwarten.
Tastatureingaben und Mouse-Events laufen asynchron, d.h. es wird nur in den entsprechenden Puffer des Betriebssystem geschrieben, wann das Betriebssystem diese dann auch wirklich bearbeitet steht in den Sternen. Was passiert bei Dir: Deine Schleife schreibt in den Puffer und ins Clipboard (und das ziemlich schnell). Wenn das Betriebssytstem anfängt die Eingabe-Events abzuarbeiten, ist Deine Schleife bereits fertig, d.h. der Wert der letzten Zelle steht im Clipboard und wird nun ständig kopiert.
Bau Dir eine kleine WAIT Procedure, z.B.

Sub myWait(wt As Double)
Dim myT As Double
myT = Timer()
Do
DoEvents
Loop Until (Timer() > (myT + wt))
End Sub
und füge einige Aufrufe innerhalb Deiner Schleife ein ("z.B. myWait 1", wartet eine Sekunde).
Du musst dem Betriebssystem Zeit lassen, die Befehle abzuarbeiten und den Einfügvorgang abzuschliessen bevor Du einen neuen Wert ins Clipboard schreibst.
Anzeige
AW: Wo ist der Wald, ich seh nur Bäume?
13.12.2018 10:25:10
Anna
Hallo PeterK,
vielen Dank, genau da war das Problem. Ich habe nun 1 sekunde am Ende angehängt und siehe da: Wunderbar. Danka auch an Daniel für die Hilfe.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige