PDA

Vollständige Version anzeigen : Formeln ohne Pfad kopieren


roland889
13.07.2014, 14:49
Hallo,

ich habe hier ein Makro mit dem ich Tabellenblätter in eine andere Arbeitsmappe kopiere.

Diese Tabellenblätter haben verschiedene Formeln, die ich gerne bei behalten möchte, nur leider wird der Pfad der ursprünglichen Arbeitsmappe mit kopiert.

Wie kann ich das unterbinden?

Das ist mein Makro

Option Explicit

Sub MasterMakro()
Dim wkbMaster As Workbook
Dim wkbSource As Workbook
Dim wksTemp As Worksheet
Dim strSourceName As String

Set wkbMaster = ThisWorkbook

strSourceName = Application.GetOpenFilename(FileFilter:="ExcelFiles, *.xls*", FilterIndex:=1)

Set wkbSource = Workbooks.Open(Filename:=strSourceName, ReadOnly:=True)

For Each wksTemp In wkbSource.Worksheets
'Achtung, es wird nicht geprüft, ob ein Tabellenblatt schon existiert
wksTemp.Copy After:=wkbMaster.Worksheets(wkbMaster.Worksheets.Count)
Next wksTemp

wkbMaster.Worksheets(1).Cells(1, 1) = wkbSource.Name
wkbMaster.Worksheets(1).Cells(1, 2) = strSourceName

wkbSource.Close savechanges:=False
End Sub

Nepumuk
13.07.2014, 16:11
Hallo,

1. Du kommentierst alle Formeln vor dem Kopieren aus und nach dem Kopieren wieder ein. Arschlangsam bei vielen Formeln.

2. Du änderst nach dem Kopieren den Bezug. Eine effektive Programmzeile mit der ChangeLink-Methode. Siehe VBA-Hilfe.

roland889
13.07.2014, 17:11
Die formeln stehen ja nicht im VBA code, sondern in den Blättern an sich. Wie kommentiere ich die da aus?

du meinst das kann ich mit einer einzigen zeile ralisieren? soweit ich das verstanden habe, kann man damit nur verlinkungen ändern, aber nicht löschen

Nepumuk
13.07.2014, 18:45
Hallo,

Formeln auskommentieren heißt, du setzt ein Zeichen vor das = der Formel damit Excel sie nicht mehr als Formel erkennt. Beispiel:

Cells(1, 1).Value = "@" & Cells(1, 1).Formula

Kann zwar zu Problemen mit Matrixformeln kommen die sich aber austricksen lassen.


Und klar kannst du mit ChangeLink Verknüpfungen löschen. Du musst nur auf die selbe Mappe verlinken in der sich die Formeln befinden.

roland889
14.07.2014, 08:48
Also die Formeln stehen ja schon im Tabellenblatt welches ich kopiere

Ich habe im ausgehenden Tabellenblatt z.b. die formel

=WENN(C5="";"";"99"&TEXT(Temp!$B$3;"00")&TEXT(ZEILE();"0000"))

Das ändert sich je nachdem welche Datei ich wähle in ungefähr so

=WENN(C5="";"";"99"&TEXT(C:\Temp\[Dateix.xls]Temp!$B$3;"00")&TEXT(ZEILE();"0000"))

du meinst also ich soll die Formel vor derm Kopieren auskommentieren und dann wieder ein? Das sind sehr sehr sehr viele Formeln ^^, kann ich das über ein Makro machen?

So wie ich dich verstehe geht es einfacher mit der ChangeLink Methode. Ich verstehe das nicht, wie ich die Verknüpfung löschen soll

Laut der hilfe

ActiveWorkbook.ChangeLink "c:\excel\book1.xls", _
"c:\excel\book2.xls", xlExcelLinks


das ist ja nur eine Änderung, und keine löschung? oder verstehe ich das falsch? Hast du eventuell ein beispiel?

Danke LG

Mc Santa
14.07.2014, 09:13
Hallo,

ich habe es bei mir einmal aufgezeichnet und es sieht etwa so aus:
ActiveWorkbook.ChangeLink Name:="C:\Pfad\der\alten\Mappe.xls", NewName _
:="NameDerNeuenMappe.xls", Type:=xlExcelLinks
Anschließend sind bei mir alle Verlinkungen auf die aktuelle Mappe geändert.

Funktioniert es so bei dir?
VG

Nepumuk
14.07.2014, 09:22
Hallo,

ich würde an Stelle von statischen Namen die der Mappen benutzen.

wkbMaster.ChangeLink Name:=wkbSource.FullName, NewName _
:=wkbMaster.FullName, Type:=xlExcelLinks

roland889
14.07.2014, 09:42
Danke für die hilfe, ich habe hier im Forum einen beitrag über Linksources gehsehen und darüber gemacht, falls jemand das selbe problem hat, hier die lösung wie ich das gemacht habe

Sub Quellverknuepfungloeschen()
Dim VLink As Variant
Dim i As Integer
VLink = ThisWorkbook.LinkSources(xlExcelLinks)
If Not IsEmpty(VLink) Then
For i = 1 To UBound(VLink)
ThisWorkbook.ChangeLink Name:=VLink(i), _
newname:=ThisWorkbook.FullName
Next i
End If
End Sub