2016-09-28 5 views
0

Ich habe das meiste selbst herausgefunden, aber der Teil, der mich aufhält, ist das Einfügen der bedingten Formatierung.Excel - Kopieren aus einer anderen Arbeitsmappe mit intakter bedingter Formatierung

Ich möchte in der Lage sein, eine Arbeitsmappe geöffnet zu haben, führen Sie ein VBA-Skript aus, um eine andere Arbeitsmappe zu öffnen, kopieren Sie einen Bereich daraus, und fügen Sie das dann in der ursprünglichen Arbeitsmappe ein.

Die meisten Erfolg hatte ich habe, ist die Makroaufzeichnung und damit dies geschieht: Mit dem Original, Ziel Arbeitsmappe geöffnet ...

  1. Öffnen Sie die Quelle Arbeitsmappe
  2. Copy Bereich A1: X105
  3. Schließen Quelle Arbeitsmappe
  4. Einfügen in Arbeitsblatt dem Titel "Temp" in Ziel Arbeitsmappe

Das Problem besteht darin, dass die Quellarbeitsmappe bedingte Formatierung enthält. Wenn die Quellarbeitsmappe vor dem Einfügen in die Zielarbeitsmappe geschlossen wird, wird die bedingte Formatierung nicht eingefügt.

Entweder muss ich einen Weg finden, die Daten mit der bedingten Formatierung einzufügen, oder ich muss in der Lage sein, zurück in die Zielarbeitsmappe zu wechseln, bevor die Quellarbeitsmappe geschlossen wird. Dies ist ein Prozess, der mehrmals mit verschiedenen Zielarbeitsmappen ausgeführt werden muss. Daher kann der VBA-Code nicht auf einen Arbeitsmappendateinamen für das Ziel verweisen. Die Quellarbeitsmappe hat jedoch immer den gleichen Pfad.

Beim Durchsuchen der Website konnte ich nur Lösungen finden, die den Pfad für beide Arbeitsmappen angegeben. Diese

ist, was ich habe jetzt:

Sub CopyData() 
Application.DisplayAlerts = False 
Workbooks.Open filename:="source.xlsx", _ 
UpdateLinks:=3 
Range("A1:X105").Select 
Selection.Copy 
ActiveWindow.Close 
Sheets("Temp").Select 
ActiveSheet.Paste 
Application.DisplayAlerts = True 
End Sub 

Ich nehme an, was ich umsetzen müssen, um in das ist das Ziel Arbeitsmappe als eine Variable zu deklarieren. Kann jemand damit helfen?

+0

Es klingt also so, als müsste das Skript aus der Quellarbeitsmappe in die Zielarbeitsmappe eingefügt werden, bevor die erste Arbeitsmappe geschlossen wird. Dies ist kein Problem, auch wenn Sie den Arbeitsmappennamen nicht angeben, wenn Sie ihn als Arbeitsmappenvariable festlegen. Bitte geben Sie den Code an, den Sie bisher entwickelt haben, um weitere Unterstützung zu erhalten. – nbayly

+0

'Sub Copydata() Application.DisplayAlerts = False Workbooks.Open Dateiname: = "source.xlsx", _ UpdateLinks: = 3 Range. ("A1: X105") Wählen Sie Selection.Copy Active. Schließen Blätter ("Temp"). Wählen Sie ActiveSheet.Paste Application.DisplayAlerts = True End Sub' – Robby

+0

Entschuldigung. Ich weiß nicht, wie man vorformatierten Text im Kommentar macht. – Robby

Antwort

0

Auf der Grundlage neuer Informationen:

Sub CopyData() 
Application.DisplayAlerts = False 
Workbooks.Open filename:="source.xlsx", _ 
UpdateLinks:=3 
Range("A1:X105").Select 
Selection.Copy 
ActiveWindow.Close 
Sheets("Temp").Select 
ActiveSheet.PasteSpecial xlPasteFormats 
Application.DisplayAlerts = True 
End Sub 

Zurück: Von: Copy conditional formatting from one cell to another using VBA?

Sub test() 
    Sheets("B").[B1].Copy: Sheets("A").[A1:A10].PasteSpecial xlPasteFormats 
End Sub 

ist ein Code, der die bedingte Formatierung einfügen wird.

Meistens, was Sie tun müssen, um die Reihenfolge ändern:

  1. Open Source eine Eingabeaufforderung für den Benutzer unter Verwendung von Datei

  2. Kopierbereich von Quelle

  3. Paste Bereich im Original zu wählen
  4. Schließen Quelle
+0

Ich glaube nicht, dass Sie die Quelle vor dem Einfügen schließen können, da die Zwischenablage nur einen Link zur Excel-Datei speichert und nicht die Daten selbst. Grüße, – nbayly

+0

Whoops. Du hast recht. Ich wollte die Reihenfolge umdrehen, aber Ihre Antwort ist präziser, also werde ich das so lassen wie es ist. –

1

Sie können die Arbeitsmappe einfach abdunkeln und dann kopieren und einfügen. Nachdem Sie das abgeschlossen haben, können Sie die Arbeitsmappe mithilfe der Variablen schließen.Code würde wie folgt aussehen:

Sub CopyData() 
    Application.DisplayAlerts = False 
    Dim wbSource As Workbook 
    Set wbSource = Workbooks.Open(Filename:="source.xlsx", UpdateLinks:=3) 
    wbSource.Sheets(1).Range("A1:X105").Copy 
    ThisWorkbook.ActiveSheet.Selection.Paste 
    wbSource.Close 
    Application.DisplayAlerts = True 
End Sub 

Ich sehe nicht, wie Sie bestimmen, welchen Bereich Sie auf der Ziel-Arbeitsmappe einfügen aber, dass für eine andere Frage verlassen. Die Antwort von Emily Alden Ich denke nicht, dass es funktionieren wird, weil Sie nicht von einer Quelle kopieren können, die geschlossen ist. Die Zwischenablage verhält sich in Excel anders als bei anderen Anwendungen.

+0

Ehrfürchtig. Das macht genau das, was ich will. Vielen Dank. Der Paste-Teil funktioniert, weil ich Code davor habe, der eine neue Arbeitsmappe erstellt und auf A1 konzentriert. Wenn also source.xlsx geschlossen ist und target.xlsx aktiviert wird, wird es immer auf A1 sein. – Robby

+0

Entschuldigung. Ich weiß nicht, wie es vorher funktioniert hat, aber es ist nicht jetzt. Nachdem A1: X105 auf source.xlsx kopiert wurde, wird es nicht mehr in das Ziel-Arbeitsblatt zurückversetzt, bevor es geschlossen wird. Ich denke, dass "ThisWorkbook.ActiveSheet.Paste" falsch ist. – Robby

+0

Versuchen Sie 'ThisWorkbook.ActiveSheet.Selection.Paste'. Wie Sie gesagt haben, dass es auf A1 sein sollte, fehlt wahrscheinlich nur die Angabe, in welchen Bereich eingefügt werden soll und ".Selection" sollte dafür geeignet sein. – nbayly

Verwandte Themen