Combobox schreibt in falsches Blatt

04/02/2008 - 22:13 von Andreas Wendzel | Report spam
Hallo,

ich habe ein sonderbares Problem mit Comboboxen in Excel und möchte
daher den Aufbau etwas ausführlicher erlàutern.

1. Die Mappe besteht aus 2 Tabellen. Eine mit Daten in Form einer
Liste ("Daten"), die andere zur Auswahl von Datensàtzen
("Speiseplan").

2. Dort gibt es jeweils eine Combobox zur Auswahl eines Wertes aus der
Datenliste und Zellen die entsprechend des ausgewàhlten Wertes der
Combobox bestimmte Inhalte aus der Datentabelle abrufen

3, Um die Datenliste erweitern zu können und dennoch mit den
Comoboboxen auf alle Datensàtze zugreifen zu können wurde ein Name
definiert, der alle Datensàtze umfasst:
Name: "Speisen"
Formel: =INDIREKT("Daten!$A$2:$A$" & ANZAHL2(Daten!$A:$A);WAHR)

4. Die Combobox liest also aus der einer Tabelle und schreibt in die
andere Tabelle.

5. Die Comboboxen und die Formeln der benachbarten Zellen werden per
Makro angelegt. Weil ich wirklich nicht weiß wo der Fehler liegt, füge
ich den gesamten Code ein:


Option Explicit

Private Sub cmdNewLine_Click()
Dim objOle As OLEObject
Dim rngCell As Range

On Error GoTo cmdNewLine_Click_err

Application.ScreenUpdating = False
' Erste Leere Zeile suchen
Set rngCell = Range("B8")
Do While rngCell.Value <> ""
Set rngCell = rngCell.Offset(rowoffset:=1)
Loop

'' Jetzt Combobox Objekt einfügen
rngCell.FormulaArray = "=Speisen"
' create new ComboBox
Set objOle rngCell.Worksheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1")

' set properties
With objOle
.LinkedCell = rngCell.Worksheet.Name & "!" & rngCell.Address
.ListFillRange = "Speisen"
.Left = rngCell.Left + 1
.Top = rngCell.Top + 1
.Height = 16.5
.Width = rngCell.Width - 0.5
' position depending on cellposition and size
.Placement = 1
.PrintObject = False
End With

' Nun noch die Formeln einsetzen
Set rngCell = rngCell.Offset(Columnoffset:=1)
rngCell.Formula = "=IF(ISBLANK(VLOOKUP($B" & rngCell.Row & ",Daten!
$1:$65536,MATCH(D$7,Daten!$1:$1,0),FALSE)),""?"",VLOOKUP($B" &
rngCell.Row & ",Daten!$1:$65536,MATCH(D$7,Daten!$1:$1,0),FALSE)/100*
$A" & rngCell.Row & ")"
' zellen rechts davon auch ausfüllen
rngCell.AutoFill Destination:=Range(rngCell,
rngCell.Offset(Columnoffset:#)), _
Type:=xlFillValues
' erste Spalte auswàhlen
Range("A" & rngCell.Row).Select

Application.ScreenUpdating = True
Set rngCell = Nothing
Set objOle = Nothing
Exit Sub

cmdNewLine_Click_err:
Application.ScreenUpdating = True
Set rngCell = Nothing
Set objOle = Nothing
End Sub


Das Problem ist nun, dass manchmal statt in die Tabelle mit den
Comboboxen in die Datentabelle geschrieben wird. Dabei ist die
LinkedCell eingeschaft explizit auf die Tabelle "Speiseplan" gesetzt.
Es wird in genau die richtige Zelle, jedoch die falsche Tabelle
geschrieben.
Außerdem fàllt auf, dass nicht nur der Inhalt, sondern auch das Format
der Zellen aus "Speiseplan" nach "Daten" übernommen wird.

Weiß jemand, woran dieses merkwürdige Verhalten liegt? Weiterer Code
ist nicht vorhanden. Der Fehler ist nicht reproduzierbar.

Vielen Dank,

Andreas
 

Lesen sie die antworten

#1 Michael Schüller
04/02/2008 - 23:58 | Warnen spam
Hallo Andreas,

vorab: ich habe mir aufgrund der Komplexitàt Deinen Code nicht in Gànze
zu Gemüte geführt. Tue ich gerne, falls mein folgender Ansatz nicht zur
Lösung führt und andere NG-Teilnehmer keine Vorschlàge haben.

Was mir fehleranfàllig scheint: Du hast zwei Sheets, referenzierst aber
in Deinem Code nicht vollstàndig.

Z.B. die Zeile:
Set rngCell = Range("B8")

bezieht sich auf "B8" des Sheets, das zur Ausführung des Codes "aktuell"
ist und nicht unbedingt auf das Sheet, auf das Du Dich beziehen willst!

Um vollstàndig zu refernzieren, müsstest Du
Set rngCell = thisworkbook.sheets("xyz").Range("B8")
verwenden, wobei xyz für "Daten" oder "Speiseplan" steht, jenachdem was
Du haben willst.

Da gilt für _alle_ Zeilen mit "Range".

Wenn das nicht hilft, kannst Du mir gerne Deine .xls mailen. Sehe ich
mir gerne an.


Schönen Gruß

Michael




Hallo,

ich habe ein sonderbares Problem mit Comboboxen in Excel und möchte
daher den Aufbau etwas ausführlicher erlàutern.

1. Die Mappe besteht aus 2 Tabellen. Eine mit Daten in Form einer
Liste ("Daten"), die andere zur Auswahl von Datensàtzen
("Speiseplan").

2. Dort gibt es jeweils eine Combobox zur Auswahl eines Wertes aus der
Datenliste und Zellen die entsprechend des ausgewàhlten Wertes der
Combobox bestimmte Inhalte aus der Datentabelle abrufen

3, Um die Datenliste erweitern zu können und dennoch mit den
Comoboboxen auf alle Datensàtze zugreifen zu können wurde ein Name
definiert, der alle Datensàtze umfasst:
Name: "Speisen"
Formel: =INDIREKT("Daten!$A$2:$A$" & ANZAHL2(Daten!$A:$A);WAHR)

4. Die Combobox liest also aus der einer Tabelle und schreibt in die
andere Tabelle.

5. Die Comboboxen und die Formeln der benachbarten Zellen werden per
Makro angelegt. Weil ich wirklich nicht weiß wo der Fehler liegt, füge
ich den gesamten Code ein:


Option Explicit

Private Sub cmdNewLine_Click()
Dim objOle As OLEObject
Dim rngCell As Range

On Error GoTo cmdNewLine_Click_err

Application.ScreenUpdating = False
' Erste Leere Zeile suchen
Set rngCell = Range("B8")
Do While rngCell.Value <> ""
Set rngCell = rngCell.Offset(rowoffset:=1)
Loop

'' Jetzt Combobox Objekt einfügen
rngCell.FormulaArray = "=Speisen"
' create new ComboBox
Set objOle > rngCell.Worksheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1")

' set properties
With objOle
.LinkedCell = rngCell.Worksheet.Name & "!" & rngCell.Address
.ListFillRange = "Speisen"
.Left = rngCell.Left + 1
.Top = rngCell.Top + 1
.Height = 16.5
.Width = rngCell.Width - 0.5
' position depending on cellposition and size
.Placement = 1
.PrintObject = False
End With

' Nun noch die Formeln einsetzen
Set rngCell = rngCell.Offset(Columnoffset:=1)
rngCell.Formula = "=IF(ISBLANK(VLOOKUP($B" & rngCell.Row & ",Daten!
$1:$65536,MATCH(D$7,Daten!$1:$1,0),FALSE)),""?"",VLOOKUP($B" &
rngCell.Row & ",Daten!$1:$65536,MATCH(D$7,Daten!$1:$1,0),FALSE)/100*
$A" & rngCell.Row & ")"
' zellen rechts davon auch ausfüllen
rngCell.AutoFill Destination:=Range(rngCell,
rngCell.Offset(Columnoffset:#)), _
Type:=xlFillValues
' erste Spalte auswàhlen
Range("A" & rngCell.Row).Select

Application.ScreenUpdating = True
Set rngCell = Nothing
Set objOle = Nothing
Exit Sub

cmdNewLine_Click_err:
Application.ScreenUpdating = True
Set rngCell = Nothing
Set objOle = Nothing
End Sub


Das Problem ist nun, dass manchmal statt in die Tabelle mit den
Comboboxen in die Datentabelle geschrieben wird. Dabei ist die
LinkedCell eingeschaft explizit auf die Tabelle "Speiseplan" gesetzt.
Es wird in genau die richtige Zelle, jedoch die falsche Tabelle
geschrieben.
Außerdem fàllt auf, dass nicht nur der Inhalt, sondern auch das Format
der Zellen aus "Speiseplan" nach "Daten" übernommen wird.

Weiß jemand, woran dieses merkwürdige Verhalten liegt? Weiterer Code
ist nicht vorhanden. Der Fehler ist nicht reproduzierbar.

Vielen Dank,

Andreas


Andreas Wendzel wrote:
Hallo,

ich habe ein sonderbares Problem mit Comboboxen in Excel und möchte
daher den Aufbau etwas ausführlicher erlàutern.

1. Die Mappe besteht aus 2 Tabellen. Eine mit Daten in Form einer
Liste ("Daten"), die andere zur Auswahl von Datensàtzen
("Speiseplan").

2. Dort gibt es jeweils eine Combobox zur Auswahl eines Wertes aus der
Datenliste und Zellen die entsprechend des ausgewàhlten Wertes der
Combobox bestimmte Inhalte aus der Datentabelle abrufen

3, Um die Datenliste erweitern zu können und dennoch mit den
Comoboboxen auf alle Datensàtze zugreifen zu können wurde ein Name
definiert, der alle Datensàtze umfasst:
Name: "Speisen"
Formel: =INDIREKT("Daten!$A$2:$A$" & ANZAHL2(Daten!$A:$A);WAHR)

4. Die Combobox liest also aus der einer Tabelle und schreibt in die
andere Tabelle.

5. Die Comboboxen und die Formeln der benachbarten Zellen werden per
Makro angelegt. Weil ich wirklich nicht weiß wo der Fehler liegt, füge
ich den gesamten Code ein:


Option Explicit

Private Sub cmdNewLine_Click()
Dim objOle As OLEObject
Dim rngCell As Range

On Error GoTo cmdNewLine_Click_err

Application.ScreenUpdating = False
' Erste Leere Zeile suchen
Set rngCell = Range("B8")
Do While rngCell.Value <> ""
Set rngCell = rngCell.Offset(rowoffset:=1)
Loop

'' Jetzt Combobox Objekt einfügen
rngCell.FormulaArray = "=Speisen"
' create new ComboBox
Set objOle > rngCell.Worksheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1")

' set properties
With objOle
.LinkedCell = rngCell.Worksheet.Name & "!" & rngCell.Address
.ListFillRange = "Speisen"
.Left = rngCell.Left + 1
.Top = rngCell.Top + 1
.Height = 16.5
.Width = rngCell.Width - 0.5
' position depending on cellposition and size
.Placement = 1
.PrintObject = False
End With

' Nun noch die Formeln einsetzen
Set rngCell = rngCell.Offset(Columnoffset:=1)
rngCell.Formula = "=IF(ISBLANK(VLOOKUP($B" & rngCell.Row & ",Daten!
$1:$65536,MATCH(D$7,Daten!$1:$1,0),FALSE)),""?"",VLOOKUP($B" &
rngCell.Row & ",Daten!$1:$65536,MATCH(D$7,Daten!$1:$1,0),FALSE)/100*
$A" & rngCell.Row & ")"
' zellen rechts davon auch ausfüllen
rngCell.AutoFill Destination:=Range(rngCell,
rngCell.Offset(Columnoffset:#)), _
Type:=xlFillValues
' erste Spalte auswàhlen
Range("A" & rngCell.Row).Select

Application.ScreenUpdating = True
Set rngCell = Nothing
Set objOle = Nothing
Exit Sub

cmdNewLine_Click_err:
Application.ScreenUpdating = True
Set rngCell = Nothing
Set objOle = Nothing
End Sub


Das Problem ist nun, dass manchmal statt in die Tabelle mit den
Comboboxen in die Datentabelle geschrieben wird. Dabei ist die
LinkedCell eingeschaft explizit auf die Tabelle "Speiseplan" gesetzt.
Es wird in genau die richtige Zelle, jedoch die falsche Tabelle
geschrieben.
Außerdem fàllt auf, dass nicht nur der Inhalt, sondern auch das Format
der Zellen aus "Speiseplan" nach "Daten" übernommen wird.

Weiß jemand, woran dieses merkwürdige Verhalten liegt? Weiterer Code
ist nicht vorhanden. Der Fehler ist nicht reproduzierbar.

Vielen Dank,

Andreas

Ähnliche fragen