Hallo liebe Community,
es gibt Neuigkeiten hinsichtlich meines Problems.
Habe einen neuen Ansatz gewählt:
1. keine ControlSources und RowSources in den Bereichen, in denen ich über "Import" einfüge
2. Daten die mit der UserForm einen Bezug haben werden nun erst beim Aufrufen der UserForm von den Zellen in die Form geschrieben und beim "Übernehmen" in die Zellen zurückgeschrieben.
Hier der Importieren-Code für alle die es sich mal ansehen möchten:
Code:
Public Sub Importieren()
Dim MyFile As Variant
Dim pfad As String, datei As String, blatt As String, bereich As Range, zelle As Object
Call AllesAus
MyFile = Application.GetOpenFilename("Excel mit Makros (*.xlsm), *.xlsm")
If Not MyFile = False Then Else Exit Sub
datei = Right(MyFile, Len(MyFile) - InStrRev(MyFile, "\"))
pfad = Left(MyFile, InStrRev(MyFile, "\") - 1)
blatt = "Start"
Set bereich = Range("L3:S10")
For Each zelle In bereich
zelle = zelle.Address(False, False)
ActiveSheet.Cells(zelle.Row, zelle.Column).Value = GetValue(pfad, datei, blatt, zelle)
If zelle = "0" Then ActiveSheet.Cells(zelle.Row, zelle.Column).Value = ""
Next zelle
Set bereich = Range("L25:L32")
For Each zelle In bereich
zelle = zelle.Address(False, False)
ActiveSheet.Cells(zelle.Row, zelle.Column).Value = GetValue(pfad, datei, blatt, zelle)
If zelle = "0" Then ActiveSheet.Cells(zelle.Row, zelle.Column).Value = ""
Next zelle
Set bereich = Range("K16")
For Each zelle In bereich
zelle = zelle.Address(False, False)
ActiveSheet.Cells(zelle.Row, zelle.Column).Value = GetValue(pfad, datei, blatt, zelle)
If zelle = "0" Then ActiveSheet.Cells(zelle.Row, zelle.Column).Value = ""
Next zelle
If Not MyFile = False Then Workbooks.Open (MyFile) Else Exit Sub
ActiveWorkbook.Sheets("Start").Range("A100:Q1000").Copy
ThisWorkbook.Worksheets("Start").Range("A100").PasteSpecial xlPasteValues
Application.DisplayAlerts = False
ActiveWorkbook.Close SaveChanges:=False
Call AllesEin
MsgBox "Importieren der Daten" & vbLf & vbLf & "Benutzer mit Kontaktdaten, Adressen und LuBP" & vbLf & vbLf & "ist abgeschlossen."
ThisWorkbook.Sheets("Start").Range("C14").Select
End Sub
An dieser Stelle vielen Dank an alle die Zeit für einen Rat hatten.
Besonderen Dank an SNB, das Worksheet_Change Ereignis habe ich nun nach deinem Vorschlag angepasst.
Grüße
Martin