Hi Mackie,
bringt leider auch den gleichen Fehler...
Außerdem: habe den Fehler auch, wenn ich nur 1 Mappe B mit der Mappe A verknüpfe; und wäre keine optimale Lösung, da die Dateinamen variabel sind.
hier mal die Details:
Der Code zum Verknüpfen von mehreren Arbeitsmappen B in die Arbeitsmappe A: (Code ist in der Arbeitsmappe A, wird über Userform gestartet)
Sub Verknüpfen()
ThisWorkbook.Unprotect Password:=""
Dim i As Long
Dim j As Long
Dim k As Long
Dim l As Long
Dim sPfad As String
Dim sDatei As String
Dim sDateipfad As String
Dim oTargetBook As Object
Dim oSourceBook As Object
Set oTargetBook = ThisWorkbook
Application.ScreenUpdating = False 'Das "Flackern" ausstellen
k = Projekte_Verknüpfen.ComboBox1.Value
If Not k = "0" Then
l = k
Else
l = 1
k = 20
End If
For i = l To k
sDatei = oTargetBook.Worksheets("Programmdeckblatt").Cells(54 + i, 2)
sPfad = oTargetBook.Worksheets("Programmdeckblatt").Cells(54 + i, 1)
sDateipfad = sPfad & sDatei
If Not sDateipfad = "" Then
'XXXX HIER STOPPT DAS MAKRO / FEHLER / DEBUGGER BLEIBT HÄNGEN XXXX
Set oSourceBook = Workbooks.Open(sDateipfad, False, False)
'XXXX HIER STOPPT DAS MAKRO / FEHLER / DEBUGGER BLEIBT HÄNGEN XXXX
oSourceBook.Worksheets("Transfer").Rows("1:1").Copy
oTargetBook.Worksheets("Verknuepfung").Activate
oTargetBook.Worksheets("Verknuepfung").Cells(i, 1).Select
ActiveSheet.Paste Link:=True
oTargetBook.Worksheets("Programmdeckblatt").Range("G16").Copy
With oSourceBook.Worksheets("Projektdeckblatt").Activate
oSourceBook.Worksheets("Projektdeckblatt").Range("Y9").Select
ActiveSheet.Paste Link:=True
End With
oTargetBook.Worksheets("Programmdeckblatt").Range("AQ23:AQ28").Copy
With oSourceBook.Worksheets("Projektdeckblatt").Activate
oSourceBook.Worksheets("Projektdeckblatt").Range("AP23:AP28").PasteSpecial xlPasteValues
End With
oTargetBook.Worksheets("Programmdeckblatt").Range("AQ30").Copy
With oSourceBook.Worksheets("Projektdeckblatt").Activate
oSourceBook.Worksheets("Projektdeckblatt").Range("AP30").PasteSpecial xlPasteValues
End With
oSourceBook.Worksheets("Projektdeckblatt").Range("A80").Value = ThisWorkbook.FullName
oSourceBook.Worksheets("Projektdeckblatt").Range("A81").Value = ThisWorkbook.Name
oSourceBook.Worksheets("Projektdeckblatt").Range("AA80").Value = oTargetBook.Worksheets("Programmdeckblatt").Range("AA80").Value
oSourceBook.Worksheets("Projektdeckblatt").Range("AA81").Value = oTargetBook.Worksheets("Programmdeckblatt").Range("AA81").Value
Application.CutCopyMode = False
Workbooks(sDatei).Close True
End If
Next
For j = 1 To 20
If oTargetBook.Worksheets("Kalkulationen").Cells(149 + j, 2).Value > 0 Then
oTargetBook.Worksheets("Kalkulationen").Rows(149 + j).Hidden = False
Else
oTargetBook.Worksheets("Kalkulationen").Rows(149 + j).Hidden = True
End If
Next
oTargetBook.Worksheets("Programmdeckblatt").Activate
If Err Then MsgBox Err.Description, , "Fehler: " & Err
Application.ScreenUpdating = True
ThisWorkbook.Protect Structure:=True, Windows:=False
End Sub
Da ich die eine Zeile oben, bei der der Fehler auftritt, nicht verändert habe, muss es an der dort aufgerufenen Datei liegen.
Also an der jeweiligen Arbeitsmappe B
Und durch auskommentieren, Haltepunkte und Msgbox habe ich den Fehler gefunden. Nur eben noch keine Lösung:
Hier das Startmakro und Closemakro von Arbeitsmappe B: (Code logischerweise in der Arbeitsmappe B)
Private Sub Workbook_Open()
Application.ScreenUpdating = False
ThisWorkbook.Unprotect Password:=""
Dim myWorksheet As Worksheet
For Each myWorksheet In ThisWorkbook.Worksheets
myWorksheet.Protect Password:="", UserInterFaceOnly:=True
Next
Call VerknüpfenMS_Start
Call Check_CMDButton
ThisWorkbook.Protect Structure:=True, Windows:=False
Application.ScreenUpdating = True
Application.DisplayAlerts = False
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Unprotect Password:=""
Application.ScreenUpdating = False
Call VerknüpfenMS_Start
Call Check_CMDButton
ThisWorkbook.Protect Password:=""
Application.ScreenUpdating = True
End Sub
Das hat davor schon problemlos funktioniert. Ich habe bloß die Zeile "Call Check_CMDButton" eingefügt.
Also hier noch das Makro "Check_CMDButton" (Code ebenfalls nur in der Arbeitsmappe B enthalten)
Sub Check_CMDButton()
Dim wb As Object
Set wb = ThisWorkbook
wb.Unprotect Password:=""
'Commandbuttons färben
If wb.Sheets("Projektdeckblatt").Range("A62").Value > 0 Then
wb.Sheets("Projektdeckblatt").CommandButton2.BackColor = &HFF00&
Else
wb.Sheets("Projektdeckblatt").CommandButton2.BackColor = &H80FF&
End If
If wb.Sheets("Projektdeckblatt").Range("A80").Value > 0 Then
wb.Sheets("Projektdeckblatt").CommandButton7.BackColor = &HFF00&
Else
wb.Sheets("Projektdeckblatt").CommandButton7.BackColor = &H80FF&
End If
If wb.Sheets("Projektdeckblatt").Range("AA80").Value > 0 Then
wb.Sheets("Projektdeckblatt").CommandButton8.BackColor = &H80FFFF
Else
wb.Sheets("Projektdeckblatt").CommandButton8.BackColor = &H80FF&
End If
wb.Protect Structure:=True, Windows:=False
End Sub
Vorher hatte ich noch "Thisworkbook" überall statt "wb" stehen. das brachte auch keinen Unterschied.
Mit dem richtigen Namen der Arbeitsmappe habe ich es auch schon versucht -> gleiches Ergebnis.
Starte ich manuell Arbeitsmappe B, funktioniert es ; Verknüpfe ich Arbeitsmappe B mit Arbeitsmappe A kommt der Laufzeitfehler
Keine Ahnung was hier schief geht und warum es zu einem Fehler kommt, wenn ich Arbeitsmappe B über eine andere Exceldatei aufrufe.
Vor allem die Fehlermeldung "Laufzeitfehler 438 . Das Objekt unterstützt diese Eigenschaft oder Methode nicht"
Warum sollte es beim Verknüpfen die Eigenschaft nicht mehr unterstützen, wo es doch im Standalone funktioniert? (Also wenn die Datei manuell aufgerufen wird.
Ich schätze mir fehlen hier einfach die tieferen Kenntnisse... Habe mir das meiste selbst beigebracht ^^
Danke schonmal
LG
|