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

Suchwort ist nicht variabel

Suchwort ist nicht variabel
webdepp
Hallo Excelfreunde,
ich habe da mal ein kleines Problem. Ich habe eine kleine Suche, dir mir dann die Werte aus dem einen WB in das andere schreiben soll. Nur bekommen ich das Suchwort nicht variabel. Es funktioniert nur, wenn ich v_suchwert einen festen Wert zuordne. Kann mir jmd helfen?
Fehlermeldung: Runtime Error 91, Object variable or With block variable not set
Danke
webdepp
Private Sub HW_Uebertragung_Click()
Dim v_hwscan As String
Dim v_wbscan As Workbook, v_wbplan As Workbook, v_wsscan As Worksheet, v_wsplan As  _
Worksheet
Dim i As Long, v_lastrowscan As Long, v_lastrowplan As Long
Dim v_hwplan As String, Suche As String, v_suchwert As String
Dim v_fund As Integer
v_hwscan = Application.GetOpenFilename("Micrsoft Excel-Dateien (*.xls),*.xls")
Workbooks.Open v_hwscan
v_hwscan = ActiveWorkbook.Name      'Dateiname Scanergebnis
v_hwplan = ThisWorkbook.Name
Set v_wsscan = Workbooks(v_hwscan).Sheets("Sheet1")
Set v_wsplan = Workbooks(v_hwplan).Sheets("HW_SMI")
v_lastrowscan = v_wsscan.Cells(v_wsscan.Rows.Count, 2).End(xlUp).Row
v_lastrowplan = v_wsplan.Cells(v_wsplan.Rows.Count, 7).End(xlUp).Row
For i = 8 To 20 'v_wsplan.v_lastrowplan
'v_suchwert = v_wsplan.Cells(i, 7)
v_suchwert = "10.1.192.29"
v_fund = v_wsscan.Range("B:B").Find(v_suchwert, lookat:=xlWhole).Row
v_wsplan.Cells(i, 12) = v_wsscan.Cells(v_fund, 5)  'Lparname / Partionname
Next i
End Sub

Ja, ja, die VBA-Fehlermeldungen,...
07.01.2011 17:39:25
Luc:-?
…WebDepp (möchtest du wirklich so angesprochen wdn?),
beziehen sich oft nicht auf den Primär-, sondern einen erst dadurch intern entstandenen Sekundärfehler (VBA ist mitunter ein „Spätmerker“!)…
Ich weiß ja nicht, ob die Find-Methode das mag, wenn man ihr erst vorgaukelt, es kommen alle Parameter (noch dazu mit einer Variablen) und dann kommen doch benannte. Versuch's mal mit What:= vor dem Suchbegriff!
Außerdem suchst du immer im gleichen Bereich. Da findest du dann auch immer den gleichen Wert. Wenn's in diesem Bereich weitergehen soll, musst du anschließend FindNext benutzen! Aber das kann auch alles in der VBEditor-Hilfe nachgelesen wdn.
Gruß Luc :-?
Anzeige
AW: Ja, ja, die VBA-Fehlermeldungen,...
07.01.2011 19:09:02
webdepp
Hallo Luc,
muss ehrlich sagen das wahr nicht sehr hilfreich und stehe immer noch vor dem gleichen Problem.
Selbst mit What und Find Next findet er es nicht.
v_fund = v_wsscan.Range("B:B").FindNext(what:=v_suchwert, lookat:=xlWhole).Row
Gruß webdepp
Naja, dann solltest du schon mal sagen,...
07.01.2011 19:43:39
Luc:-?
…auf welcher Codezeile er hängen bleibt, W.D.,
viell ist da ja noch mehr. Ich baue dein Zeugs jedenfalls nicht nach und kontaminiere damit auch nicht meinen PC… ;->
Ahoi! Luc :-?
AW: Naja, dann solltest du schon mal sagen,...
07.01.2011 19:53:54
webdepp
Hallo Luc,
es bleibt genau bei der Zeile v_fund = v_wsscan.Range("B:B")... hängen.
Gruß
webdepp
Viell ist es besser, die Fundstelle als Range...
07.01.2011 20:01:36
Luc:-?
…zu deklarieren und dann erst die Zeilenvariable anzulegen, WD;
wenn die Fundstelle nämlich Nothing ist (unbedingt abfangen!), wirst du keine Zeilennr, sondern einen Fehler erhalten.
Luc :-?
Anzeige
AW: Viell ist es besser, die Fundstelle als Range...
07.01.2011 20:11:35
webdepp
Hallo Luc,
ok. Getan. Jetzt fängt er an was zu machen läuft aber dann wieder auf den Error 91. An folgender Stelle: v_wsplan.Cells(i, 12) = v_wsscan.Cells(v_fund.Row, 5) 'Lparname / Partionname
Private Sub HW_Uebertragung_Click()
Dim v_hwscan As String
Dim v_wbscan As Workbook, v_wbplan As Workbook, v_wsscan As Worksheet, v_wsplan As  _
Worksheet
Dim i As Long, v_lastrowscan As Long, v_lastrowplan As Long
Dim v_hwplan As String, Suche As String, v_suchwert As String
Dim v_fund As Range
v_hwscan = Application.GetOpenFilename("Micrsoft Excel-Dateien (*.xls),*.xls")
Workbooks.Open v_hwscan
v_hwscan = ActiveWorkbook.Name      'Dateiname Scanergebnis
v_hwplan = ThisWorkbook.Name
Set v_wsscan = Workbooks(v_hwscan).Sheets("Sheet1")
Set v_wsplan = Workbooks(v_hwplan).Sheets("HW_SMI")
v_lastrowscan = v_wsscan.Cells(v_wsscan.Rows.Count, 2).End(xlUp).Row
v_lastrowplan = v_wsplan.Cells(v_wsplan.Rows.Count, 7).End(xlUp).Row
For i = 10 To 200 'v_lastrowplan
v_suchwert = v_wsplan.Cells(i, 7)
'v_suchwert = "10.1.192.29"
Set v_fund = v_wsscan.Range("A:B").Find(what:=v_suchwert, lookat:=xlWhole)
v_wsplan.Cells(i, 12) = v_wsscan.Cells(v_fund.Row, 5)  'Lparname / Partionname
i = i + 1
Next i
End Sub

Anzeige
in der VBA Hilfe zu Find...
07.01.2011 20:47:07
Christian
... steht: If Not c Is Nothing Then und darauf hat Luc ja auch grade hingewiesen.
Also einfach 1:1 umsetzen, webdepp. Andernfalls knallt es, wenn der Begriff nicht gefunden wird.
Ebenso solltest du das geöffnete File wieder schließen.
Des Weiteren wird es knallen, wenn du bei der Dateiauswahl Abbrechen wählst. Hier ist ein Variant besser und wenn dieser False ergibt, dann die Prozedur verlassen.
Gruß
Christian
Danke...
07.01.2011 21:07:34
webdepp
Danke...
Habe jetzt alles drinne.
Schönes We.
Und für alle die auch so etwas suchen: Hier der komplette Code
Private Sub HW_Uebertragung_Click()
Dim v_hwscan As Variant
Dim v_wbscan As Workbook, v_wbplan As Workbook, v_wsscan As Worksheet, v_wsplan As  _
Worksheet
Dim i As Long, v_lastrowscan As Long, v_lastrowplan As Long
Dim v_hwplan As String, Suche As String, v_suchwert As String
Dim v_fund As Range
'Aufruf Dialogfenster öffnen für Datenexcel
v_hwscan = Application.GetOpenFilename("Micrsoft Excel-Dateien (*.xls),*.xls")
'Prüfen ob nicht Abbrechen gesagt wurde
If v_hwscan = False Then Exit Sub
'Excel öffnen
Workbooks.Open v_hwscan
'Variabeln befüllen
v_hwscan = ActiveWorkbook.Name
v_hwplan = ThisWorkbook.Name
Set v_wsscan = Workbooks(v_hwscan).Sheets("Sheet1")
Set v_wsplan = Workbooks(v_hwplan).Sheets("HW_SMI")
'letzte Zeile Ermitteln
v_lastrowscan = v_wsscan.Cells(v_wsscan.Rows.Count, 2).End(xlUp).Row
v_lastrowplan = v_wsplan.Cells(v_wsplan.Rows.Count, 7).End(xlUp).Row
'Suche und kopieren
For i = 10 To v_lastrowplan
v_suchwert = v_wsplan.Cells(i, 7)
Set v_fund = v_wsscan.Range("B:B").Find(what:=v_suchwert, lookat:=xlWhole)
If Not v_fund Is Nothing Then
v_wsplan.Cells(i, 12) = v_wsscan.Cells(v_fund.Row, 5)  'Lparname / Partionname
End If
i = i + 1
Next i
'Datenexcel schließen
Windows(v_hwscan).Close
End Sub

Anzeige
AW: Danke...
07.01.2011 22:43:42
Christian
na also - klappt doch.
aber ... im Allgemeinen noch recht länglich.
Was mir auffällt:
- überflussig allokierter Speicher für nicht genutzte Variablen
- was bezweckst du mit "i = i + 1" - wenn nur jede 2.te Zeile durchlaufen werden soll, dann nutze Step in der Schleife.
- Speicher wird nicht freigegeben.
Mein Vorschlag ohne Anspruch auf Vollständigkeit:

Option Explicit
Sub Uebertragung()
Dim wkb As Workbook, wks As Worksheet
Dim vntFile As Variant, lngR As Long, rngFnd As Range
vntFile = Application.GetOpenFilename("xls-Dateien,*.xls")
If vntFile = False Then Exit Sub
Set wkb = Workbooks.Open(vntFile)
Set wks = wkb.Sheets("Sheet1")
With ThisWorkbook.Sheets("HW_SMI")
For lngR = 10 To .Cells(.Rows.Count, 7).End(xlUp).Row
Set rngFnd = wks.Columns(2).Find(what:=.Cells(lngR, 7).Text, lookat:=xlWhole)
If Not rngFnd Is Nothing Then
.Cells(lngR, 12) = wks.Cells(rngFnd.Row, 5)
End If
Next
End With
wkb.Close 0
Set rngFnd = Nothing
Set wks = Nothing
Set wkb = Nothing
End Sub
Des Weiteren könnte man noch prüfen, ob die Datei oder eine Datei gleichen Namens aus einem anderen Verzeichnis bereits geöffnet ist. Beispiele hierzu findest du im Archiv.
Gruß
Christian
Anzeige
AW: Und in der VBA-Hilfe zur Find-Methode ...
08.01.2011 00:38:17
Gerd
.... steht auch, dass weitere Argumente, die im Dialog "Suchen" ver-/eingestellt werden können, noch gesetzt werden sollten; m.E. Lookin und MatchCase.
Grüße Gerd

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige