Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Oobjektvariable oder with-blockvariable nicht fest

Oobjektvariable oder with-blockvariable nicht fest
Marcel
objektvariable oder with-blockvariable nicht festgelegt
Hallo,
ich bin langsam am verzweifeln.
ich habe ein Makro in meiner Tabelle welches ein Datenbereich (der jeweils in einer Zeile liegt) aus einem anderen Tabellenblatt, nach dem Abgleich des Datums kopiert.
Danach springt es eine Zeile weiter und führt die Prüfung erneut durch.
Das Makro wird in 2 Tabellenblättern verwendet (in jedem Tabellenbl. ist der Code hinterlegt) unterscheidet sich nur in dem "Bezug [Tabellenblatt FAW SY(1A) u. FAW SY(1B)]" der zu kopierenden Daten.
Mein Problem besteht aus zwei Teilen:
zum einen:
- es erscheint beim Ausführen des Markros in dem 2. Tabellenblatt die Fehlermeldung.
" objektvariable oder with-blockvariable nicht festgelegt"
aber nur in der 2. Tabellenblatt das 1. funktioniert soweit, obwohl sich der "code" nicht unterscheidet.
zum anderen:
- das Markro gleicht ein Datum ( in Spalte A) mit dem fortlaufenden Kalenderdaten in Zeile 5 ab und überträgt den Datenbereich (mehrere Zellen) ab der "übereinstimmenden" Zelle
Problem: das Datum in Spalte A wird aus einem weiteren Tabellenblatt übertragen, wenn sich dieses Datum ändert oder dazwischen ein neues eingetragen wird, werden Daten teilweise doppelt übertragen.
es müsste bei einer Veränderung in der ersten Spalte (A1 =1) der Datenbereich(B6:B bis B:ACN)
gelöscht werden und das Makro neu ausgeführt.
Ist das möglich?
ich bin über jede Hilfe sehr dankbar!
VBA Code:

Sub t2()
Dim lz, alz, az, alzr As Range
Dim ber1, ber2, SpaBu, test As String
Dim ilz, ilzr, i As Integer
With ThisWorkbook.Sheets("AP (1A)").Range("a7:a500") '.Range("a7:a500") Bereich der geprüft  _
wird,
Set lz = .Find(what:="*", after:=.Range("A1"), LookIn:=xlValues, _
lookat:=xlWhole, searchdirection:=xlPrevious)
End With
ilz = lz.Row ' lz.Row ist die letzte Zeile
Set alz = Range("a6:a" & ilz)
Set alzr = Range("5:5")
For i = 1 To ilz - 7 ' -7 da die ersten 7 Zeilen auslassen werden sollen(die 1. Stelle des  _
Arrays "alz" ist die 7 Zeile)
For ii = 2 To 767 ' 767 ist Spalte 'ACN' (Bereichsende manuell festgelegt)
If alz(i) = alzr(ii) Then
ber1 = Range(Cells(alz(i).Row - 2, 6), Cells(alz(i).Row - 2, 200)).Address
With ThisWorkbook.Sheets("FAW SY(1A)").Range(ber1)
Set lz = .Find(what:="*", after:=.Range("A1"), LookIn:=xlValues, lookat:= _
xlWhole, searchdirection:=xlPrevious)
End With
ber1 = Range("g" & lz.Row, lz.Address).Address
SpaBu = Mid(alzr(ii).Address, 2, InStr(2, alzr(ii).Address, "$") - 2)
ber2 = SpaBu & alz(i).Row & ":" & SpaBu & alz(i).Row
Sheets("FAW SY(1A)").Range(ber1).Copy
Sheets("AP (1A)").Range(ber2).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End If
Next ii
Next i
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Oobjektvariable oder with-blockvariable nicht fest
22.02.2012 16:22:53
dan
Hallo Marcel,
die Variable ii is nich deklariert worden. Es fehlt: Dim ii As Integer
Gruss dan, cz
AW: Oobjektvariable oder with-blockvariable nicht fest
23.02.2012 08:59:42
Marcel
Hallo,
danke für die schnelle Antwort.
das makro läuft für das erste wieder
ich habe es noch ein wenig modifiziert, beim Aufruf wird der Datenbereich gelöscht und später wieder neu beschrieben. so hoffe ich das Problem mit doppelt geschrieben Daten zu vermeiden.
Ein Problem besteht weiterhin,
die letzten beiden Datenreihen werden nicht übertragen.
wie kann ich das beheben?
AW: Oobjektvariable oder with-blockvariable nicht fest
23.02.2012 09:02:26
Marcel
hier noch der aktuelle code
Sub t2()
Dim lz, alz, az, alzr As Range
Dim ber1, ber2, SpaBu, test As String
Dim ilz, ilzr, ii, i As Integer
With ThisWorkbook.Sheets("AP (1A)").Range("a7:a500") '.Range("a7:a500") Bereich der geprüft  _
wird,
ThisWorkbook.Sheets("AP (1A)").Range("B7:ACN500").ClearContents
Set lz = .Find(what:="*", after:=.Range("A1"), LookIn:=xlValues, _
lookat:=xlWhole, searchdirection:=xlPrevious)
End With
ilz = lz.Row ' lz.Row ist die letzte Zeile
Set alz = Range("a6:a" & ilz)
Set alzr = Range("5:5")
For i = 1 To ilz - 7 ' -7 da die ersten 7 Zeilen auslassen werden sollen(die 1. Stelle des  _
Arrays "alz" ist die 7 Zeile)
For ii = 2 To 767 ' 767 ist Spalte 'ACN' (Bereichsende manuell festgelegt)
If alz(i) = alzr(ii) Then
ber1 = Range(Cells(alz(i).Row - 2, 6), Cells(alz(i).Row - 2, 200)).Address
With ThisWorkbook.Sheets("FAW SY(1A)").Range(ber1)
Set lz = .Find(what:="*", after:=.Range("A1"), LookIn:=xlValues, lookat:= _
xlWhole, searchdirection:=xlPrevious)
End With
ber1 = Range("g" & lz.Row, lz.Address).Address
SpaBu = Mid(alzr(ii).Address, 2, InStr(2, alzr(ii).Address, "$") - 2)
ber2 = SpaBu & alz(i).Row & ":" & SpaBu & alz(i).Row
Sheets("FAW SY(1A)").Range(ber1).Copy
Sheets("AP (1A)").Range(ber2).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End If
Next ii
Next i
End Sub

Anzeige
AW: Oobjektvariable oder with-blockvariable nicht fest
23.02.2012 21:49:50
dan
Hallo Marcel,
zwei Probleme habe ich noch in Deinem Code gefunden.
1/ Wenn man die Function Find ruft, muss man damit rechnen, dass nichts gefunden wird. Wenn man den 'Ergebnis' der Find Methode benutzt wenn es Nothing ist, bekommt man die Fehlermeldung: "Oobjektvariable oder with-blockvariable nicht fest...".
2/ Range() Methode so gerufen bezieht sich zu dem ActiveSheet. Es ist also equivalent zu ActiveSheet.Range(). Besser ist immer ein Bezug auf den Worksheet benutzen. So vermeidet man unerwartete Ergebnisse.
Userbild
Userbild
Option Explicit
' Function Find(What, [After], [LookIn], [LookAt], [SearchOrder], [SearchDirection As XlSearchDirection = xlNext], [MatchCase], [MatchByte], [SearchFormat]) As Range
Public Sub FindTest()
Dim sourceWorksheet As Worksheet
Dim sourceRange As Range
Dim findResult As Range
Set sourceWorksheet = Worksheets("AP (1A)")
Set sourceRange = sourceWorksheet.Range("a7:a500")
Set findResult = sourceRange.Find(What:="*", _
After:=sourceRange.Range("A1"), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchDirection:=xlPrevious)
Dim findResultRow As Integer ' Zeile wo Find() den Stern gefunden hat
' diese Zeilen verursachen kein Error nur dann, wenn in dem source-range
' mindestens eine Zelle mit dem Stern vorkommt
findResult.Activate
findResultRow = findResult.Row
Set findResult = sourceRange.Find(What:="Aber such jetzt etwas was " & _
"in dem source range ganz bestimmt " & _
"nicht vorkommt ...", _
After:=sourceRange.Range("A1"), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchDirection:=xlPrevious)
' Wenn Find() nichts findet, dann gibt es Nothing (Nichts) zurueck,
' also man muss erstmals testen, ob Find() etwas gefunden hat:
If (Not findResult Is Nothing) Then
findResultRow = findResult.Row
Else
MsgBox "In dem Bereich [" & sourceRange.Address & "] nichts gefungen."
End If
End Sub

Anzeige

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige