Anzeige
Archiv - Navigation
1220to1224
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
Makro: Inhalte einfügen
Franky
Hallo zusammen!
so, ich habe mit diesem Excelproblem mal wieder ein Leckerbissen für alle VBA-Freunde.
In meiner Beispiel-Tabelle: https://www.herber.de/bbs/user/75761.xlsm
soll nach dem Start des Makros eine InputBox angezeigt werden mit dem Hinweis:
("Bitte geben Sie das Datum ein")
Nach der Eingabe des Datums vergleicht das Makro in der Zieltabelle die Datumswerte
in der Spalte A.
Bei einem Treffer kopiert er die entsprechende Zeile in der Mastertabelle (Bereich von A2:F2 und H2:M2)
und fügt Sie als "Inhalte einfügen....Werte" in die Zieltabelle ein, da sich in der Mastertabelle Formeln befinden,
die ich aber der Einfachheit weggelassen habe.
Wenn ich das Manuell mache, sieht das dann so aus:
Sub Inhalte_einfügen()
' Inhalte_einfügen Makro
Range("A2:F2").Select
Selection.Copy
Sheets("Zieltabelle").Select
Range("B20").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Mastertabelle").Select
Range("H2:M2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Zieltabelle").Select
Range("I20").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("G32").Select
End Sub

Dieses unvollständige Makro soll so erweitert werden, das eine Message-Box erscheint:
1. wenn kein Treffer gefunden wurde: "Falsches Datum! - Keine Werte wurden übertragen"
2. wenn die Werte kopiert wurden: "Die Werte wurden erfolgreich übertragen !" -> (Ist aber nicht zwingend notwendig)
3. Wenn in der Zieltabelle schon Werte vorhanden sind: Werte überschreiben !?"
Ferner sollen in der Zieltabelle alle NullWerte durch Leerzeichen ersetzt werden.
Ich bedanke mich im voraus für die schnelle Hilfe
Franky

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Das hatten wir doch schon!
19.07.2011 20:35:47
Franky
Hallo Josef,
schön dass ich Dich erreiche ! - Leider ist es mir nicht gelungen, Dein Makro so umzubauen, wie ich es in dieser Problemstellung brauche - Vielleicht kannst Du mir noch mal eine Lösung anbieten.
Dabei wäre die dritte Funktion : "Wenn in der Zieltabelle schon Werte vorhanden sind: Werte überschreiben !?"
wünschenswert, aber nicht zwingend notwendig. Es reicht eigentlich, wenn Du Dein letztes Marko auf die neue Problemstellung anspasst.
Vielleicht kannst Du mir noch eine paar gute Links nennen, in denen VBA für Excel gut erklärt werden, sofern das nicht gegen die Board-Regeln verstösst. (Werbung)
Viele Grüße
Franky
Anzeige
AW: Das hatten wir doch schon!
19.07.2011 20:54:26
Josef

Hallo Franky,
probier mal.
Sub Inhalte_einfügen2()
  Dim lngDate As Long
  Dim vntTarget As Variant
  Dim bolCopy As Boolean
  
  lngDate = Application.InputBox("Bitte Datum eingeben", "Daten Kopieren", _
    Format(Date, "dd.MM.yyyy"), Type:=1)
  
  With Sheets("Mastertabelle")
    If IsDate(CDate(lngDate)) Then
      vntTarget = Application.Match(lngDate, Sheets("Zieltabelle").Columns(1), 0)
      If IsNumeric(vntTarget) Then
        bolCopy = Application.CountA(Sheets("Zieltabelle").Range(Sheets("Zieltabelle").Cells(vntTarget, 2), _
          Sheets("Zieltabelle").Cells(vntTarget, 14))) = 0
        
        If Not bolCopy Then bolCopy = MsgBox("In der Zieltabelle sind bereits Werte vorhanden!" & _
          vbLf & "Wollen Sie die Werte überschreiben?", vbQuestion + vbYesNo, "Hinweis") = vbYes
        
        If bolCopy Then
          .Range("A2:M2").Copy
          Sheets("Zieltabelle").Cells(vntTarget, 2).PasteSpecial xlPasteValues
          Application.CutCopyMode = False
          Sheets("Zieltabelle").Range(Sheets("Zieltabelle").Cells(vntTarget, 2), _
            Sheets("Zieltabelle").Cells(vntTarget, 14)).Replace What:="0", Replacement:="", _
            LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
          MsgBox "Werte wurden erfolgreich übertragen!", vbInformation, "Hinweis"
        End If
      Else
        MsgBox "Datum in Zieltabelle nicht gefunden" & vbLf & "Werte wurden nicht übertragen!", _
          vbExclamation, "Hinweis"
      End If
    Else
      MsgBox "Datumseingabe ungültig!" & vbLf & "Werte wurden nicht übertragen!", vbExclamation, _
        "Hinweis"
    End If
  End With
  
End Sub



« Gruß Sepp »

Anzeige
AW: Das hatten wir doch schon!
19.07.2011 21:09:35
Franky
Hallo Josef,
vielen herzlichen Dank für Deine Lösung! - Genau das brauchte ich - läuft alles super ! - Perfekt !
Franky
Pfadangabe bei Makro
20.07.2011 22:06:27
Franky
Hallo Josef und alle anderen,
Lieder schaffe ich es nicht den Pfad in Deinem Markro zu ändern: (Mastertabelle und Zieltabelle befinden sich
in der gleichen Datei)
Wie muss Dein Makro geändert werden, wenn die Tabelle "Zieltabelle" sich in einer anderen Datei befindet z.B.:
D:\Eigene Dateien\Excel\2011\liste.xlsx
Jedenfalls gibt es immer einen Fehler: wenn ich diesen Pfad angebe:
Sheets("D:\Eigene Dateien\Excel\2011\liste.xlsx!Zieltabelle")
Muss man dann den Pfad mit Chdir ändern ?
Vielen Dank im voraus und viele Grüße
Franky
Anzeige
AW: Pfadangabe bei Makro
20.07.2011 22:17:55
Josef

Hallo Franky,
Makro befindet sich in der Datei mit der "Mastertabelle", beide Dateien müssen geöffnet sein!
Sub Inhalte_einfügen2()
  Dim objMaster As Worksheet, objTarget As Worksheet
  Dim lngDate As Long
  Dim vntTarget As Variant
  Dim bolCopy As Boolean
  
  lngDate = Application.InputBox("Bitte Datum eingeben", "Daten Kopieren", _
    Format(Date, "dd.MM.yyyy"), Type:=1)
  
  Set objMaster = ThisWorkbook.Sheets("Mastertabelle")
  Set objTarget = Workbooks("liste.xlsx").Sheets("Zieltabelle")
  
  With objMaster
    If IsDate(CDate(lngDate)) Then
      vntTarget = Application.Match(lngDate, objTarget.Columns(1), 0)
      If IsNumeric(vntTarget) Then
        bolCopy = Application.CountA(objTarget.Range(objTarget.Cells(vntTarget, 2), _
          objTarget.Cells(vntTarget, 14))) = 0
        
        If Not bolCopy Then bolCopy = MsgBox("In der Zieltabelle sind bereits Werte vorhanden!" & _
          vbLf & "Wollen Sie die Werte überschreiben?", vbQuestion + vbYesNo, "Hinweis") = vbYes
        
        If bolCopy Then
          .Range("A2:M2").Copy
          objTarget.Cells(vntTarget, 2).PasteSpecial xlPasteValues
          Application.CutCopyMode = False
          objTarget.Range(objTarget.Cells(vntTarget, 2), _
            objTarget.Cells(vntTarget, 14)).Replace What:="0", Replacement:="", _
            LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
          MsgBox "Werte wurden erfolgreich übertragen!", vbInformation, "Hinweis"
        End If
      Else
        MsgBox "Datum in Zieltabelle nicht gefunden" & vbLf & "Werte wurden nicht übertragen!", _
          vbExclamation, "Hinweis"
      End If
    Else
      MsgBox "Datumseingabe ungültig!" & vbLf & "Werte wurden nicht übertragen!", vbExclamation, _
        "Hinweis"
    End If
  End With
  
  Set objMaster = Nothing
  Set objTarget = Nothing
End Sub



« Gruß Sepp »

Anzeige
AW: Pfadangabe bei Makro
20.07.2011 22:55:20
Franky
Hallo Josef !
Jetzt habe ich alles in meine Produktivumgebung angepasst. - Läuft super !! - Vielen Dank nochmals!
Franky
Und bezüglich VBA
19.07.2011 20:56:02
Josef

Hallo nochmal,
Bücher kann ich dir keine empfehlen, am meisten lernst du in den einschlägigen Foren und durch selber probieren.

« Gruß Sepp »

Anzeige

212 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige