PDA

Vollständige Version anzeigen : Datei öffnen nicht in der gleichen Datei sondern über einen andere Excel Kopie


VBAFirst
31.08.2017, 14:59
Hallo zusammen,

ich habe eine Datei in meiner Standard Excel geöffnet. Nun möchte ich dort in der Datei über einen Code eine bestimmte Datei öffnen, die aber zwingend über eine Excel Kopie geöffnet wird. die Excel-Kopie kann auch bereits abgelegt sein.

Mein bisheriger Code lautet wie folgt( Öffnet jedoch die Datei in der selben Excel)

Set wb2 = Workbooks.Open("H:Datei.xlsm")

Wie könnte ich es erzwingen das die Datei in einer Excel Kopie geöffnet wird?

Danke und Grüße

Storax
31.08.2017, 15:24
Sub NewInstance()
Const FULL_FILE_NAME = "..Datei.."
Dim xl As Application
Dim wb As Workbook

Set xl = New Application
Set wb = xl.Workbooks.Open(FULL_FILE_NAME)
xl.Visible = True

End Sub

Hajo_Zi
31.08.2017, 15:25
wie öffnet man einer Datei in einer Kopie?
Ich habe davon noch nichts gehört.

<img src="http://Hajo-Excel.de/images/grusz1.gif" align="middle" height="40" alt="Grußformel"><a href="http://Hajo-Excel.de/index.htm"><img border="0" src="http://Hajo-Excel.de/images/logo_hajo3.gif" align="middle" height="40" alt="Homepage"></a>

VBAFirst
31.08.2017, 16:09
Top, genauso habe ich es mir vorgestellt. Danke!:)

Durch den Code wird die gewünschte Datei einfach in einer neuen Excel geöffnet.

Wie verhält es sich denn mit den beiden Excel Dateien wenn über die erste Excel ein Makro läuft das Daten aus beiden Dateien hin und her bewegen soll?

Würde das funktionieren?

Storax
31.08.2017, 16:24
Ginge, aber wäre in einer Instanz einfacher.
Wofür benötigst Du zwei Instanzen?

VBAFirst
31.08.2017, 16:30
Der Grund sind es sind zwei Dateien die beide viel Ressourcen benötigen. Wenn beide geöffnet sind dann funktioniert das Makro an einer Stelle nicht mehr. Ich habe es isoliert getestet und mit nur einer dieser Dateien in der Excel funktioniert es.

Ich versuche mich mal an einem Code was das Bewegen der Daten angeht. Falls ich nicht weiterkomme schreibe ich nochmal.

Danke und Gruß

Storax
31.08.2017, 17:09
Wie Du meinst, aber ich würde eher an dem Makro arbeiten Wenn beide geöffnet sind dann funktioniert das Makro an einer Stelle nicht mehr.
Hast Du während der Laufzeit alles (http://datapigtechnologies.com/blog/index.php/ten-things-you-can-do-to-speed-up-your-excel-vba-code/) ausgeschaltet, was nicht benötigt wird.

VBAFirst
01.09.2017, 08:22
Okay jetzt hakt es doch an einer Stelle wo ich nicht weiterkomme.

Der Code soll wie folgt. sein. Kopiere von Excel 1 die Daten in das Excel 2

Das

Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

funktioniert jedoch leider nicht.



Set ws1 = ActiveWorkbook.Sheets("Tabelle1")
Cells.Select
Selection.Copy

Set xl = New Application
Set wb2 = xl.Workbooks.Open(FULL_FILE_NAME)
xl.Visible = True

wb2.Sheets("Tabelle2").Select

Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False



Habt ihr eine Idee wie ich es umsetzen kann?

Die Datei und das Makro sind nicht von mir erstellt worden. Diese sind sehr aufwendig aufgebaut wo ich leider nicht herausbekomme wo ich was dazu genau ausschalten müsste. Daher versuch ich nun mit diesem Workaround und Zwei Exceln das Ergebnis zu erzielen.

Grüße

VBAFirst
01.09.2017, 09:51
So funktioniert das einfügen

wb2.Sheets("Tabelle2").Paste

Jedoch benötige ich hier wirklich nur die Inhalte als Werte.

Momentan wird hier versucht alles zu kopieren, Formel, Formate.
Ich erhalte auch von Excel dann die Information Achtung es sind Formeln, etc. enthalten. Das stoppt natürlich auch den Prozess und er läuft nicht durch.

Habt ihr hier eine Lösung?`

Storax
01.09.2017, 10:08
Du hast zwei Instanzen, da kann man AFAIK nicht mit Select in der einen Instanz arbeiten und dann in der anderen mit Paste einfügen. Das müsste eigentlich immer schief gehen.
Sub CopyFromTo
Const FULL_FILE_NAME = "..."

Dim xl As Excel.Application
Dim wb2 As Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim vdat As Variant

Set ws1 = ActiveWorkbook.Sheets("Tabelle1")
vdat = ws1.UsedRange


Set xl = New Application
Set wb2 = xl.Workbooks.Open(FULL_FILE_NAME)
xl.Visible = True
xl.Windows(1).Visible = True

Set ws2 = wb2.Sheets("Tabelle1")
With ws2
.Range(.Cells(1, 1), .Cells(UBound(vdat), UBound(vdat, 2))) = vdat
End With

End Sub

VBAFirst
01.09.2017, 10:13
Okay so funktioniert es :)


wb2.Sheets("Tabelle2").Range("A1").Select
wb2.Sheets("Tabelle2").PasteSpecial xlPasteValues

Storax
01.09.2017, 10:32
Zeig mal bitte den ganzen Code, denn bei mir geht das so mit Select und PasteSpecial nicht.

VBAFirst
01.09.2017, 10:39
Sub BK_Test()

Application.ScreenUpdating = False

Const FULL_FILE_NAME = "Pfad.xlsm"
Dim xl As Application
Dim wb2 As Workbook


Set ws1 = ActiveWorkbook.Sheets("Tabelle1")
Cells.Select
Selection.Copy

Set xl = New Application
Set wb2 = xl.Workbooks.Open(FULL_FILE_NAME)
xl.Visible = True

wb2.Sheets("Tabelle2").Range("A1").Select
wb2.Sheets("Tabelle2").PasteSpecial xlPasteValues

Application.DisplayAlerts = False
Application.CutCopyMode = False


Sheets("Tabelle3").Select
Range("H3:H50").Select
Selection.Copy


ws1.Activate
Sheets("Tabelle3").Select
Range("E38").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False




wb2.Close savechanges:=True
Application.ScreenUpdating = True
End Sub

VBAFirst
01.09.2017, 10:41
Ich habe nun allerdings ein Problem noch.

In diesem Code starte ich ein Makro. Es soll in der Excel 2 gestartet werden.
Leider klappt es nicht.
Es müsste ein Code sein der mit wb2 irgendwie verbaut werden kann.

Dies ist das Makro das nun nur im Excel 2 laufen soll.
Application.Run ("'H:Pfad'!Makro")


Habt ihr eine Idee?

Storax
01.09.2017, 10:51
Welche Excel Version hast Du?
Bei mir mit (Application.Version ist 16.0) läuft das nicht, ich kriege bei PasteSpecial einen Fehler, den ich ja eigentlich auch erwarte.

PS Du musst die zweite Instanz referenzieren, also xl.run. Aber das Makro muss in der zweiten Instanz "ansprechbar" sein!

VBAFirst
01.09.2017, 11:34
Es ist die 2010 32Bit, Version 14.0.

VBAFirst
01.09.2017, 12:39
Wäre der Code zum Ausführen des Makro in der Excel 2 dann wie folgt?

xl.Run ("'PfadDatei.xlsm'!Makro")

So startet es leider noch nicht. Das Makro ist aber verfügbar. Es sollte funktionieren über dei Excel2

Grüße

Storax
01.09.2017, 13:08
Hier (https://www.rondebruin.nl/win/s9/win001.htm)gibt es Erläuterungen und hier die Doku (https://msdn.microsoft.com/de-de/library/office/ff197132.aspx)

VBAFirst
05.09.2017, 15:08
Hallo zusammen, kurzer Nachtrag. So hat es funktioniert.




wb2.Sheets("Tabelle1").Select
xl.Run ("'PfadDatei.xlsm'!Makro")


Grüße