Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Excel nur kopieren wenn Datum nicht schon vorhanden VBA

Frage Microsoft Microsoft Office

Mitglied: hugoundertaker

hugoundertaker (Level 1) - Jetzt verbinden

19.03.2014, aktualisiert 08.04.2014, 3080 Aufrufe, 12 Kommentare, 1 Danke

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
Mitglied: Pjordorf
19.03.2014 um 15:33 Uhr
Hallo,

Zitat von hugoundertaker:
Ich hoffe mich einigemaßen vertändlich ausgedrückt zu haben.
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 http://www.administrator.de/faq/20#toc-27 sind für den Quellcode nützlich.

Gruß,
Peter
Bitte warten ..
Mitglied: hugoundertaker
19.03.2014, aktualisiert 20.03.2014
Hallo Peter,

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?
Hier nun der Hauptcode:
01.
Private Sub Workbook_Open() 
02.
Arbeitsblattloeschen 
03.
' Eingabebox für Datum um richte Datei zu finden 
04.
Dim sTxt As String, sPrompt As String, sDefault As String, sPath As String 
05.
   Do 
06.
   sPath = "Y:\Arbeitsordner\" 
07.
   sPrompt = "Eingangsdatum eingeben:" & vbLf & _ 
08.
   vbLf & _ 
09.
   "Nutzen Sie bitte folgende Syntax:" & vbLf & _ 
10.
   "'yyyy_mm_dd' oder das 'Abbruch'-Feld zum verlassen!" 
11.
   sDefault = Format("yyyy_mm_dd") 
12.
   sTxt = InputBox(prompt:=sPrompt, Default:=sDefault) 
13.
   If sTxt = "Ende" Then Exit Sub 
14.
   If StrPtr(sTxt) = 0 Then GoTo Ende 
15.
   If sTxt = "" Then 
16.
   MsgBox "Kein gültiges Datumsformat!" 
17.
   ElseIf Dir(sPath & sTxt & ".txt") = "" Then 
18.
   MsgBox "Datei " & sTxt & ".txt nicht vorhanden!" 
19.
   Else 
20.
   Exit Do 
21.
   End If 
22.
   Loop   
23.
    Sheets("Tabelle1").Activate 
24.
Range("A1").Select    
25.
   ' Import der Daten 
26.
      With ActiveSheet.QueryTables.Add(Connection:= _ 
27.
        "TEXT;Y:\Arbeitsordner\" & sTxt & ".txt", Destination:=Range("$A$1") _ 
28.
29.
        .Name = "2014_02_24" 
30.
        .FieldNames = True 
31.
        .RowNumbers = False 
32.
        .FillAdjacentFormulas = False 
33.
        .PreserveFormatting = True 
34.
        .RefreshOnFileOpen = False 
35.
        .RefreshStyle = xlInsertDeleteCells 
36.
        .SavePassword = False 
37.
        .SaveData = True 
38.
        .AdjustColumnWidth = True 
39.
        .RefreshPeriod = 0 
40.
        .TextFilePromptOnRefresh = False 
41.
        .TextFilePlatform = 850 
42.
        .TextFileStartRow = 1 
43.
        .TextFileParseType = xlDelimited 
44.
        .TextFileTextQualifier = xlTextQualifierDoubleQuote 
45.
        .TextFileConsecutiveDelimiter = True 
46.
        .TextFileTabDelimiter = True 
47.
        .TextFileSemicolonDelimiter = False 
48.
        .TextFileCommaDelimiter = True 
49.
        .TextFileSpaceDelimiter = True 
50.
        .TextFileColumnDataTypes = Array(1, 1, 1, 9, 9, 1) 
51.
        .TextFileTrailingMinusNumbers = True 
52.
        .Refresh BackgroundQuery:=False 
53.
    End With 
54.
    Application.DisplayAlerts = False        
55.
              Pivotaktu ' Pivottabelle auf aktuellen Stand bringen   
56.
      Windows("Eingabe.xlsm").Activate 
57.
    Range("A1").Select         
58.
Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, FieldInfo:=Array(0, 5) ' Werte in Spalte A von Standart auf Datum ändern     
59.
Datumscheck ' Prüfen ob Datum schon vorhanden   
60.
Arbeitsblattloeschen 
61.
Schluss ' Ende 
62.
Exit Sub 
63.
Ende: 
64.
 Application.Quit 
65.
 ActiveWorkbook.Save 
66.
 ActiveWorkbook.Close 
67.
 Application.DisplayAlerts = False   
68.
    End Sub
Und hier das Makro zum prüfen bzw. kopieren:

01.
Sub Datumscheck() 
02.
03.
' Datumscheck Makro 
04.
05.
Dim EintragCheck1 As Variant 
06.
Dim eintragCheck2 As Variant 
07.
EintragCheck1 = Sheets("Blatt2").Cells(1, 1).Value 
08.
Application.ScreenUpdating = False 
09.
Dim leereZeile 
10.
Sheets("Blatt2").Range("A1:A4").Copy 
11.
Workbooks.Open Filename:="Y:\Arbeitsordner\Ausgabe.xlsx" 
12.
  Windows("Ausgabe.xlsx").Activate 
13.
  Worksheets("Blatt3").Select 
14.
Sheets("Blatt3").Activate 
15.
leereZeile = Sheets("Blatt3").Cells(Rows.Count, 1).End(xlUp).Row + 1 
16.
For I = 2 To Sheets("Blatt3").Cells(Rows.Count, 1).End(xlUp).Row 
17.
eintragCheck2 = Sheets("Blatt3").Cells(I, 1).Value 
18.
If EintragCheck1 = eintragCheck2 Then 
19.
MsgBox "Eintrag schon vorhanden" 
20.
Exit Sub 
21.
Else 
22.
End If 
23.
Next 
24.
Sheets("Blatt3").Range("B" & leereZeile).Select 
25.
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
26.
:=False, Transpose:=False 
27.
Application.CutCopyMode = False 
28.
29.
End Sub
Hoffentlich ist es jetzt verständlicher.
Danke.
Gruß
Hugo
Bitte warten ..
Mitglied: Pjordorf
19.03.2014 um 16:01 Uhr
Hallo,

Zitat von hugoundertaker:
Hier nun der Hauptcode:
Bitte nutze die Code tags http://www.administrator.de/faq/20#toc-27 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
Bitte warten ..
Mitglied: hugoundertaker
19.03.2014 um 16:12 Uhr
Hallo Peter,

ja natürlich habe ich es schon mit Einzelschritten probiert. Entweder kommt er dann zur Meldung "Datum schon vorhanden"(wenn schon vorhanden) springt aber nicht an den Anfang (Inputbox bzw. Start des Codes) zurück, da weiß ich aber auch leider nicht wie man das machen kann, oder wenn das Datum noch nicht vorhanden ist kopiert er aber nicht sondern läuft einfach zum Ende durch.
Danke.
Gruß
Hugo
Bitte warten ..
Mitglied: Pjordorf
19.03.2014 um 17:03 Uhr
Hallo,

Zitat von hugoundertaker:
springt aber nicht an den Anfang (Inputbox bzw. Start des Codes) zurück
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
Bitte warten ..
Mitglied: hugoundertaker
19.03.2014 um 17:52 Uhr

> ich aber auch leider nicht wie man das machen kann,
Deinen Code sagen was der tun soll.


Hallo Peter,

wenn ich wüßte, wie der Befehl für den entsprechenden Rücksprung lautet, würde ich nicht fragen. Ich bin nun mal kein Excel bzw. VBA-Spezialist. Vielleicht wäre es einfach auch mal möglich einem nicht Crack die Dinge vernünftig, so das er sie auch versteht, zu erklären.
Schließlich habe ich doch mein Problem relativ ausführlich erklärt. Und das mit den CodeTags funktioniert auch nicht, vielleicht mache ich da ja was falsch. Aber vielleicht kann man mir ja trotzdem einfach mal helfen???
Trotzdem Danke.
Gruß
Hugo
Bitte warten ..
Mitglied: colinardo
LÖSUNG 19.03.2014, aktualisiert 08.04.2014
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:
01.
Dim wbTarget 
02.
Dim wbSource 
03.
 
04.
Sub Suche() 
05.
    Set wbSource = Workbooks(1) 
06.
    If TypeName(wbTarget) = "Empty" Then 
07.
        Set wbTarget = Workbooks.Open(ActiveWorkbook.Path & "\DOC2.xlsx") 
08.
    End If 
09.
    Set wsIN1 = wbSource.Worksheets(1) 
10.
    Set wsIN3 = wbSource.Worksheets(3) 
11.
    Set wsOUT = wbTarget.Worksheets(3) 
12.
     
13.
    found = False 
14.
    With wsOUT.Range("B:B") 
15.
        Set c = .Find(wsIN1.Range("A3").Value, LookIn:=xlValues) 
16.
        If Not c Is Nothing Then 
17.
            firstAddress = c.Address 
18.
            Do 
19.
                found = True 
20.
            Loop While Not c Is Nothing And c.Address <> firstAddress 
21.
        End If 
22.
    End With 
23.
    If Not found Then 
24.
        wsIN3.Range("A1:A5").Copy 
25.
        wsOUT.Range("B1").End(xlDown).Offset(1, 0).PasteSpecial 
26.
    Else 
27.
        MsgBox "Datum schon vorhanden" 
28.
    End If 
29.
     
30.
End Sub
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:
<code></code>

Grüße Uwe
Bitte warten ..
Mitglied: Biber
19.03.2014, aktualisiert um 20:21 Uhr
[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.

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]
Bitte warten ..
Mitglied: Pjordorf
20.03.2014, aktualisiert um 09:59 Uhr
Hallo,

Zitat von hugoundertaker:
nun mal kein Excel bzw. VBA-Spezialist.
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.
01.
Hier steht ein Text der Quellcode darstellen soll
oder
Hier steht Text der kein Quellcode darstellen soll
. Den Unterschied mit der Zeilennummern siehst du?

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
Bitte warten ..
Mitglied: hugoundertaker
20.03.2014 um 17:44 Uhr
Hallo zusammen,

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. Jetzt aber die Zeit gehabt es nochmal zu probieren. Vielleicht kann ja jetzt noch mal bitte einer drüberschaun.

Danke.
Gruß
Hugo
Bitte warten ..
Mitglied: colinardo
20.03.2014 um 17:47 Uhr
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...
Bitte warten ..
Mitglied: hugoundertaker
08.04.2014 um 16:41 Uhr
Hallo zusammen,

leider erst jetzt die Möglichkeit zum Anpasssen und Ausprobieren gehabt, klappt einwandfrei.
Danke.

Gruß
Hugo
Bitte warten ..
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
VB for Applications
gelöst VBA: Wert von einer Website (pdf-Dokument) auslesen und in Excel kopieren (16)

Frage von Stern123 zum Thema VB for Applications ...

VB for Applications
gelöst Xml-Datei laden bzw. auf Festplatte kopieren und per VBA in eine Access-Tabelle speichern (22)

Frage von machohunk zum Thema VB for Applications ...

Microsoft Office
gelöst In Excel das Datum aus einer Registerlasche in einer Formel verwenden (7)

Frage von michael1306 zum Thema Microsoft Office ...

Outlook & Mail
Importieren von excel daten in outlook vba - Teil 2 (5)

Frage von Bgervais zum Thema Outlook & Mail ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...