PDA

Vollständige Version anzeigen : problem bei suchen/kopieren makro


bennyboy
23.03.2009, 14:29
Hallo Leute,

eine Frage: kann mir jemand sagen warum das folgende Makro nicht funktioniert?

Public Sub SuchenKopieren()

Dim WkSh_Q As Worksheet
Dim WkSh_Z As Worksheet
Dim rZelle As Range
Dim sFundst As String
Dim Suchbegriff As Boolean
Dim lZeile_Z As Long

Set WkSh_Q = ThisWorkbook.Worksheets("Anwesenheitsplan")
Set WkSh_Z = ThisWorkbook.Worksheets("Einsatzplan")

'==
'Anweisung 7
Suchbegriff = W
lZeile_Z = 42

With WkSh_Q.Columns("H")
Set rZelle = .Find(What:=Suchbegriff, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
WkSh_Z.Cells(lZeile_Z, "A").Value = WkSh_Q.Cells(rZelle.Row, "A").Value
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

Set rZelle = Nothing
Set WkSh_Z = Nothing
Set WkSh_Q = Nothing

End Sub

Der Suchbegriff "W" stammt aus einer Checkboxabfrage die folgendermaßen aussieht:

If CheckBox1 = True Then Cells(48, 8) = "W"
If CheckBox1 = False Then Cells(48, 8) = "F"


es kommt nun immer die Meldung: Der Begriff "Falsch" konnte nicht gefunden werden, dabei suche ich doch speziell in dieser Anweisung (Anweisung 7) gar nicht nach False sondern nach W. In den Anweisungen 1-6 vorher suche ich immer nach False aber in der 7. Anweisung nach einem W.

Ohne die 7.Anweisung funktioniert das Makro wunderbar.

Vielleicht findet jemand den Fehler.


Benny

IngGi
23.03.2009, 15:15
Hallo Benny,

wenn du nach dem Buchstaben W suchst, muss die Variable Suchbegriff als Stringvariable deklariert sein, also
Dim Suchbegriff As String
und bei der Zuweisung des Buchstabens zu dieser Variablen muss der Buchstabe in doppelten Anführungszeichen stehen, also
Suchbegriff = "W"
Die Find-Methode ignoriert übrigens standardmäßig Groß- und Kleinschreibung. Wenn du nur nach großgeschriebenen Ws suchen willst, musst du bei der Find-Methode zusätzlich den Parameter MatchCase auf True setzen, also
Set rZelle = .Find(What:=Suchbegriff, LookAt:=xlPart, LookIn:=xlValues, MatchCase:=True)

Gruß Ingolf

bennyboy
23.03.2009, 16:08
Danke Ingo,

soweit sogut, aber heisst das, das ich beides nicht zusammen in einem makro ausführen lassen kann?

Wie du gesehn hast habe ich in einem Makro 6 Anweisungen gehabt die alle über diese Dim Suchbegriff As Boolean lief (was auch immer das heisst)

in der 7. Anweisung soll er nun in einer andren Spalte den Buchstaben "W" suchen. Du sagstest es muss dann Dim Suchbegriff as String heissen.

muss ich dann ein 2. Makro erstellen oder kann ich das in mein 1. Makro dann irgendwie einbauen dass er nicht mehr die Meldung bringt: Begriff "Falsch" nicht gefunden

Danke

Benny

IngGi
23.03.2009, 16:17
Hallo Benny,

ich sehe nichts von 6 anderen "Anweisungen", sondern nur das eine Makro. Wenn du einmal nach True/False, ein andermal nach W suchst, lässt sich das sicherlich auch in einem Makro vereinigen. Wenn allerdings kein Grund dafür besteht, beides in ein Makro zu packen, wäre es besser, zwei unabhängige Makros zu schreiben. Ein Grund dafür könnte beispielsweise sein, dass die 7 Anweisungen immer hintereinander abgearbeitet werden und das in einer Schleife passieren soll. Von einer Schleife ist in dem Makro aber auch nichts zu erkennen. Um da jetzt konkret weiterhelfen zu können, müsste man das Makro mit allen 7 Anweisungen komplett sehen.

Gruß Ingolf

bennyboy
23.03.2009, 16:32
ich habe jetzt schon 2 Makros gemacht aber ich hab dann sowieso noch ein Problem:

Jetzt hat er mir ja die Werte aus Spalte A in Anwesenheitsplan auf meinem Tabellenplan "Einsatzplan" kopiert. Im Einsatzplan werden diese Werte (es sind Namen) wie du gleich im Makro sehen wirst in verschieden Spalten eingefügt. Jetzt müsste es noch so sein, dass wenn ein Name bereits in der Spalte A im Einsatzplan (Urlaubsspalte) steht soll der Name in den anderen Spalten nicht mehr kopiert werden.

Verstehst du was ich meine?

Hier erst mal das ganze Makro

Public Sub SuchenKopieren()

Dim WkSh_Q As Worksheet
Dim WkSh_Z As Worksheet
Dim rZelle As Range
Dim sFundst As String
Dim Suchbegriff As Boolean
Dim lZeile_Z As Long

Set WkSh_Q = ThisWorkbook.Worksheets("Anwesenheitsplan")
Set WkSh_Z = ThisWorkbook.Worksheets("Einsatzplan")

'==
'Anweisung 1
Suchbegriff = False
lZeile_Z = 42 'Startwert - 1 für die Ausgabe der ersten Zeile, hier erfolgt die erste
'erste Ausgabe in Zeile 10

With WkSh_Q.Columns("B")
Set rZelle = .Find(What:=Suchbegriff, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
WkSh_Z.Cells(lZeile_Z, "B").Value = WkSh_Q.Cells(rZelle.Row, "A").Value
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

'==
'Anweisung 2
Suchbegriff = False
lZeile_Z = 42 'Startwert - 1 für die Ausgabe der ersten Zeile, hier erfolgt die erste
'erste Ausgabe in Zeile 10

With WkSh_Q.Columns("C")
Set rZelle = .Find(What:=Suchbegriff, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
WkSh_Z.Cells(lZeile_Z, "D").Value = WkSh_Q.Cells(rZelle.Row, "A").Value
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

'==
'Anweisung 3
Suchbegriff = False
lZeile_Z = 42 'Startwert - 1 für die Ausgabe der ersten Zeile, hier erfolgt die erste
'erste Ausgabe in Zeile 10

With WkSh_Q.Columns("D")
Set rZelle = .Find(What:=Suchbegriff, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
WkSh_Z.Cells(lZeile_Z, "F").Value = WkSh_Q.Cells(rZelle.Row, "A").Value
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

'==
'Anweisung 4
Suchbegriff = False
lZeile_Z = 42 'Startwert - 1 für die Ausgabe der ersten Zeile, hier erfolgt die erste
'erste Ausgabe in Zeile 10

With WkSh_Q.Columns("E")
Set rZelle = .Find(What:=Suchbegriff, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
WkSh_Z.Cells(lZeile_Z, "H").Value = WkSh_Q.Cells(rZelle.Row, "A").Value
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

'==
'Anweisung 5
Suchbegriff = False
lZeile_Z = 42 'Startwert - 1 für die Ausgabe der ersten Zeile, hier erfolgt die erste
'erste Ausgabe in Zeile 10

With WkSh_Q.Columns("F")
Set rZelle = .Find(What:=Suchbegriff, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
WkSh_Z.Cells(lZeile_Z, "J").Value = WkSh_Q.Cells(rZelle.Row, "A").Value
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

'==
'Anweisung 6
Suchbegriff = False
lZeile_Z = 42 'Startwert - 1 für die Ausgabe der ersten Zeile, hier erfolgt die erste
'erste Ausgabe in Zeile 10

With WkSh_Q.Columns("G")
Set rZelle = .Find(What:=Suchbegriff, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
WkSh_Z.Cells(lZeile_Z, "L").Value = WkSh_Q.Cells(rZelle.Row, "A").Value
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

Set rZelle = Nothing
Set WkSh_Z = Nothing
Set WkSh_Q = Nothing

End Sub

und hier das zweite dass falls es kein zu großer Aufwand ist noch ins erste Makro mit eingepflegt werden soll:

Public Sub Suchen_Kopieren_Urlaub()

Dim WkSh_Q As Worksheet
Dim WkSh_Z As Worksheet
Dim rZelle As Range
Dim sFundst As String
Dim Suchbegriff As String
Dim lZeile_Z As Long

Set WkSh_Q = ThisWorkbook.Worksheets("Anwesenheitsplan")
Set WkSh_Z = ThisWorkbook.Worksheets("Einsatzplan")

'==
'Anweisung 1
Suchbegriff = "W"
lZeile_Z = 42 'Startwert - 1 für die Ausgabe der ersten Zeile, hier erfolgt die erste
'erste Ausgabe in Zeile 10

With WkSh_Q.Columns("H")
Set rZelle = .Find(What:=Suchbegriff, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
WkSh_Z.Cells(lZeile_Z, "A").Value = WkSh_Q.Cells(rZelle.Row, "A").Value
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

Set rZelle = Nothing
Set WkSh_Z = Nothing
Set WkSh_Q = Nothing

End Sub

Wenn du mir nochmal helfen könntest mit der Sache wenn ein Name in Spalte A kopiert wird soll er in die anderen Spalten nicht mehr kopiert werden,
dann wäre ich echt glücklich. Die Sache mit dem zusammengefassten Makro ist erst mal weniger wichtig.

Vielleicht wird es ja einfacher wenn man erst das Makro ausführt wo der Urlaub übernommen wird und dann im 2 Makro sagt, nur noch das kopieren was in Spalte A noch nicht enthalten ist.......

gibt es diese Möglichkeit??

Benny

jinx
23.03.2009, 16:39
Moin, benny,

was meinst Du wohl, warum ich von Parameterübergabe an eine externe Prozedur bzw. Funktion gesprochen hatte? ;)

IngGi
23.03.2009, 16:44
Hallo Benny,

ist das nur ein Beispielcode oder ist der Suchbegriff immer False? Falls der Suchbegriff immer False ist, lässt sich der Code nämlich erheblich verkürzen und du kannst auf die Variable komplett verzichten.

Gruß Ingolf

bennyboy
23.03.2009, 17:57
hi ingo,
Das ist kein beispielcode. Ganz ehrlich das muß ja nicht hochprofessionell aussehen hauptsache es funktioniert. Also die beiden makros die ich dir gezeigt hab funktionieren wunderbar. Mir geht es jetzt eigentlich nur noch um die sache die ich dir im vorherigen Beitrag geschildert hab. Ist das möglich und kann man beide makros zusammen fassen?

BoskoBiati
23.03.2009, 18:34
Hallo Benny,

wenn Du Dein Makro so änderst:
Dim WkSh_Q As Worksheet
Dim WkSh_Z As Worksheet
Dim rZelle As Range
Dim sFundst As String
Dim Suchbegriff As Boolean
Dim Suchbegriff2 As String
Dim lZeile_Z As Long

Set WkSh_Q = ThisWorkbook.Worksheets("Anwesenheitsplan")
Set WkSh_Z = ThisWorkbook.Worksheets("Einsatzplan")

dann noch
Suchbegriff2 = "W"
und
Set rZelle = .Find(What:=Suchbegriff2, LookAt:=xlPart, LookIn:=xlValues, MatchCase:=True)

dann hast Du schon die besten Vorraussetzungen, um alle Anweisungen in einem Makro unterzubringen.
Übrigens: Die VBA-Hilfe zeigt Dir unter Datentypen an, was die Begriffe hinter dem As in der Dim-Anweisung bedeuten!
Und wie Ingolf schon schrieb, wenn der Suchbegriff immer "Falsch" ist, dann geht es auch ohne die Variable Suchbegriff.
Zudem durchsucht jedes dieser with-Blöcke eine Spalte und kopiert die gefundenen Namen irgendwohin:
WkSh_Z.Cells(lZeile_Z, "D").Value = WkSh_Q.Cells(rZelle.Row, "A").Value
wobei das .value auch entfallen kann.
Diese With Blöcke könnte man in einer Schleife zusammenfassen:
for Spalte=2 to 8 (entspricht den Spalten B bis H)
With WkSh_Q.Columns(Spalte)
---> restlicher Block aus Deinem Makro
next
und Du brauchst dies Anweisung nur einmal. Wobei das nur eine Variante ist.

bennyboy
23.03.2009, 20:31
OK Leute Ihr habt mir soweit echt super geholfen,
vielen vielen DANK.

aber jetzt noch einmal zu der letzten Geschichte zu diesem Thema....

Hier nocheinmal der gesamte Code im Überblick:

Public Sub SuchenKopieren()

Dim WkSh_Q As Worksheet
Dim WkSh_Z As Worksheet
Dim rZelle As Range
Dim sFundst As String
Dim Suchbegriff As Boolean
Dim Suchbegriff2 As String
Dim lZeile_Z As Long

Set WkSh_Q = ThisWorkbook.Worksheets("Anwesenheitsplan")
Set WkSh_Z = ThisWorkbook.Worksheets("Einsatzplan")

'==
'Anweisung 1
Suchbegriff = False
lZeile_Z = 42 'Startwert - 1 für die Ausgabe der ersten Zeile, hier erfolgt die erste
'erste Ausgabe in Zeile 10

With WkSh_Q.Columns("B")
Set rZelle = .Find(What:=Suchbegriff, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
WkSh_Z.Cells(lZeile_Z, "B").Value = WkSh_Q.Cells(rZelle.Row, "A").Value
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

'==
'Anweisung 2
Suchbegriff = False
lZeile_Z = 42 'Startwert - 1 für die Ausgabe der ersten Zeile, hier erfolgt die erste
'erste Ausgabe in Zeile 10

With WkSh_Q.Columns("C")
Set rZelle = .Find(What:=Suchbegriff, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
WkSh_Z.Cells(lZeile_Z, "D").Value = WkSh_Q.Cells(rZelle.Row, "A").Value
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

'==
'Anweisung 3
Suchbegriff = False
lZeile_Z = 42 'Startwert - 1 für die Ausgabe der ersten Zeile, hier erfolgt die erste
'erste Ausgabe in Zeile 10

With WkSh_Q.Columns("D")
Set rZelle = .Find(What:=Suchbegriff, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
WkSh_Z.Cells(lZeile_Z, "F").Value = WkSh_Q.Cells(rZelle.Row, "A").Value
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

'==
'Anweisung 4
Suchbegriff = False
lZeile_Z = 42 'Startwert - 1 für die Ausgabe der ersten Zeile, hier erfolgt die erste
'erste Ausgabe in Zeile 10

With WkSh_Q.Columns("E")
Set rZelle = .Find(What:=Suchbegriff, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
WkSh_Z.Cells(lZeile_Z, "H").Value = WkSh_Q.Cells(rZelle.Row, "A").Value
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

'==
'Anweisung 5
Suchbegriff = False
lZeile_Z = 42 'Startwert - 1 für die Ausgabe der ersten Zeile, hier erfolgt die erste
'erste Ausgabe in Zeile 10

With WkSh_Q.Columns("F")
Set rZelle = .Find(What:=Suchbegriff, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
WkSh_Z.Cells(lZeile_Z, "J").Value = WkSh_Q.Cells(rZelle.Row, "A").Value
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

'==
'Anweisung 6
Suchbegriff = False
lZeile_Z = 42 'Startwert - 1 für die Ausgabe der ersten Zeile, hier erfolgt die erste
'erste Ausgabe in Zeile 10

With WkSh_Q.Columns("G")
Set rZelle = .Find(What:=Suchbegriff, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
WkSh_Z.Cells(lZeile_Z, "L").Value = WkSh_Q.Cells(rZelle.Row, "A").Value
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

'==
'Anweisung 7
Suchbegriff2 = "W"
lZeile_Z = 42 'Startwert - 1 für die Ausgabe der ersten Zeile, hier erfolgt die erste
'erste Ausgabe in Zeile 10

With WkSh_Q.Columns("H")
Set rZelle = .Find(What:=Suchbegriff2, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
WkSh_Z.Cells(lZeile_Z, "A").Value = WkSh_Q.Cells(rZelle.Row, "A").Value
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

Set rZelle = Nothing
Set WkSh_Z = Nothing
Set WkSh_Q = Nothing

End Sub



Es wird also jeweils in einer Spalte des 1. Tabellenblatts gesucht und in eine Spalte des 2. Tabellenblatts kopiert. Passt alles soweit.

Jetzt möchte ich aber, dass zuerst Anweisung 7 ausgeführt wird.....Suche nach "W" >>> Eingefügt wird in Spalte A des anderen Tabellenblattes.

Anschließend sollen die anderen Anweisungen NUR noch diese Werte in das 2. Tabellenblatt kopieren, die noch NICHT in Spalte A kopiert wurden.

Zum Verständnis: Mit Anweisung 7 werden die jenigen Personen kopiert, die sich im Urlaub befinden. Diese sollen dann NICHT mehr in den anderen Spalten aufgeführt werden, wo die jenigen Personen kopiert werden die FREI haben. Hier soll nämlich unterschieden werden. Ist das irgendwie zu lösen???

Etwa irgendeine Bedingung in den Anweisungen 1-6???

Falls Ihr mich nicht versteht versuche ich es nochmal zu erklären. Wäre echt super wenn nochmal einer helfen könnte, dann könnte ich die Sache endgültig abschließen...

Danke vielmals

BoskoBiati
23.03.2009, 22:12
Hallo Benny,

probier mal Folgendes:

Dim Spalte as Long
Dim strVar as string


for Spalte=8 to 2 step -1
With WkSh_Q.Columns(Spalte)
If Spalte =8 then
strVar=suchbegriff2
else strVar=suchbegriff
end if
Set rZelle = .Find(What:=StrVar, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
if wksh_Q.Cells(rZelle.row,Spalte)="" then
WkSh_Z.Cells(lZeile_Z, Spalte) = WkSh_Q.Cells(rZelle.Row, 1)
end if
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

bennyboy
24.03.2009, 06:30
hi !

Ok kann ich gerne versuchen. Aber ich bin totaler anfänger. Wo in meinem code wäre deiner nun einzufügen? Muß ich jetzt dadurch irgendwas ändern an meinem bisherigen Makro oder entfällt meiner jetzt komplett?vielleicht kannste mir einfach mal den kompletten Code nochmal reinstellen?

Vielen dank!

Benny

BoskoBiati
24.03.2009, 06:56
Hallo Benny,

die Dim-Anweisungen zu den Übrigen, den Rest zwischen diese Zeilen:
Set WkSh_Z = ThisWorkbook.Worksheets("Einsatzplan")


Set rZelle = Nothing
Alles was jetzt dazwischen steht löschen. Kopiere Dir aber vorher Dein Makro, damit Du es noch hast, falls etwas nicht funktioniert.

bennyboy
24.03.2009, 07:56
du meinst so:

Public Sub SuchenKopieren()

Dim WkSh_Q As Worksheet
Dim WkSh_Z As Worksheet
Dim rZelle As Range
Dim sFundst As String
Dim Suchbegriff As Boolean
Dim Suchbegriff2 As String
Dim lZeile_Z As Long
Dim Spalte As Long
Dim strVar As String



Set WkSh_Q = ThisWorkbook.Worksheets("Anwesenheitsplan")
Set WkSh_Z = ThisWorkbook.Worksheets("Einsatzplan")

For Spalte = 8 To 2 Step -1
With WkSh_Q.Columns(Spalte)
If Spalte = 8 Then
strVar = Suchbegriff2
Else: strVar = Suchbegriff
End If
Set rZelle = .Find(What:=strVar, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
If WkSh_Q.Cells(rZelle.Row, Spalte) = "" Then
WkSh_Z.Cells(lZeile_Z, Spalte) = WkSh_Q.Cells(rZelle.Row, 1)
End If
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

Set rZelle = Nothing
Set WkSh_Z = Nothing
Set WkSh_Q = Nothing

End Sub



Aber da ist ja jetzt garkeine Suchbegriffe gegeben und kein Kopierziel....

Fehlermeldung: "FOR ohne Text"

Könntest du dir das bitte nochmal ansehn???

Danke dir

Benny

BoskoBiati
24.03.2009, 09:09
Hallo Benny,

mein Fehler,
hatte next vergessen:

End With

next

Die ganzen festen Begriffe sind jetzt variabel, deswegen gibt´s kein "A" o. "B" mehr.

Probier´s mit der Änderung nochmal.

bennyboy
24.03.2009, 09:21
hehe cool...

sehr lustig...hat leider nich geklappt aber jetzt hat er mir die überschrift des Anwesenheitsplan in den Einsatzplan unten rein kopiert :-))

Muss irgendwo nen fehler sein


Public Sub SuchenKopieren()

Dim WkSh_Q As Worksheet
Dim WkSh_Z As Worksheet
Dim rZelle As Range
Dim sFundst As String
Dim Suchbegriff As Boolean
Dim Suchbegriff2 As String
Dim lZeile_Z As Long
Dim Spalte As Long
Dim strVar As String



Set WkSh_Q = ThisWorkbook.Worksheets("Anwesenheitsplan")
Set WkSh_Z = ThisWorkbook.Worksheets("Einsatzplan")

For Spalte = 8 To 2 Step -1
With WkSh_Q.Columns(Spalte)
If Spalte = 8 Then
strVar = Suchbegriff2
Else: strVar = Suchbegriff
End If
Set rZelle = .Find(What:=strVar, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
lZeile_Z = lZeile_Z + 1
If WkSh_Q.Cells(rZelle.Row, Spalte) = "" Then
WkSh_Z.Cells(lZeile_Z, Spalte) = WkSh_Q.Cells(rZelle.Row, 1)
End If
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With

Next

Set rZelle = Nothing
Set WkSh_Z = Nothing
Set WkSh_Q = Nothing

End Sub



Also das ist jetzt das komplette Makro....also ich hab zwar keine Ahnung aber mir kommt das schon etwas komisch vor der Code....es steht etwas von Suchbegriff und Suchbegriff2 aber es wird nirgendwo gesagt was der Suchbegriff überhaupt ist.....also wäre echt super wenn du nochmal drüberschaun könntest irgendwas ist doch da faul oder??

Benny

bennyboy
24.03.2009, 10:11
hey bosko,

damit du mir vielleicht doch nochmal helfen kannst hab ich dir eine Beispieldatei gemacht und nochmal dazugeschrieben wie es sein soll...

vielleicht tust du mir ja nochmal den gefallen und versuchst es noch einmal.

Zur veranschaulichung hab ich dir mal eine Datei hochgeladen


Benny

BoskoBiati
24.03.2009, 14:09
Hallo Benny,

hier mal ein Makro, was m.E. Deine Wünsche erfüllt.
Es gibt allerdings mit hoher Wahrscheinlichkeit noch feinere Methoden.


Public Sub SuchenKopieren()


Dim rZelle As Range
Dim sFundst As String
Dim Spalte As Long
Dim strVar As String
Dim xZeile As Long


For Spalte = 8 To 2 Step -1
xZeile = 30
With Worksheets("Tabelle1").Columns(Spalte)
If Spalte = 8 Then
strVar = "W"
Else: strVar = "false"
End If
Set rZelle = .Find(What:=strVar, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
If strVar = "W" Then
Worksheets("Tabelle2").Cells(xZeile, 1) = Worksheets("Tabelle1").Cells(rZelle.Row, 1)

End If
If Spalte <> 8 Then
Worksheets("Tabelle2").Cells(xZeile, Spalte) = Worksheets("Tabelle1").Cells(rZelle.Row, 1)

End If
xZeile = xZeile + 1
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
'MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.",
'48, " Hinweis für " & Application.UserName
End If
End With

Next
For Spalte = 2 To 7
For xZeile = Worksheets("Tabelle2").Cells(Rows.Count, "a").End(xlUp).Row To 30 Step -1

If Worksheets("Tabelle2").Cells(xZeile, Spalte) = Worksheets("Tabelle2").Cells(xZeile, 1) Then
Worksheets("Tabelle2").Cells(xZeile, Spalte).Delete xlShiftUp
End If
Next
Next



Set rZelle = Nothing


End Sub

Übrigens: Du hast mehrere Threads hier laufen. Falls einer abgeschlossen ist, dann markiere es bitte auch entsprechend. Danke

Gruß

Edgar

bennyboy
24.03.2009, 14:51
Traumhaft...

ich glaube ich würde das selber nie so hinbekommen!!!!


vielen Dank!!

Normalerweise setzte ich ein Thema wenn es für mich abgeschlossen ist immer auf erledigt. sollte ich es mal vergessen haben dann tut es mir leid...

also dieses Thema zumindest kann ich jetzt auf Erledigt setzen ;-)

Danke nochmal

bennyboy
24.03.2009, 15:15
hubs shit doch noch ein kleines problem,

jetzt hätte ich es fast selber übersehen...

in deinem makro wird auf Tabelle2 in Spalte A-G kopiert.

er soll aber A (suche aus Spalte H des 1 Tabellenblatts)

und dann in spalte b,d,f,h,j,l also jeweils nur in jede 2. splate kopieren...

hatte ich aber auch so in der Beispiel.xls so beschrieben. jetzt weiss ich natürlich wieder nicht wie das abzuändern ist???

BoskoBiati
24.03.2009, 15:17
Hallo Benny,

vor 2Monaten hätte ich das auch gesagt. Mit viel Stöbern in Foren, Lesen der Hilfe und Probieren schafft man das schnell. Wichtig ist aber, dass man nachvollziehen kann, was die einzelnen Anweisungen machen. Ich glaube da liegt ein Teil Deiner Probleme. Jeden Code, den man sich irgendwo holt sollte man Schritt für Schritt durchgehen, um zu sehen, was er macht. ;)

Gruß

Edgar

BoskoBiati
24.03.2009, 15:33
Hallo Benny,

ändere die folgenden Zeilen:

If Spalte <> 8 Then
Worksheets("Tabelle2").Cells(xZeile, 2 * (Spalte - 1)) = Worksheets("Tabelle1").Cells(rZelle.Row, 1)
For Spalte = 2 To 12 step 2
Übrigens: Deine MsgBox habe ich abgeschaltet, da Sie bei jedem Suchvorgang erscheint. Würde mich stören, wenn ich ständig so eine Meldung wegklicken müsste.
'MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.",
'48, " Hinweis für " & Application.UserName

Gruß

Edgar

bennyboy
24.03.2009, 15:34
danke für deine tips ;-)

was vor 2 monaten????? WOW so schnell ging das bei dir????

das macht hoffnung

jetzt hast du aber übersehen das ich doch noch nen problem gehabt hatte....vielleicht nochmal kurz helfen hehe ;-)

Danke

und schon hast du geantwortet du hast schneller antworten als ich fragen kann haha :-)

Benny

BoskoBiati
24.03.2009, 15:37
Ein Problem, welches Du mit ein bisschen bemühen selbst hättest lösen können!:(

bennyboy
24.03.2009, 15:45
ach was, wie denn????

woher soll ich das wissen mit dem 2-12 step 2 und dem 2 * Spalte-1 und in klammern????


die seite zeigst du mir mal wo ich das hätte so schnell herausgefunden!! OHNE FORUM!!!


Vielen Dank dir aber für alles !!!!


echt super

Benny

bennyboy
24.03.2009, 16:09
doch noch nicht ganz kakke :-))


durch mehrfaches ausprobieren habe ich jetzt folgendes festgestellt...

kann es sein das du in dem makro gesagt hast wenn ein Name schon in der Urlaubsspalte also Spalte A zb in A43 steht, dann löscht er den Namen aus Spalte B43 D43 F43 usw. raus.....NICHT ABER aus Spalte B44 oder D45 .

es kann durchaus sein, das ein Name durch das Makro gleichzeitig in A43 und B45 kopiert wird. Das darf aber nicht sein. Sprich wenn er bereits in Spalte A kopiert hat darf er überhaupt nicht mehr in Spalte B,D,F,H usw kopiert werden.

Hab ich das richtig erkannt und könntest du mir bitte bitte das noch zeigen was ich da abzuändern habe ....

Benny

BoskoBiati
24.03.2009, 16:40
Hallo Benny,

z.B. die VBA-Hilfe aufrufen. Da steht Folgendes:
For...Next-Anweisung


Wiederholt eine Gruppe von Anweisungen so oft wie angegeben.

Syntax

For Zähler = Anfang To Ende [Step Schritt]
[Anweisungen]
[Exit For]
[Anweisungen]

Next [Zähler]

Die Syntax für die For…Next-Anweisung besteht aus folgenden Teilen:

Teil Beschreibung
Zähler Erforderlich. Numerische Variable, die als Schleifenzähler dient. Eine boolesche Variable oder ein Element eines Datenfeldes ist nicht zulässig.
Anfang Erforderlich. Startwert von Zähler.
Ende Erforderlich. Endwert von Zähler.
Schritt Optional. Betrag, um den Zähler bei jedem Schleifendurchlauf verändert wird. Falls kein Wert angegeben wird, ist die Voreinstellung für Schritt eins.
Anweisungen Optional. Eine oder mehrere Anweisungen zwischen For und Next, die so oft wie angegeben ausgeführt werden.



Bemerkungen

Das Argument Schritt ist entweder positiv oder negativ. Der Wert des Arguments Schritt legt die Schleifenausführung folgendermaßen fest:

Wert Schleifenausführung, wenn
Positiv oder 0 Zähler <= Ende
Negativ Zähler >= Ende



Nachdem alle Anweisungen in der Schleife ausgeführt wurden, addiert das Programm Schritt zum Wert von Zähler hinzu. Die Anweisungen in der Schleife werden dann entweder erneut ausgeführt (aufgrund desselben Tests, der auch zu Beginn des ersten Durchlaufs durchgeführt wurde), oder das Programm beendet die Schleife und setzt die Ausführung mit der auf die Next-Anweisung folgenden Anweisung fort.

Tip°°°Das Ändern des Wertes von Zähler innerhalb einer Schleife kann zur Folge haben, daß der Code komplizierter und schwerer zu testen wird.

Innerhalb einer Schleife kann eine beliebige Anzahl von Exit For-Anweisungen an beliebiger Stelle als alternative Möglichkeit zum Verlassen der Schleife verwendet werden. Exit For wird oft in Zusammenhang mit der Auswertung einer Bedingung (zum Beispiel If...Then) eingesetzt und überträgt die Steuerung an die unmittelbar auf Next folgende Anweisung.

Sie können For...Next-Schleifen verschachteln, indem Sie eine For...Next-Schleife innerhalb einer anderen verwenden. Das Argument Zähler muß für jede Schleife einen eindeutigen Variablennamen erhalten. Die folgende Konstruktion ist korrekt:

For I = 1 To 10
For J = 1 To 10
For K = 1 To 10
...
Next K
Next J
Next I

Anmerkung°°°Wenn Sie Zähler in einer Next-Anweisung nicht angeben, wird die Ausführung trotzdem so fortgesetzt, als ob Zähler enthalten wäre. Eine Next-Anweisung vor der zugehörigen For-Anweisung führt zu einem Fehler.
_________________________
das 2*(Spalte-1) ist einfache Rechenarbeit: Spalte wird immer um 1 erhöht, aber die Spalte zum Eintragen um 2, beide starten bei 2

===========================================
Ansonsten ersetze am Ende des Makros alles was zwischen
End With und Set rZelle = Nothing
und füge den nachfolgenden Code ein:

Next

xZeile = Worksheets("Tabelle2").Cells(Rows.Count, "a").End(xlUp).Row
For Spalte = 2 To 12 Step 2

If xZeile < Worksheets("Tabelle2").Cells(Rows.Count, Spalte).End(xlUp).Row Then
xZeile = Worksheets("Tabelle2").Cells(Rows.Count, Spalte).End(xlUp).Row
End If
Next
wZeile = xZeile
For Spalte = 2 To 12 Step 2
Do Until xZeile = 29
For sZeile = 30 To Worksheets("Tabelle2").Cells(Rows.Count, "a").End(xlUp).Row
If Worksheets("Tabelle2").Cells(xZeile, Spalte) = Worksheets("Tabelle2").Cells(sZeile, 1) Then
Worksheets("Tabelle2").Cells(xZeile, Spalte).Delete xlShiftUp

End If
Next

xZeile = xZeile - 1
Loop
xZeile = wZeile
Next
Füge am Anfang noch ein:
Dim sZeile As Long
Dim wZeile As Long

jinx
24.03.2009, 17:21
Moin, BoskoBiati,

eine ganz einfache Anweisung: Löschen von Zellen/Zeilen immer von unten her mit negativer Schrittweite, damit das Gewurschtel am Zähler unterbleibt.

BoskoBiati
24.03.2009, 17:39
Hallo Jinx,

habe ich gemacht. Problem bei der Geschichte ist, dass ich nicht weiß, wieviel Einträge in der Tabelle2 letztendlich stehen. Es sieht danach aus als könnten in den unterschiedlichen Spalten ganz unterschiedliche Mengen an Namen stehen, so dass ich erst einmal jede Spalte abprüfen muß, wieviel Namen drin stehen, bis ich weiß, welches die höchste Zeilennummer ist. Deswegen das Gewurschtel mit den vielen Zählern. Ich gehe mal davon aus, dass es elegantere Lösungen gibt als meine, aber ich bin auch noch am Anfang der VBA-Wissensleiter.

OT: Es gab mal einen Thread zum Thema Kontrollkästchen, bei dem wir beide was geschrieben haben (auch von bennyboy, nicht als erledigt markiert). Mich würde interessieren, ob das was ich da gebastelt habe, realistisch ist.

bennyboy
24.03.2009, 18:01
hallo jinx und bosko...


ihr beiden seit für mich absolute profis und bosko das was du mir da alles erklärt hast gerade muss ich erstmal langsam durchgehen und eins nach dem anderen versuchen zu verstehen....


trotzdem stehe ich immernoch vor dem einen problem das ich in meinem vorherigen beitrag geschildert habe.

bitte les dir nochmal kurz diesen letzten beitrag von mir durch...

ich hoffe es ist keine große sache zum ändern sodass ich nun endlich die sache mit dem kopieren erledigt bekomme...

Danke dir

Benny

BoskoBiati
24.03.2009, 18:09
Hallo Benny,

ich habe den Code zwischendurch nochmals verändert! Bitte baue das ein, was jetzt in meinem Beitrag #27 steht. Damit ist es bei mir einwandfrei gelaufen.

bennyboy
24.03.2009, 18:34
also langsam bin ich verwirrt...

gerade habe ich jetzt diesen code eingebaut....


funktioniert nicht...

wenn ein name in A kopiert wurde soll er in keine andere spalte mehr kopiert werden...

mein aktueller code:


Public Sub SuchenKopieren()


Dim rZelle As Range
Dim sFundst As String
Dim Spalte As Long
Dim strVar As String
Dim xZeile As Long
Dim sZeile As Long
Dim wZeile As Long


For Spalte = 8 To 2 Step -1
xZeile = 43
With Worksheets("Anwesenheitsplan").Columns(Spalte)
If Spalte = 8 Then
strVar = "W"
Else: strVar = "false"
End If
Set rZelle = .Find(What:=strVar, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
If strVar = "W" Then
Worksheets("Einsatzplan").Cells(xZeile, 1) = Worksheets("Anwesenheitsplan").Cells(rZelle.Row, 1)

End If
If Spalte <> 8 Then
Worksheets("Einsatzplan").Cells(xZeile, 2 * (Spalte - 1)) = Worksheets("Anwesenheitsplan").Cells(rZelle.Row, 1)

End If
xZeile = xZeile + 1
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
'MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.",
'48, " Hinweis für " & Application.UserName
End If
End With

Next

xZeile = Worksheets("Einsatzplan").Cells(Rows.Count, "a").End(xlUp).Row
For Spalte = 2 To 12 Step 2

If xZeile < Worksheets("Einsatzplan").Cells(Rows.Count, Spalte).End(xlUp).Row Then
xZeile = Worksheets("Einsatzplan").Cells(Rows.Count, Spalte).End(xlUp).Row
End If
Next
wZeile = xZeile
For Spalte = 2 To 12 Step 2
Do Until xZeile = 43
For sZeile = 43 To Worksheets("Einsatzplan").Cells(Rows.Count, "a").End(xlUp).Row
If Worksheets("Einsatzplan").Cells(xZeile, Spalte) = Worksheets("Einsatzplan").Cells(sZeile, 1) Then
Worksheets("Einsatzplan").Cells(xZeile, Spalte).Delete xlShiftUp

End If
Next

xZeile = xZeile - 1
Loop
xZeile = wZeile
Next


Set rZelle = Nothing


End Sub



kann natürlich sein dass ich jetzt durch die vielen verschiedenen codes schon leicht verrückt bin :-)

wo is das problem?

Benny

BoskoBiati
24.03.2009, 19:07
Hallo Benny,

wieso steht das bei Dir im Code:
Do Until xZeile = 43
For sZeile = 43 To Worksheets("Einsatzplan").Cells(Rows.Count, "a").End(xlUp).Row
If Worksheets("Einsatzplan").Cells(xZeile, Spalte) = Worksheets("Einsatzplan").Cells(sZeile, 1) Then
Worksheets("Einsatzplan").Cells(xZeile, Spalte).Delete xlShiftUp
???
Das ist nicht mein Code!!!!!!

bennyboy
24.03.2009, 19:21
ok nochmal neu....fast hab ich bzw DU es ja geschafft :-)

also nochmal zu dem ursprünglichen code den DU mir gegeben hast und den ich auch so übernommen hatte, nur ein paar kleinigkeiten auf meine Datei zugeschnitten habe. Dieser Code funktioniert soweit:


Public Sub SuchenKopieren()


Dim rZelle As Range
Dim sFundst As String
Dim Spalte As Long
Dim strVar As String
Dim xZeile As Long


For Spalte = 8 To 2 Step -1
xZeile = 43
With Worksheets("Anwesenheitsplan").Columns(Spalte)
If Spalte = 8 Then
strVar = "W"
Else: strVar = "false"
End If
Set rZelle = .Find(What:=strVar, LookAt:=xlPart, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
If strVar = "W" Then
Worksheets("Einsatzplan").Cells(xZeile, 1) = Worksheets("Anwesenheitsplan").Cells(rZelle.Row, 1)

End If
If Spalte <> 8 Then
Worksheets("Einsatzplan").Cells(xZeile, 2 * (Spalte - 1)) = Worksheets("Anwesenheitsplan").Cells(rZelle.Row, 1)

End If
xZeile = xZeile + 1
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address <> sFundst
Else
'MsgBox "Der Begriff """ & Suchbegriff & """ wurde nicht gefunden.",
'48, " Hinweis für " & Application.UserName
End If
End With

Next
For Spalte = 2 To 12 Step 2
For xZeile = Worksheets("Einsatzplan").Cells(Rows.Count, "a").End(xlUp).Row To 43 Step -1

If Worksheets("Einsatzplan").Cells(xZeile, Spalte) = Worksheets("Einsatzplan").Cells(xZeile, 1) Then
Worksheets("Einsatzplan").Cells(xZeile, Spalte).Delete xlShiftUp
End If
Next
Next



Set rZelle = Nothing


End Sub



Das einzige was jetzt hier noch nicht passt, ist, dass er nur dann die zu kopierenden Namen aus den Spalten B-L löscht, wenn die Namen bereits in der GLEICHEN Zeile der Spalte A kopiert wurden. Beispiel: Spalte A40 wurde der Name "Müller" kopiert, dann würde er in der Spalte B40, D40, F40 usw den Namen Müller löschen. Nicht aber wenn der Name in Spalte B41, B42 oder D41, D42 kopiert wird. Es soll also so sein, dass wenn ein Name bereits in Spalte A kopiert wurde, dieser in den anderen Spalten (B,D,F,H,J und L) gelöscht wird egal wo er dort hinkopiert werden würde...

verstehst du mich??

Benny

BoskoBiati
24.03.2009, 19:49
Hallo Benny,

Du hast es nicht begriffen! Diese Zeilen waren in meinem Code, aber nicht mit diesen Zahlen! Du hast, ohne zu wissen was der Code macht, Veränderungen eingebaut, die ihn unbrauchbar machen. Was soll die Zahl 43 in Deinem Code? Habe ich die irgendwo stehen?
Wenn Du den Code nicht verstehst, dann solltest Du nicht daran rumbasteln! Und bevor Du Ihn veränderst, lass ihn so laufen wie er geschrieben ist. Er ist genau auf das Beispiel zugeschnitten, was Du zur Verfügung gestellt hast. Ich kann ja noch verstehen, dass Du Deine originalen Tabellennamen einsetzt, aber den Rest solltest Du erst einmal stehen lassen!:mad:

bennyboy
24.03.2009, 19:58
ähm ich bin dir ja sehr dankbar für alles aber das was du gerade geschrieben hast ist falsch!!

ich habe komplett deinen code wie du ihn mir geschrieben hast genommen nur das ich aus der startzeile aus der 30 eine 43 gemacht habe und die Tabellennamen geändert habe (sonst wäre es ja nicht gegangen) weil die Beispiel.xls ja nur eine Beispiel.xls war und nicht mein Original....

ansonsten habe ich alles so gelassen wie du es mir geschrieben hast. (wieso sollte ich auch sonst was ändern, da ich doch eh keine ahnung habe)

außerdem funktioniert der code, wie ich dir ja schon gesagt habe. das einzige ist eben nur wie ich dir ja schon geschrieben habe, das er bei der DELETE Anweisung meiner meinung nach NUR die gleichen Namen aus gleichen Zeilen löscht.

und dieses Problem ist nicht plötzlich bei meinem Original aufgetaucht, sondern das Problem habe ich schon gemerkt als ich deinen originalen code in meine Beispiel.xls eingebaut habe, die du ja beim erstellen des codes verwendet hast.

Benny


PS. hast du denn jetzt eine idee wie ich das letzte problemchen noch lösen kann?

BoskoBiati
24.03.2009, 20:17
Hallo Benny,

1. wieso gibst Du an, das die Daten ab Zeile 30 geschrieben werden sollen, wenn das garnicht stimmt?
2. wenn Du nicht weißt, wie der Code funktioniert, wieso weißt Du dann das er nicht richtig arbeitet?
3. hast Du ein Muster, an dem Du feststellen kannst, ob die Daten richtig gelöscht werden?
4. Gibt es noch irgendetwas, was jetzt anders ist, als Du die ganze Zeit haben wolltest?
Das, was ich Dir zur Verfügung gestellt habe, macht genau das, was Du wolltest:
Es kopiert die Namen, die mit "W" gekennzeichnet sind in die 2.Tabelle. Dann kopiert es die Namen der Kollegen, bei denen "Falsch" in Tabelle 1 steht nach Tabelle 2, im Abstand von 2Spalten. Dann löscht es die Namen der Kollegen, die in Spalte A stehen, so dass in den übrigen Spalten nur Namen stehen, die nicht in A vorkommen. Was willst Du noch?

bennyboy
24.03.2009, 20:38
Das, was ich Dir zur Verfügung gestellt habe, macht genau das, was Du wolltest:
Es kopiert die Namen, die mit "W" gekennzeichnet sind in die 2.Tabelle. Dann kopiert es die Namen der Kollegen, bei denen "Falsch" in Tabelle 1 steht nach Tabelle 2, im Abstand von 2Spalten. Dann löscht es die Namen der Kollegen, die in Spalte A stehen, so dass in den übrigen Spalten nur Namen stehen, die nicht in A vorkommen. Was willst Du noch?

alles korrekt, außer das fett geschriebene.

Hier nochmal die Beispiel.xls mit deinem code... Überprüfe den code. es ist genau deiner. habe ihn gerade nochmal kopiert aus deinem beitrag auf seite 2

Versuch es selber.....führe das makro aus und du wirst sehen auf Tabelle2 das Namen die in A stehen auch in den anderen Spalten stehen...

und wenn du es genau studierst wirst du sehen, das wenn der Name in Spalten B,C,D usw in der gleichen Zeile steht wie in Spalte A dann wird er gelöscht, sonst aber nicht! Siehe Schulz/Achmet

Benny

BoskoBiati
24.03.2009, 20:48
Hallo Benny,

1. ist das nicht der Code, der in #27 steht, also kann es nicht funktionieren! Habe aber in #31 geschrieben, dass Du den verwenden sollst!
2. warum muß der Code in ein eigenes Modul, der kann doch hinter die Tabelle.

bennyboy
24.03.2009, 20:54
in Beitrag 27 stehen leider wieder nur teile von dem code oder?

damit kommt ein anfänger wie ich leider nicht zurecht!


tu mir doch den gefallen und stell mir den ganzen deiner meinung anch richtigen code nochmal rein bitte bitte bitte,

ich zerbrech mir hier den kopf und du hättest es in 1 minute da stehen..

sei so lieb!

wäre dir echt sehr dankbar

Benny

BoskoBiati
24.03.2009, 20:58
Hallo Benny,

in #27 steht auch, was Du machen sollst. Also mach es so. (Mit Copy & Paste kennst Du Dich doch aus,oder?)

bennyboy
24.03.2009, 21:20
hm okay....

habe das jetzt auf mein original angepasst und es hat funktioniert.

hatte das eigentlich vorhin schon einmal gemacht und da ging es nicht.....hm ok tut mir leid für die arbeit die ich dir gemacht habe...jetzt bin ich fertig mit der sache....

kann mich nur noch mal bei dir für alles bedanken...


vielleicht hab ich ja bald mal wieder die ehre mit dir, wenn ich mal wieder ne frage habe :-)

bENNY

BoskoBiati
24.03.2009, 22:12
Hallo Benny,

dann nochmal zum Thema erledigt: Du hast bis jetzt 20Threads gestartet, davon sind 15, inklusive diesem hier, nicht als erledigt gekennzeichnet.