AW: Combobox aktualisieren
29.04.2016 12:48:18
Beverly
Hi Gisela,
das Problem hängt mit dem Makro zusammen, welches du der Tastenkombination Str+Q zugewisen hast - mir war nicht bekannt, dass du solch ein Makro benutzt. Durch das Einfügen einer Zeile und Kopieren der darüberliegenden Zeile wird das Change-Ereignis ausgelöst, die Formeln neu brechnet und der ComboBox dadurch der ListIndex -1 zugewiesen. Im Code löst das in diesem Teil Range(strBereich).Cells(lngIndex + 1).Value einen Fehler aus, weil es .Cells(0) natürlich nicht gibt. Man müsste also bereits hier den ListIndex auslesen, um im Change-Ereignis unterschieden zu können, ob die Daten durch das Makro oder direkte Eingabe erstellt wurden:
Option Explicit
Public lngIndex21 As Long ' Listindex ComboBox21
Public lngIndex22 As Long ' Listindex ComboBox22
Sub Zeileeinf()
' Zeilen_einfügen Makro
' Makro am 16.09.2010 von Privat aufgezeichnet
If Selection.Areas.Count > 1 Then
MsgBox ("Bitte nicht mehrere Bereiche auswählen!")
Exit Sub
End If
Application.ScreenUpdating = False
' aktuelle Auswahl der ComboBoxen auf Variablen schreiben
lngIndex21 = ActiveSheet.ComboBox21.ListIndex
lngIndex22 = ActiveSheet.ComboBox22.ListIndex
Selection.EntireRow.Insert ' blnZeilenEinfuegen = False
' ACHTUNG: Das With darf nicht 1 drüber, da sich durch das Insert die Selection ändert
With Selection.EntireRow
.Offset(-1, 0).Resize(1).Copy
.PasteSpecial Paste:=xlPasteFormulas
' Wenn in der Zeile unter den eingefügten Zeilen eine Formel in
' Spalte B steht, dann muss die korrigiert werden
If .Resize(1, 1).Offset(.Rows.Count, 1).HasFormula Then
.Resize(1, 1).Offset(.Rows.Count, 1).FormulaR1C1 = _
.Resize(1, 1).Offset(-1, 1).FormulaR1C1
End If
End With
Application.ScreenUpdating = True
End Sub
Und im Change-Ereignis kann dann wie folgt darauf zugegriffen werden:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngBereich As Range
Set rngBereich = Union(Range("E19:E1032"), _
Range("K19:K10332"), Range("M2:N4"), Range("M10:M11"), _
Range("CU9:CU14"))
' Bereich für ComboBox21
If Not Intersect(Target, rngBereich) Is Nothing Then
Application.Calculate
DoEvents
With ActiveSheet.ComboBox22
If lngIndex22 -1 Then
lngIndex = .ListIndex
Else
lngIndex = lngIndex22
End If
.ListIndex = lngIndex
End With
End If
' Bereich für ComboBox21
If Not Intersect(Target, Range("N19:N10251")) Is Nothing Then
Application.Calculate
DoEvents
With ActiveSheet.ComboBox21
If lngIndex21 -1 Then
lngIndex = .ListIndex
Else
lngIndex = lngIndex21
End If
.ListIndex = lngIndex
End With
End If
Set rngBereich = Nothing
End Sub
Ich habe das in deiner Mappe jetzt mehrfach getestet - beide ComboBoxen werden aktualisiert.