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

Übersetzung VBA Quellcode

Übersetzung VBA Quellcode
10.09.2021 12:23:59
Memo
Hallo zusammen,
benötige bitte eine Unterstützung von einem Doltmetscher :)
Dim rq
Dim r As Long
For r = 3 To lRowZ
rq = rngQ.Find(wsZ.Cells(r, 2), , , xlWhole).Row
wsQ.Range(Cells(rq, "J"), Cells(rq, "AC")).Copy wsZ.Cells(r, "H") 'xx hier soll er ab Spalte J bis AC alle Werte in die Datei kopieren wo das Makro gestartet wird.
Next r

xx= Die Datei aus der die Werte herauskopiert werden:
https://www.herber.de/bbs/user/147997.xlsx
Ist quasi wie ein Sverweis..
Diese Datei wird täglich aktualisiert, das heisst ich muss immer den vergangenen Tag als Spalte immer löschen.
Gestern war der 1. Tag....heute ist der 2. und ich lösche den 1. Tag als komplette Spalte.
Wenn ich dann den Makro ausführe bekomme ich genau an dieser Stelle eine Fehlermeldung:
rq = rngQ.Find(wsZ.Cells(r, 2), , , xlWhole).Row
Was heisst diese Zeile? Warum bekomme ich die Fehlermeldung wenn der Tag 1 bei beiden Excel Dateien, sowohl wo das Makro gestartet wird als auch in der Quelle die Spalte lösche?
Danke für jede Unterstützung.
VG
Memo

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Übersetzung VBA Quellcode
10.09.2021 12:57:42
UweD
Hallo
wo hast du denn den Bereich rngQ zugewiesen? Das ist das Blatt und die Spalte, in der gesucht werden soll.
Auch fehlt noch wsQ und wsZ und lRowZ
oder hast du nur einen Teil deines Makros gezeigt?
LG UweD
AW: Übersetzung VBA Quellcode
10.09.2021 13:59:45
Memo
Hallo Uwe,
ja ihr habt natürlich recht...das war nichts ganzes...
hier der kompl. Code

Sub OpenFile(btnNo As Byte) ' gilt für beide CommandButtons 1 und 2
Dim wbZ As Workbook
Set wbZ = ActiveWorkbook
Dim wsZ As Worksheet
Set wsZ = wbZ.ActiveSheet
Dim lRowZ As Long
lRowZ = wsZ.Cells(Rows.Count, 2).End(xlUp).Row
Dim wbName As Variant
wbName = Application.GetOpenFilename("Exceldateien (*.xlsx*), *.xls*", , "Wähle die Datei aus")
If wbName  False Then
Application.ScreenUpdating = False
Dim wbQ As Workbook
Set wbQ = Workbooks.Open(wbName)
Application.ScreenUpdating = True
Else
MsgBox "Keine gültige Datei ausgewählt"
Exit Sub
End If
Application.ScreenUpdating = False
If btnNo = 1 Then
Call Btn1(wbQ, wsZ, lRowZ)
Else
Call Btn2(wbQ, wsZ, lRowZ)
End If
Application.ScreenUpdating = True
wbQ.Close False
End Sub

Sub Btn1(wbQ As Workbook, wsZ As Worksheet, lRowZ As Long) ' hier startet der Button 1
With wbQ
Dim wsQ As Worksheet
Set wsQ = .Worksheets(1)
Dim lRowQ As Long
lRowQ = wsQ.Cells(Rows.Count, 3).End(xlUp).Row
Dim rngQ As Range
Set rngQ = wsQ.Range(wsQ.Cells(8, 3), wsQ.Cells(lRowQ, 3))
End With
Dim rq
Dim r As Long
For r = 3 To lRowZ
rq = rngQ.Find(wsZ.Cells(r, 2), , , xlWhole).Row
wsQ.Cells(rq, "AD").Copy wsZ.Cells(r, "D")
Next r
End Sub

Sub Btn2(wbQ As Workbook, wsZ As Worksheet, lRowZ As Long) ' hier startet der Button 2
With wbQ
Dim wsQ As Worksheet
Set wsQ = .Worksheets(1)
Dim lRowQ As Long
lRowQ = wsQ.Cells(Rows.Count, 5).End(xlUp).Row
Dim rngQ As Range
Set rngQ = wsQ.Range(wsQ.Cells(6, 5), wsQ.Cells(lRowQ, 5))
End With
Dim rq
Dim r As Long
For r = 3 To lRowZ
rq = rngQ.Find(wsZ.Cells(r, 2), , , xlWhole).Row
wsQ.Range(Cells(rq, "J"), Cells(rq, "AC")).Copy wsZ.Cells(r, "H")
Next r
End Sub
Grüße
Memo
Anzeige
AW: Übersetzung VBA Quellcode
10.09.2021 12:57:52
Daniel
Hi
das .FIND ist nichts anderes, als die SUCHEN Funktion aus dem Excel-Menü Start - Bearbeiten - Suchen und auswählen.
dabei wird im Zellbereich rngQ (wie immer du den definiert hast) nach dem Wert gesucht, der in der Zelle wsZ.Cells(r, 2) steht und das mit der Suchoption "gesamten Zellinhalt vergleichen" (vermutlich, ob der Parameter jetzt an der richtigen Stelle sitzt weiß ich nicht, ich bevorzuge hier, die Paramter zu benennen)
in der Codezeile wird dann die Zeilennummer der Fundstelle der Variablen rq zugewiesen.
einen Fehler gibts bei dieser Art der Programmierung, wenn der gesuchte Wert (wsZCells(r, 2)) im Zellbereich rngQ enthalten ist.
da es sich hier um eine Schleife handelt, solltest du natürlich auch erstmal klären, bei welchem Schleifenumlauf (wert von r) dieser Fehler auftritt.
Gruß Daniel
Anzeige
AW: Übersetzung VBA Quellcode
10.09.2021 13:12:25
volti
Hallo,
versuche es lieber mal so...
Und rq als Object oder Range dimensioniert. DIM rq as Object
Code:

     Set rq = rngQ.Find(wsz.Cells(r, 2), , , xlWhole)
     If Not rq Is Nothing Then
        wsq.Range(Cells(rq.Row, "J"), Cells(rq.Row, "AC")).Copy wsz.Cells(r, "H")
     End If

viele Grüße
Karl-Heinz
Anzeige
AW: Übersetzung VBA Quellcode
10.09.2021 13:14:48
volti
Sorry, falscher Zweig...
Versuche es lieber mal so...
Und rq als Object oder Range dimensioniert. DIM rq as Object
Code:

     Set rq = rngQ.Find(wsz.Cells(r, 2), , , xlWhole)
     If Not rq Is Nothing Then
        wsq.Range(Cells(rq.Row, "J"), Cells(rq.Row, "AC")).Copy wsz.Cells(r, "H")
     End If
____________
viele Grüße 😊
Karl-Heinz

Anzeige
AW: Übersetzung VBA Quellcode
10.09.2021 16:20:49
Memo
Hallo Karl-Heinz,
das Problem ist gelöst...- verschiedene Suchwerte in der Datei- klar dass er nichts findet.
Habe jedoch eine andere Frage.
Wenn ich oben eine neue Zeile einfüge dann zeigt er wieder genau diese Stelle.
For r = 3 To lRowZ
rq = rngQ.Find(wsZ.Cells(r, 2), , , xlWhole).Row
sprich ich muss doch hier was ändern damit er nicht in der 3. Zeile einzufügen braucht sondern jetzt in der 4. Zeile. oder jednachdem wenn ich weitere Zeilen einfüge dann in der 5., 6. usw.
Eine Änderung zu
For r = 4 ..........(r, 3) hat nicht funktioniert.
VG
Memo
AW: Übersetzung VBA Quellcode
10.09.2021 17:33:14
volti
Hallo Memo,
sowohl GerdL wie auch ich haben Dir doch schon geschrieben, dass Dein Ansatz nicht funktioniert und zu z.B. Laufzeitfehler 91 führt.
Hier noch einmal unser Änderungsvorschlag dazu...
PS: Die Aussage "kommt ein Fehler" o.ä. ist für Helfer nicht aussagefähig. Es sollte vielmehr mindestens die Fehlernummer/Fehlertext mit aufgeführt werden.
rq = rngQ.Find(wsZ.Cells(r, 2), , , xlWhole).Row
wsQ.Range(Cells(rq, "J"), Cells(rq, "AC")).Copy wsZ.Cells(r, "H")

' ersetzen durch
Dim rq As Range

'.....
Set rq = rngQ.Find(wsZ.Cells(r, 2), , , xlWhole)
If Not rq Is Nothing Then
   wsQ.Range(wsQ.Cells(rq.Row, "J"), wsQ.Cells(rq.Row, "AC")).Copy wsZ.Cells(r, "H")
End If
_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Nothing-Row
10.09.2021 13:36:33
GerdL
Moin

Dim rq
Dim r As Long
Dim Zelle As Range
For r = 3 To lRowZ
Set Zelle = rngQ.Find(wsZ.Cells(r, 2), , , xlWhole)
If Not Zelle Is Nothing Then 'xx wenn der Suchwert gefunden worden ist
rq = Zelle.Row
wsQ.Range(wsQ.Cells(rq, "J"), wsQ.Cells(rq, "AC")).Copy wsZ.Cells(r, "H") 'xx hier soll er ab ...
End If
Next r
Die Find-Methode sucht nach einer Treffer-Zelle. Wird nichts gefunden gibt sie anstelle des Treffer-Objekts den Startwert der Objektvariablen "Nothing" zuück.
Das "Nichts-Objekt" hat keine Row-Eigenschaft.
Deshalb prüft man in der Regel den Rückgabewert darauf hin ab.
Die Range-Cells-Schreibweise erfordert die Angabe vom Blatt jeweils vor ".Cells",
Für die konkrete Ursachenforschung sind konkrete Daten u. die vollständigen Prozedur(en) erforderlich (siehe Beitrag von Uwe).
Gruß Gerd
Anzeige
AW: Nothing-Row
10.09.2021 14:12:07
Memo
Hallo Gerd,
danke für deine Bereitschaft.
Habe den kompl. Code auf Uwes Nachricht gepostet.
VG
Memo

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige