Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Inhalte einfügen VBA

Inhalte einfügen VBA
14.02.2005 15:45:40
fzeh
Hallo,
möchte via VBA Zellinhalte aus einer Datei in eine andere kopieren, dabei sollen die Formatierungen in der Zieldatei nicht überschrieben werden.
In der Ursprungsdatei wird in Zelle B4 das Datum abgegriffen, um in der Zieldatei die Zeile zum Einfügen zu ermitteln (erste Spalte der Zieldatei enthält bereits Datum absteigend sortiert).
Das 'Umfeld' sieht so aus:
Dtm = Range("B4").Value 'Datumswert für Zeilenauswahl in Zieldatei festlegen
Range("A1:Q1").Select 'Zellbereich der in Zieldatei kopiert werden soll
Selection.Copy
Workbooks.Open ("O:\Zieldatei.xls")
Cells.Find(What:=Dtm).Activate
ActiveCell.Offset(0, 1).Activate 'die Zellen sollen rechts neben dem vorhandenen Datum eingefügt werden
ActiveSheet.Paste 'hierdurch wird aber die Formatierung der Zieldatei zerstört
PasteSpecial (wie beim manuellen 'Inhalte einfügen'-'Werte' funktioniert an dieser Stelle scheinbar nicht...
Ist vielleicht nur ein Denkfehler von mir?
Wer hat einen Tipp?
Vielen Dank...
Gruß
fzeh
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Inhalte einfügen VBA
Ute
Beim Kopieren werden die Formate der Zielzellen immer überschrieben, das ist auch
nicht zu verhindern.
mfg Ute
AW: Inhalte einfügen VBA
14.02.2005 15:58:54
fzeh
Hallo Ute,
Danke für die schnelle Antwort...
Hab's fast befürchtet... Aber gilt das wirklich auch für vorhandene Zellrahmen?
Werden die immer 'zerstört'?
gruß
fzeh
Anzeige
AW: Inhalte einfügen VBA
Ute
Auch Rahmen sind Formate.
mfg Ute
AW: Inhalte einfügen VBA
fzeh
Hallo Ute,
Danke für die Antwort...
Ist zwar Schade, ;O(
aber dann muss ich halt nachträglich formatieren...
Gruß
fzeh
AW: Inhalte einfügen VBA
Ute
Kopier doch einfach die Formate der Zielzellen in ein leeres Blatt. Nachdem du
die anderen Daten/Werte kopiert hast, kopierst du die Formate wieder zurück
mit PasteSpecial Paste:=xlPasteFormats
mfg Ute
Anzeige
AW: Inhalte einfügen VBA
fzeh
gute Idee,
danke für den Tipp...
Gruß
fzeh
AW: Inhalte einfügen VBA
14.02.2005 16:31:57
Heinz
Hallo,
warum soll PasteSpecial nicht funktionieren?

Sub Copy()
Range("A1:A5").Copy
Workbooks.Open Filename:="W:\Test\Test.xls"
Range("V10").PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End Sub

Gruß
Heinz
Anzeige
AW: Inhalte einfügen VBA
fzeh
Hallo Heinz,
Danke für die Antwort,
PasteSpecial passt aber irgendwie nicht mit der Umgebung 'ActiveSheet und Offset'...
Falls Du noch eine Idee hast?
viele Grüße
fzeh
AW: Inhalte einfügen VBA
14.02.2005 20:02:15
Heinz
Hallo,
hier einetestetes Beispiel:

Sub Copy()
Range("A3:A4").Copy
Workbooks.Open ("L:\Daten\EXCEL\#tests\17878.xls")
Cells.Find("otto").Offset(0, 1).PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End Sub

Ich sehe das Problem absolut nicht
Gruß
Heinz
Anzeige
AW: Inhalte einfügen VBA
fzeh
Hallo Heinz,
Danke für die Mühe.
Wenn ich Deinen Vorschlag umsetze, erhalte ich an dieser Stelle
Cells.Find("otto").Offset(0, 1).PasteSpecial Paste:=xlValues
die Meldung: Laufzeitfehler '91' Objektvariable oder With-Blockvariable nicht festgelegt.
;O(
Mir fällt nichts mehr ein...
Gruß
fzeh
Anzeige
AW: Inhalte einfügen VBA
15.02.2005 09:55:20
Heinz
Hallo,
da ist kein Problem, denn die Meldung kommt dann, wenn der Suchbegriff, hier "otto", nicht gefunden wird. Wenn man das abfangen will, müsste man den Code z.B. so erweitern

Sub Copy()
Dim gef As Range
Range("A3:A4").Copy
Workbooks.Open ("L:\Daten\EXCEL\#tests\17878.xls")
Set gef = Cells.Find("otto")
If Not gef Is Nothing Then
gef.Offset(0, 1).PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
Else
MsgBox "Der Suchbegriff wurde nicht gefunden!"
End If
End Sub

Gruß
Heinz
Anzeige
AW: Inhalte einfügen VBA
fzeh
Hallo Heinz,
Danke für den Code...
Hatte natürlich 'Otto' in eine Zelle eingetragen... trotzdem die Fehlermeldung...
Habe jetzt mal ausschließlich Deinen Code getestet: Da erhalte ich bei PasteSpecial die Meldung: Laufzeitfehler '1004' Die Paste-Special-Methode de Range-Objektes konnte nicht ausgeführt werden.
Wenn ich kein Feld mit 'otto' bezeichne, läft der Code ordnungsgemäß durch... (...nicht gefunden...).
Liegt's evtl. an meinem System? (XP SP2, Excel 2002 (10.43...))
Viele Grüße
fzeh
Anzeige
AW: Inhalte einfügen VBA
15.02.2005 15:35:04
Heinz
Hallo,
da könnte die Ursache sein, dass das Blatt geschützt ist. Wär das eine Möglichkeit?
Es gibt sonst keinen Grund, dass das nicht funktioniert. Das System schließe ich absolut aus.
Versuch mal, ganz neue Dateien zu erstellen, die eine, aus der kopiert werden soll und eine, in die die Kopie nach dem Fund der Fundstelle soll. Das muss funktionieren!
Gruß
Heinz
Anzeige
AW: Inhalte einfügen VBA
fzeh
Hallo Heinz,
unglaublich, aber so geht's... !!?
Habe zwei neue Dateien erstellt, Problem besteht nun nicht mehr.
Ursprüngliche Ziel-Datei war aber nicht geschützt o.ä. ...
(aber unter Office 97 erstellt, vielleicht lag's daran...).
Vielen Dank für die Hilfe...
Gruß
fzeh
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Inhalte einfügen mit VBA: Tipps und Tricks


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Neues Modul einfügen: Klicke mit der rechten Maustaste auf „VBAProject (DeineDatei.xls)“, gehe zu „Einfügen“ und wähle „Modul“.

  3. VBA-Code einfügen: Füge den folgenden Code in das Modul ein, um Werte aus einer Datei in eine andere einzufügen, ohne die Formatierungen zu überschreiben:

    Sub WerteEinfügen()
       Dim Dtm As Variant
       Dtm = Range("B4").Value ' Datumswert abfragen
       Range("A1:Q1").Copy ' Zu kopierender Bereich
       Workbooks.Open "O:\Zieldatei.xls"
       On Error Resume Next
       Cells.Find(What:=Dtm).Offset(0, 1).PasteSpecial Paste:=xlValues
       Application.CutCopyMode = False
       On Error GoTo 0
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über ALT + F8 aus.


Häufige Fehler und Lösungen

  • Laufzeitfehler '91': Dieser Fehler tritt auf, wenn der Suchbegriff nicht gefunden wird. Stelle sicher, dass der Suchbegriff existiert, oder implementiere eine Fehlerbehandlung.

  • Laufzeitfehler '1004': Dies geschieht, wenn du versuchst, PasteSpecial auf einem geschützten Blatt auszuführen. Überprüfe, ob das Zielblatt geschützt ist.

  • Formatierung wird überschrieben: Um dies zu vermeiden, nutze die Methode PasteSpecial mit xlValues, wie im obigen Beispiel gezeigt.


Alternative Methoden

  • Daten in ein leeres Blatt kopieren: Kopiere die Formate der Zielzellen in ein leeres Blatt. Nachdem die Werte eingefügt wurden, verwende PasteSpecial Paste:=xlPasteFormats, um die Formate zurückzuholen.

  • Excel VBA Bereich kopieren und Werte einfügen: Verwende Range.Copy und PasteSpecial, um nur die Werte ohne Formatierungen einzufügen. Dies ist besonders nützlich, wenn du sicherstellen möchtest, dass das Layout der Zieldatei erhalten bleibt.


Praktische Beispiele

Beispiel: Werte aus einem Bereich einfügen

Sub BereichKopieren()
    Range("A1:A5").Copy
    Workbooks.Open Filename:="W:\Test\Test.xls"
    Range("B1").PasteSpecial Paste:=xlValues
    Application.CutCopyMode = False
End Sub

Beispiel: Mit Suchbegriff einfügen

Sub MitSuchbegriffEinfügen()
    Dim gef As Range
    Range("A3:A4").Copy
    Workbooks.Open "L:\Daten\EXCEL\#tests\17878.xls"
    Set gef = Cells.Find("Suchbegriff")
    If Not gef Is Nothing Then
        gef.Offset(0, 1).PasteSpecial Paste:=xlValues
        Application.CutCopyMode = False
    Else
        MsgBox "Der Suchbegriff wurde nicht gefunden!"
    End If
End Sub

Tipps für Profis

  • Variablen effektiv nutzen: Definiere Variablen für häufig genutzte Werte, um den Code lesbarer und einfacher zu warten.

  • Fehlerbehandlung einbauen: Verwende On Error Resume Next, um Fehler abzufangen und zu vermeiden, dass dein Makro abrupt stoppt.

  • Makros effizient testen: Beginne mit kleinen Datenmengen, um den Code zu testen, bevor du ihn auf große Dateien anwendest.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass nur Werte ohne Formatierungen eingefügt werden? Verwende PasteSpecial Paste:=xlValues, um nur die Werte aus dem kopierten Bereich einzufügen.

2. Was tun, wenn der Suchbegriff nicht gefunden wird? Implementiere eine Fehlerbehandlung mit If Not gef Is Nothing Then und zeige eine entsprechende Nachricht an, wenn der Suchbegriff nicht vorhanden ist.

3. Kann ich auch mehrere Zellen gleichzeitig kopieren? Ja, du kannst einen Bereich wie Range("A1:A5").Copy verwenden, um mehrere Zellen zu kopieren und dann mit PasteSpecial in die gewünschte Zelle einzufügen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige