Excel nur kopieren wenn Datum nicht schon vorhanden VBA
Hallo zusammen,
folgendes Aufgabe:
In einer ExceltabelleEingabe steht im Blatt2 A3 ein Datum. Dieses soll nun mit der anderen ExceltabelleAusgabe im Blatt3 SpalteB verglichen werden. Wenn es das Datum dort noch nicht gibt, sollen aus der ExceltabelleEingabe aus dem Blatt3 die Zellen A1:A5 in die ExecltabelleAusgabe in die nächste freie Zeile ab SpalteB kopiert werden, wenn es das Datum dort schon gibt soll eine Meldung kommen "Datum schon vorhanden" und ein Rücksprung ganz an den Anfag des Codes gehen um den gesamten Ablauf neu zu starten. Teilweise bekomme ich es zwar hin das die Meldung kommt, aber der Rücksprung klappt nicht bzw. wenn das Datum nicht vorhanden ist wird trotzdem leider nicht kopiert.
Ich hoffe mich einigemaßen vertändlich ausgedrückt zu haben.
Schon mal Dank an die VBA-Spezialisten.
Gruß
hugo
folgendes Aufgabe:
In einer ExceltabelleEingabe steht im Blatt2 A3 ein Datum. Dieses soll nun mit der anderen ExceltabelleAusgabe im Blatt3 SpalteB verglichen werden. Wenn es das Datum dort noch nicht gibt, sollen aus der ExceltabelleEingabe aus dem Blatt3 die Zellen A1:A5 in die ExecltabelleAusgabe in die nächste freie Zeile ab SpalteB kopiert werden, wenn es das Datum dort schon gibt soll eine Meldung kommen "Datum schon vorhanden" und ein Rücksprung ganz an den Anfag des Codes gehen um den gesamten Ablauf neu zu starten. Teilweise bekomme ich es zwar hin das die Meldung kommt, aber der Rücksprung klappt nicht bzw. wenn das Datum nicht vorhanden ist wird trotzdem leider nicht kopiert.
Ich hoffe mich einigemaßen vertändlich ausgedrückt zu haben.
Schon mal Dank an die VBA-Spezialisten.
Gruß
hugo
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 233072
Url: https://administrator.de/contentid/233072
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
12 Kommentare
Neuester Kommentar
Hallo,
Nein. Netter Aufsatz, aber was sollen wir damit und welche Planquadratkarten hast du geraucht?
Und den zugehörigen Quellcode wirst du mitliefern müssen, damit wir wissen was du den tatsächlich dort tust bzw. erahnen können was du denn tun willst... Code tags Formatierungen in den Beiträgen sind für den Quellcode nützlich.
Gruß,
Peter
Nein. Netter Aufsatz, aber was sollen wir damit und welche Planquadratkarten hast du geraucht?
Schon mal Dank an die VBA-Spezialisten.
Für? Solltest du hier Hilfe haben wollen, so solltest du es uns auch tatsächlich sagen bzw. uns deine Frage auch tatsächlich stellen und nicht uns einfach etwas lesestoff hinschmeßen.Und den zugehörigen Quellcode wirst du mitliefern müssen, damit wir wissen was du den tatsächlich dort tust bzw. erahnen können was du denn tun willst... Code tags Formatierungen in den Beiträgen sind für den Quellcode nützlich.
Gruß,
Peter
Hallo,
Bitte nutze die Code tags Formatierungen in den Beiträgen Das tut einem ja in den Augen weh...
Gruß,
Peter
Bitte nutze die Code tags Formatierungen in den Beiträgen Das tut einem ja in den Augen weh...
Frage war, wie geht das mit dem Rücksprung zur Inputbox am Anfang des Codes bzw. warum kopiert er nicht wenn das Datum nicht vorhanden ist?
Schon mal deinen Code im Einzelschrittmodus durchgetickert und geschaut welche Werte wann und wo existieren und wie deine Entscheidungen darauf reagieren (nennt sich Debuggen)?Gruß,
Peter
Hallo,
Sondern? Du siehst doch was dein Code als nächstes tun will. Ist aber auch im Einzelschrittverfahren ganz klar erkennbar was dort passiert und das vergleichst du mit deinen "Was will ich".
Gruß,
Peter
Sondern? Du siehst doch was dein Code als nächstes tun will. Ist aber auch im Einzelschrittverfahren ganz klar erkennbar was dort passiert und das vergleichst du mit deinen "Was will ich".
ich aber auch leider nicht wie man das machen kann,
Deinen Code sagen was der tun soll.oder wenn das Datum noch nicht vorhanden ist kopiert er aber nicht sondern läuft einfach zum Ende durch.
Joa. Klar. Und wenn du noch deinen Code (auch nachträglich möglich) in Code Tags pappst, kann ich dir auch ein Zeilennummer nennen. Aber auch das siehst du wenn du deinen Code im Einzelschrittverfahren durchtickerst. Du solltest deine Code schon lesen und verstehen können und sehen was passiert obwohl du wolltest das etwas anderes passiert.Gruß,
Peter
Hallo hugo,
lad dir dieses Demonstrations-File runter. In diesem sind zwei Excel-Files, Kopiere beide Files in einen Ordner und das mit den Makros öffnest du dann.
ExcelSearchAndCopy_233072.zip
Hier der Code daraus:
Denke daran kannst du dir abschauen wie es funktioniert, und ich erspare mir ausschweifende Erläuterungen. Habe es nach deiner ursprünglichen Beschreibung aufgebaut. Deinen Code habe ich jetzt nicht beachtet, da ohne Codetags, dazu fügst den Code zwischen solche Tags ein:
Grüße Uwe
lad dir dieses Demonstrations-File runter. In diesem sind zwei Excel-Files, Kopiere beide Files in einen Ordner und das mit den Makros öffnest du dann.
ExcelSearchAndCopy_233072.zip
Hier der Code daraus:
Dim wbTarget
Dim wbSource
Sub Suche()
Set wbSource = Workbooks(1)
If TypeName(wbTarget) = "Empty" Then
Set wbTarget = Workbooks.Open(ActiveWorkbook.Path & "\DOC2.xlsx")
End If
Set wsIN1 = wbSource.Worksheets(1)
Set wsIN3 = wbSource.Worksheets(3)
Set wsOUT = wbTarget.Worksheets(3)
found = False
With wsOUT.Range("B:B")
Set c = .Find(wsIN1.Range("A3").Value, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
found = True
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
If Not found Then
wsIN3.Range("A1:A5").Copy
wsOUT.Range("B1").End(xlDown).Offset(1, 0).PasteSpecial
Else
MsgBox "Datum schon vorhanden"
End If
End Sub
Grüße Uwe
[OT]
Moin hugoundertaker, Pjordorf und colinardo,
Immerhin haben schon die diversen Hinweise, wie sich hier im Forum Kot in Täx packen lassen könnte, ungefähr 73 laufende Zentimeter dieses Beitrags in Anspruch genommen.
Ich denke auch, es wäre zielführender, auf die jeweilige Zeilennummer im (mit Codetags formatierten) Sourcefragment hinweisen zu können als ein Rundum-Sorglos-Paket zu liefern.
Aber in diesem Beitrag weigere ich mich auch, die Codetags nachzutragen - wie das geht, ist jetzt schon gefühlte 5x geppostet worden
Ist alles sehr knapp am Papierkorb vorbei.
Grüße
Biber
[/OT]
Moin hugoundertaker, Pjordorf und colinardo,
Zitat von @colinardo:
Denke daran kannst du dir abschauen wie es funktioniert, und ich erspare mir ausschweifende Erläuterungen.
Davon glaube ich weder den ersten noch den zweiten Teilsatz.Denke daran kannst du dir abschauen wie es funktioniert, und ich erspare mir ausschweifende Erläuterungen.
Immerhin haben schon die diversen Hinweise, wie sich hier im Forum Kot in Täx packen lassen könnte, ungefähr 73 laufende Zentimeter dieses Beitrags in Anspruch genommen.
Ich denke auch, es wäre zielführender, auf die jeweilige Zeilennummer im (mit Codetags formatierten) Sourcefragment hinweisen zu können als ein Rundum-Sorglos-Paket zu liefern.
Aber in diesem Beitrag weigere ich mich auch, die Codetags nachzutragen - wie das geht, ist jetzt schon gefühlte 5x geppostet worden
Ist alles sehr knapp am Papierkorb vorbei.
Grüße
Biber
[/OT]
Hallo,
Aber du hast es doch geschafft diesen Code zu Schreiben.
oder . Den Unterschied mit der Zeilennummern siehst du?
Du rufts deine Procedure Datumscheck ' Prüfen ob Datum schon vorhanden auf, diese wird abgearbeitet und dann kommst du zurück. Du machst dann dort weiter mit dein Arbeitsblattloeschen und da ist eben dein Fehler. Du musst bevor du dein Arbeitsblattloeschen aufrufst schauen ob dein Datumscheck ' Prüfen ob Datum schon vorhanden ein datum gefunden hat oder nicht und entsprechend dann entscheiden ob du normal weitermachen willst oder etwas anderws tun willst. Entweder merkst du dier mit Hilfe einer Globalen (Public) Variable ob deine datumsprüfung erfolgreich war oder etwas eleganter ist es, wenn du deine Procedure Datumscheck ' Prüfen ob Datum schon vorhanden in einer Funktion namens Datumscheck ' Prüfen ob Datum schon vorhanden wandelst und dir als Rückgabewert ein Wahr oder Falsch liefern lässt und dieses dann als Entscheidungskriterium ob einfach weiter oder eben etwas anderes genmacht werden soll.
Eine Funktion liefert einen Rückgabewert, eine Procedure nicht. Sub Funktion oder SUB.
Eine Variable kann lokal an eine Procedure oder Funktion gebunden sein oder halt Global über alle Module hinweg
Es gibt sicherlich noch mehr Varianten um den Ablauf des Programms dazu zu bringen deine Wünsche gerecht zu werden. Das sind nur zwei davon.
Gruß,
Peter
Aber du hast es doch geschafft diesen Code zu Schreiben.
Und das mit den CodeTags funktioniert auch nicht, vielleicht mache ich da ja was falsch.
Aber was? Und ein "funktioniert nicht" ist eben keine Fehlermeldung oder etwas mit irgendeiner irgendetwas anfangen kann.Hier steht ein Text der Quellcode darstellen soll
Hier steht Text der kein Quellcode darstellen soll
Aber vielleicht kann man mir ja trotzdem einfach mal helfen???
Etwa so?Du rufts deine Procedure Datumscheck ' Prüfen ob Datum schon vorhanden auf, diese wird abgearbeitet und dann kommst du zurück. Du machst dann dort weiter mit dein Arbeitsblattloeschen und da ist eben dein Fehler. Du musst bevor du dein Arbeitsblattloeschen aufrufst schauen ob dein Datumscheck ' Prüfen ob Datum schon vorhanden ein datum gefunden hat oder nicht und entsprechend dann entscheiden ob du normal weitermachen willst oder etwas anderws tun willst. Entweder merkst du dier mit Hilfe einer Globalen (Public) Variable ob deine datumsprüfung erfolgreich war oder etwas eleganter ist es, wenn du deine Procedure Datumscheck ' Prüfen ob Datum schon vorhanden in einer Funktion namens Datumscheck ' Prüfen ob Datum schon vorhanden wandelst und dir als Rückgabewert ein Wahr oder Falsch liefern lässt und dieses dann als Entscheidungskriterium ob einfach weiter oder eben etwas anderes genmacht werden soll.
Eine Funktion liefert einen Rückgabewert, eine Procedure nicht. Sub Funktion oder SUB.
Eine Variable kann lokal an eine Procedure oder Funktion gebunden sein oder halt Global über alle Module hinweg
Es gibt sicherlich noch mehr Varianten um den Ablauf des Programms dazu zu bringen deine Wünsche gerecht zu werden. Das sind nur zwei davon.
Gruß,
Peter
Zitat von @hugoundertaker:
das mit den Code Tags war ein Denkfehler, ich dachte das er mir das auch entsprechend in der Vorschau anzeigt und da tat sich nichts.
das ist in der Tat gerade ein Bug des Systems, was ich heute schon @Frank gemeldet habe...das mit den Code Tags war ein Denkfehler, ich dachte das er mir das auch entsprechend in der Vorschau anzeigt und da tat sich nichts.