Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen

Combobox aktiviert sich beim Klicken auf Zelle

Betrifft: Combobox aktiviert sich beim Klicken auf Zelle von: Daniel
Geschrieben am: 03.09.2014 11:59:02

Hallo zusammen,

Ich habe wiedermal eine Frage:
Ich habe auf einem Worksheet 4 Comboboxen (ActiveX Element) die mit 1 Code hinterlegt wurden. Jedes dieser Comboboxen hat eine bestimmte Anzahl an Listenelementen, d.h. je nach dem welche Kombination dieser Listenelement ich anwähle, stellt sich im Worksheet 1 bestimmtes Szenario für eine bestimmte Rechnung, die ich dann durchführen möchte, ein. Zum Beispiel werden bestimmte Comboboxen unsichtbar/sichtbar gemacht (d.h. visible = False/True), bestimmte Zeilen werden versteckt (Hidden) etc.
Problem: Wenn ich die gewünschten Listenelemte in den Comboboxen anwähle verschwinden zuerst die Comboboxen und das gewünschte Szenario erscheint dann erst wenn ich eine Zelle anklicke. Allerdings holpert das Tool später ein bisschen, wenn ich dann die eigentliche Rechnung laufen lasse. Es hat bestimmt was mit diesen Comboboxen bzw. mit dem hinterlegten Code zu tun, das habe ich zig mal ausprobiert.
Könnt ihr mir weiterhelfen? Wisst Ihr um was es geht?
Könnte es sein, dass sich das Problem ergibt, wenn ich eine Combox unsichtbar mache und das Programm nochmals die schon unsichtbare Combobox wieder unsichtbar machen möchte (dies ist so programmiert zurzeit) Probleme kriegt?

Als Beispiel hier ein Auschnitt des Codes:
'Templates ist ein Sheet im Workbook1, Calculation ein anderes Sheet im selben Workbook1
If Sheets("Templates").Range("R7").Value = "Effect" Then
Sheets("Calculation").Range("F30:I30").Value = "Is the an effect 1 or an effect 2?"
Sheets("Calculation").OLEObjects("OtherThanEffect").Visible = True
If Sheets("Templates").Range("R10").Value = "effect 1" Then
Sheets("DNEL Calculation Animal Data").OLEObjects("Dose 1").Visible = False
Sheets("DNEL Calculation Animal Data").OLEObjects("Dose 2").Visible = True
ElseIf Sheets("Templates").Range("R10").Value = "OtherThanEffect" Then
Sheets("DNEL Calculation Animal Data").OLEObjects("Dose 1").Visible = True
Sheets("DNEL Calculation Animal Data").OLEObjects("Dose 2").Visible = False
End If
Sheets("Calculation").OLEObjects("Dose 3").Visible = False
Sheets("Calculation").Rows("60:66").Hidden = False
Sheets("Calculation").Range("B67").Value = "4. Experimental animal"
Sheets("Calculation").Rows("108:112").Hidden = False
Sheets("Calculation").Rows("113:120").Hidden = True
End If

Ich danke für Eure Hilfe,

Daniel

  

Betrifft: AW: Combobox aktiviert sich beim Klicken auf Zelle von: fcs
Geschrieben am: 03.09.2014 16:01:13

Hallo Daniel,

in Arbeitsmappen in denen Ereignismakros integriert sind ist es ratsam, die Ereignismakros während der Makroaausführung vorübergehend zu deaktivieren, damit es nicht zu rekursiven Aufrufen und ggf. Endlosschleifen kommt.
Bei Comoboxen kann das Change_Ereignis ausgelöst werden, wenn Zeilen ein-/ausgeblendet werden.

Leider wird diese Ereignis mit der der generellen Deaktivierung nicht deaktiviert.
Man muss sich selebr darum kümmern, dass wiederholte Starts der Ereignismakros verhindert werden. Dies kann man mit einer Steuervariablen ereichen, die dazu führt das beim 2. Strat des Ereignismakros dieses sofort wieder verlassen wird.

Nachfolgend Beispiele:

Gruß
Franz

'Code in beliebiegem Modul speziell Tabellenblatt modul
Option Explicit
Private bolAktion As Boolean 'Moldulweit deklarierte Variable

Sub aaTest()
  'Variablendeklaration
  Dim StatusCalc As Long
  If bolAktion = True Then Exit Sub
  'Makrobremsen zurücksetzen
  With Application
    StatusCalc = .Calculation
    .Calculation = xlCalculationManual
    .EnableEvents = True
    .ScreenUpdating = True
  End With
'hier der eigentliche Code der ausgeführt werden soll
'...
'...
'Makrobremsen zurücksetzen
  With Application
    .Calculation = xlCalculationAutomatic
    .EnableEvents = True
    .ScreenUpdating = True
  End With
  bolAktion = False
End Sub

Private Sub ComboBox1_Change()
  If bolAktion = True Then Exit Sub
  bolAktion = True
  'Makrobremsen lösen
  With Application
    StatusCalc = .Calculation
    .Calculation = xlCalculationManual
    .EnableEvents = False
    .ScreenUpdating = False
  End With
  
  MsgBox "CB1 Changed"
  If Range(Rows(13), Rows(15)).Hidden = True Then
    Me.ComboBox1.Visible = True
    Range(Rows(13), Rows(15)).Hidden = False
  Else
    Range(Rows(13), Rows(15)).Hidden = True
    Me.ComboBox1.Visible = False
  End If
  
'Makrobremsen zurücksetzen
  With Application
    .Calculation = xlCalculationAutomatic
    .EnableEvents = True
    .ScreenUpdating = True
  End With
  bolAktion = False
End Sub

Private Sub CommandButton1_Click()
  If bolAktion = True Then Exit Sub
  bolAktion = True
  'Variablendeklaration
  Dim StatusCalc As Long
  'Makrobremsen lösen
  With Application
    StatusCalc = .Calculation
    .Calculation = xlCalculationManual
    .EnableEvents = False
    .ScreenUpdating = False
  End With
  
  If Range(Rows(13), Rows(15)).Hidden = True Then
    Me.ComboBox1.Visible = True
    Range(Rows(13), Rows(15)).Hidden = False
  Else
    Range(Rows(13), Rows(15)).Hidden = True
    Me.ComboBox1.Visible = False
  End If
  
'Makrobremsen zurücksetzen
  With Application
    .Calculation = xlCalculationAutomatic
    .EnableEvents = True
    .ScreenUpdating = True
  End With
  bolAktion = False
End Sub



  

Betrifft: AW: Combobox aktiviert sich beim Klicken auf Zelle von: Daniel
Geschrieben am: 03.09.2014 16:49:00

Hallo Franz,

Danke für die ausführliche Antwort, werde mich nun dahinterklemmen um das zu verstehen.

Ich habe weiterhin herausgefunden, dass wenn ich den Browserverlauf lösche, die Comboboxen wieder einigermassen funktionieren. Hat das einen Zusammenhang mit dem was Du gerade geschrieben hast?

Danke!

Liebe Grüsse,

Daniel


 

Beiträge aus den Excel-Beispielen zum Thema "Combobox aktiviert sich beim Klicken auf Zelle"