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

Frage zu Find-Befehl VBA

Frage zu Find-Befehl VBA
Beffen
Halli Hallo.
Ich bastle derzeit an der Anpassung eines Codewerkes, das mir Franz hat zukommen lassen. Danke übrigens nochmal dafür!
Es handelt sich bei diesem Schnippsel um die Find-Funktion:
Set Zelle = wksQuelle.Columns(kpad).Find(what:=.Cells(Zeile, k).Value, lookat:=xlWhole, LookIn:=xlValues)
leider ist Zelle immer "nothing", weil er nichts findet. Das liegt wahrscheinlich an dem Syntax, den ich noch nicht ganz kapiere!
Grundsätzlich steht der Suchwert in den beiden Tabellen an unterschiedlicher Stelle. Ich interpretiere denCode so, dass
- wksQuelle.Columns(kpad) die Suchspalte kpad in der entfernten Tabelle darstellt (in dem Beispiel Spalte I=9)
- .Find(what:=.Cells(Zeile, k).Value den Vergleichswert in der aktuellen Tabelle in k-Spalte (k ist in dem Beispiel auch 9 - kann aber variieren - genauso wie kpad) für die Schleifenzeile "findet"
Ich komm irgendwie nicht mehr klar, denn die Anpassung gestaltet sich schwierig...
Sieht jemand durch das Kauderwelsch durch, dass ich da fabriziert habe?
Hier der Code im Zusammenhang. Ist eine Entwurfsfassung - also viel auskommentiert um den Fehler einzuschränken.
Sub holeMasterDaten()
'dateinameseparieren
Dim wbQuelle As Workbook, wksQuelle As Worksheet, Zeile_Q
Dim wbZiel As Workbook, wksZiel As Worksheet, Zeile, Zelle As Range
k = Sheets("system").Range("K3").Value
kpad = Sheets("system").Range("N3").Value
wertungvon = Sheets("system").Range("K8").Value
wertungbis = Sheets("system").Range("K9").Value
Set wbQuelle = ThisWorkbook 'Name ggf. anpassen
Set wksQuelle = wbQuelle.Worksheets("tempcoglopad") 'Name ggf. anpassen
Set wbZiel = ThisWorkbook 'Name ggf. anpassen
Set wksZiel = wbZiel.Worksheets("New LCL") 'Name ggf. anpassen
' Application.ScreenUpdating = False
With wksQuelle
'Letzte Zeile in PAD-Number-Spalte
Zeile_Q = .Cells(.Rows.Count, 4).End(xlUp).Row
'Datenzeilen kopieren
.Range(.Cells(4, 1), .Cells(Zeile_Q, 13)).Copy
End With
With wksZiel
'Werte in Zieltabelle einfügen
.Cells(8, 1).PasteSpecial Paste:=xlPasteValues
Set wksQuelle = wbQuelle.Worksheets("templcl") 'Name ggf. anpassen
'Zeilen in Zieltabelle nachbereiten
For Zeile = 8 To .Cells(.Rows.Count, 9).End(xlUp).Row
'Shop 7  Zeilen - Informationen löschen
'If .Cells(Zeile, k) = 3000012 Then
'Spalten B-C
' .Range(.Cells(Zeile, 1), .Cells(Zeile, 100)).ClearContents
'Spalten E
'.Cells(Zeile, 5).ClearContents
' End If
'Pad-Number in "templcl" suchen
Set Zelle = wksQuelle.Columns(kpad).Find(what:=.Cells(Zeile, k).Value, lookat:=xlWhole,  _
LookIn:=xlValues)
If Zelle Is Nothing Then
'Zeile in Spalten wertungvon bis wertungbis färben und Inhalte löschen
With .Range(.Cells(Zeile, wertungvon), .Cells(Zeile, wertungbis))
.Interior.ColorIndex = 8 'gelb
'.ClearContents
End With
Else
Zeile_Q = Zelle.Row
'Werte aus Spalten F bis I von "LCL alt" nach "LCL neu" kopieren
With wksQuelle
.Range(.Cells(Zeile_Q, wertungvon), .Cells(Zeile_Q, wertungbis)).Copy
End With
With .Range(.Cells(Zeile, wertungvon), .Cells(Zeile, wertungbis))
.PasteSpecial Paste:=xlPasteValues
.Interior.ColorIndex = xlColorIndexNone
End With
End If
Set Zelle = Nothing
Next
Application.CutCopyMode = False
End With
Application.ScreenUpdating = True
End Sub

Danke
Gruß Uwe

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Frage zu Find-Befehl VBA
08.06.2011 19:57:27
Erich
Hi Uwe,
zunächst ein Vorschlag für den Anfang deines Codes:

Option Explicit               ' IMMER zu empfehlen!
Sub holeMasterDaten()
'dateinameseparieren
Dim wbQuelle As Workbook, wksQuelle As Worksheet, Zeile_Q As Long
Dim wbZiel As Workbook, wksZiel As Worksheet, Zeile As Long, Zelle As Range
Dim k ' as Long ?
Dim kpad ' as Long ?
Dim wertungvon ' as Long ?
Dim wertungbis ' as Long ?
With Sheets("system")
k = .Range("K3").Value
kpad = .Range("N3").Value
wertungvon = .Range("K8").Value
wertungbis = .Range("K9").Value
End With
Set wbQuelle = ThisWorkbook 'Name ggf. anpassen
"Zeile" und "Zelle" solltest du nicht als Variablennamen verwenden.
Das sind Bezeichnungen, die Excel schon vergeben hat.
Es gibt doch sonst noch genügend Möglichkeiten, Chaos zu verbreiten... ;-)
Noch ein Tipp:
Wenn du in VBA im Menü Extras - Optionen, Karte "Editor"
die Option "Variablendeklaration erforderlich" aktivierst,
schreibt der VBA-Editor automatisch "Option Explicit" als erste Zeile in jedes neue Modul.
Zu Option Explicit schau auch mal z. B. hier: Hilfe zur Selbsthilfe
und hier:
http://www.online-excel.de/excel/singsel_vba.php?f=4
http://www.vbarchiv.net/faq/allg_optionexplicit.php
http://www.vb-seminar.de/vb_27.htm
Nun zum Find. Die VBA-Hilfe sagt:
"Die Angaben für LookIn, LookAt, SearchOrder und MatchByte werden jedesmal gespeichert,
wenn Sie diese Methode verwenden. Falls Sie beim nächsten Aufruf dieser Methode
keine Werte für die Argumente angeben, werden die gespeicherten Werte verwendet.
Die Angabe dieser Argumente ändert die Einstellungen im Dialogfeld Suchen, und
eine Änderung der Einstellungen im Dialogfeld Suchen ändert die gespeicherten Werte,
die verwendet werden, wenn Sie die Argumente nicht angeben. Um Probleme zu vermeiden,
sollten Sie bei jeder Verwendung dieser Methode diese Argumente ausdrücklich angeben."
Das ist ein wertvoller Hinweis! Aber vermutlich noch nicht die Lösung deines Problems.
Das kann ich so - ohne deine Daten - kaum nachvollziehen.
Könnte es sein, dass du in Birnen nach einem Apfel suchst? Will heißen:
Kann es sein, dass in der durchsuchten Spalte Zahlen stehen, du aber nach einem Text suchst,
oder umgekehrt?
Das ist ein sehr beliebter Fehler.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Frage zu Find-Befehl VBA
08.06.2011 20:23:33
Beffen
Hallo Erich, vielen Dank für deine Hilfe,
nachdem ich jetzt am Verzweifeln bin, denke ich, ich werde dann doch mal Feierabend machen. Ich melde mich morgen mit neuen spannenden Geschichten! ^^
Danke dir erstmal und das mit den Birnen und Äpfeln hab ich bereits mitbekommen und ist sehr gut möglich!
Grüße aus FFm
Beffen-Uwe
und zu - Feierabend
09.06.2011 11:51:37
ZU

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige