(20.03.2017, 12:15)BoskoBiati schrieb: Leider sieht niemand, was Du veranstaltest, deswegen kann das niemand nachvollziehen. Ich habe eine Vermutung
Oder zum Glück ;) Sonst würde mir ständig Jemand auf die Fingerchen hauen. Weche Vermutung denn? Ein Makro z.b. welches alle 3 Stati durchlaufen hat, sieht so aus(entsprechendes Makro zu dieser Tabelle1 aus Tabelle2 sieht entsprechend aus & hat auch die 2 Stati durchlaufen):
Code:
Sub Tabelle1()
'
' Tabelle1 Makro
'
'
Sheets("Tabelle1").Select
End Sub
In Tabelle 1 werden Daten aus einer anderen Datei geschrieben. Aber das Makro an sich wird nie verändert(wüsste auch nicht wie das ginge, etwas in den Code schreiben zu lassen).
Aus Tabelle 2 werden Daten in anderen Tabellen genutzt, also per =Tabelle!A14 z.B.
Die gesamte Datei wird gespeichert per Makro:
Code:
Sub Erstellen()
Dim vorherWorkbook As Workbook
ActiveWorkbook.Save
For Each x In Workbooks
If x.Name = Worksheets("Tabelle1").Range("J1").Value & Worksheets("Tabelle1").Range("B2").Value & Worksheets("Tabelle1").Range("H2").Value & ".xlsm" Then
MsgBox "Datei ist noch geöffnet"
GoTo weiter
Exit For
End If
Next
ActiveWorkbook.SaveCopyAs Filename:= _
ActiveWorkbook.Path & "\" & Worksheets("Tabelle1").Range("J1").Value & Worksheets("Tabelle1").Range("B2").Value & Worksheets("Tabelle1").Range("H2").Value & ".xlsm"
Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & Worksheets("Tabelle1").Range("J1").Value & Worksheets("Tabelle1").Range("B2").Value & Worksheets("Tabelle1").Range("H2").Value & ".xlsm"
Set vorherWorkbook = ActiveWorkbook
Worksheets("Tabelle1").Shapes("Picture 21").Visible = False
ActiveWorkbook.Save
'Export-Datei Verknpüpfen:
Workbooks("#HAUPT.XLSM").Activate
Range("Calc2!BR4").FormulaLocal = "=" & Range("Calc2!BR3").Value & "Calc2!$BR$5"
ActiveWorkbook.Save
'Export-Datei Verknpüpfen Ende
vorherWorkbook.Activate
ActiveWorkbook.Close savechanges:=False
weiter:
End Sub
Direkt hinterlegt an Code in Tabelle1 sind 2 Subs:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A41:AH43,B4:AI5,AJ5:AQ5,AL41:AP41,AM42:AP42,AQ4,A6:AQ40")) Is Nothing Then
ThisWorkbook.Names.Add Name:="AktiveZeile", RefersToR1C1:=Target.Row
ThisWorkbook.Names.Add Name:="AktiveSpalte", RefersToR1C1:=Target.Column
Else
On Error Resume Next
ThisWorkbook.Names("AktiveZeile").Delete
ThisWorkbook.Names("AktiveSpalte").Delete
On Error GoTo 0
End If
End Sub
(wird von Begingter Formatierung in Tabelle1 genutzt)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("J1")) Is Nothing Then
Call prcHoleDaten
End If
End Sub
Die prcHoleDaten sieht so aus:
Code:
Sub prcHoleDaten()
Dim Pfad As String
Dim Dateiname As String
Dim Blatt As String
Dim Bereich As String
Dim Ziel As Range
Pfad = ThisWorkbook.Path & "\" 'Pfad wo sich die Datei befindet aus der kopiert werden soll. Also gleiches Verzeichnis wo sich die Hauptdatei befindet.
Dateiname = Worksheets("Calc3").Range("J111").text 'aus welcher Datei soll er holen?
Blatt = "Tabelle1" 'von welcher Tabelle soll er holen?
Bereich = "A6:AE40" 'aus welchem Bereich soll er holen?
Set Ziel = Worksheets("Tabelle1").Range("A6") 'in welchen Bereich soll er kopieren? Genauer gesagt: Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht auch
If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
End If
End Sub
Die Funktioni zu der prcHoleDaten sieht so aus:
Code:
Public Function GetDataClosedWB(SourcePath As String, _
SourceFile As String, _
sourceSheet As String, _
SourceRange As String, _
TargetRange As Range) As Boolean
'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
'© t.ramel@mvps.org
Dim strQuelle As String
Dim Zeilen As Long
Dim Spalten As Byte
On Error GoTo InvalidInput
strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!" & _
Range(SourceRange).Cells(1, 1).Address(0, 0)
Zeilen = Range(SourceRange).Rows.Count
Spalten = Range(SourceRange).Columns.Count
With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten)
.Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")"
.Value = .Value
End With
GetDataClosedWB = True
Exit Function
InvalidInput:
MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", _
vbExclamation, "Get data from closed Workbook"
GetDataClosedWB = False
End Function
Ansonsten passiert nix mit Tabelle1. Außer das man manuell Werte einträgt.