Microsoft Excel

Herbers Excel/VBA-Archiv

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

Anwendungs- oder Objektbezogener Fehler

Betrifft: Anwendungs- oder Objektbezogener Fehler von: Olof Meise
Geschrieben am: 09.08.2007 14:19:57

Hallo zusammen,
die im Betreff genannte Fehlermeldung taucht immer auf wenn folgender Abschnitt meines Makros läuft.
Auf Grund meiner geringen VBA Kenntnisse habe ich diesen Abschnitt mit dem rekorder aufgezeichnet. Dabei hat auch alles funktioniert, nur halt nicht beim Makro abspielen.
Habt ihr Ideen?
.
..
...
'abhängige Gültigkeitslisten
Range("B13").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:= _
"=Bereich.Verschieben(Unterkategorie;;Vergleich(B12;Produkte;0)-1;Anzahl2(Index(Unterkategorie;;Vergleich(B12;Produkte;0)));1)"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
...
..
.
Die verwendeten Namen sind vergeben und ich sehe keinen Fehler. Danke für eure prüfenden Blicke.

Olof

  

Betrifft: AW: Anwendungs- oder Objektbezogener Fehler von: Luschi
Geschrieben am: 10.08.2007 05:57:43

Hallo Olof,

habe Dein Problem mal getestet und herausgefunden, daß bei Validation die Formeln in .Formula1
in amerikanischer Schreibweise gemacht werden müssen, auch wenn der Makrorekorder sie in deutsch ausgibt. In Deinem Fall wäre das:

"=OFFSET(Unterkategorie,,MATCH(Tabelle1!R[5]C[-3],Produkte,0)-1,COUNTA(INDEX(Unterkategorie,,MATCH(Tabelle1!R[5]C[-3],Produkte,0))),1)"

Wenn Du sowas häufiger machst, dann kriegst Du das ohne viel Nachdenken so raus:
1. Schmeiß den Rekorder an
2. Menüfolge: Einfügen-Namen-Definieren... oder Strg+F3
3. Name vergeben und in "Bezieht sich auf:" die gewünschte Formel
    in deutsch eingeben (aber ohne die Anführungsstriche am Anfang und Ende!)
4. OK drücken
5. Recorder beenden
6. sich das gerade erzeugte Makro anschauen
7. jetzt siehst Du die gleiche Formel in der amerikanischen Schreibweise (mit Anführungsstrichen)
8. Formel in die Validation kopieren
9. den Makrorekorder mal loben (er kann, wenn er will)
10. allgemeine Freude verbreiten!

Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Anwendungs- oder Objektbezogener Fehler von: Olof Meise
Geschrieben am: 10.08.2007 10:38:20

Hi Luschi, der 10. TIP gefällt besonders!!! ;-)

danke für den Hinweis und den Tip bzgl. "Namen-Definieren". Ich habe deine Formel bzgl. des Tabellenblattnamens geändert und eingefügt und erhalte weiterhin den selben Fehler...
Weiterhin bin ich mir nicht ganz sicher wie sich die Zelle B12 richtig im Amerikansichen ergibt.
Über die Namen-Definieren Funktion als Makro werde ich nicht schlau, da das Erghebnis davon abhängt wo ich in welche Zelle klicke bevor ich das Makro aufnehme. Any further ideas???


  

Betrifft: Hier die BEISPIELDATEI von: Olof Meise
Geschrieben am: 10.08.2007 12:08:19

Ich verzweifel wirklich an der Fehlermeldung, deshalb hier mal eine Beispieldatei mit Makro für alle die sich gerne dem Problem annehmen möchten.
Bin dankbar für jeden TIP!!!!

Manuell erstellt funktioniert alles in Tabelle1, lasse ich dann genau dasselbe in Tabelle2 als über ein Makro erstellen zerschießt es mir die abhängige Gültigkeit.

https://www.herber.de/bbs/user/44937.xls


Olof


  

Betrifft: AW: Hier die BEISPIELDATEI von: Coach
Geschrieben am: 11.08.2007 10:03:10

Hallo Olof,

Gültigkeiten funktionieren nur mit lokalen Namen der jeweiligen Tabelle, also:
ActiveWorkbook.Names.Add Name:=ActiveSheet.Name & "!Produkte", RefersToR1C1:="=Tabelle1!R1C7:R1C9"
Range("G2:I4").Select
ActiveWorkbook.Names.Add Name:=ActiveSheet.Name & "!Unterkategorie", RefersToR1C1:="=Tabelle1!R2C7:R4C9"
dann:
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=OFFSET(Unterkategorie,,MATCH(B12,Produkte,0)-1,COUNTA(INDEX(Unterkategorie,,MATCH(B12,Produkte,0))),1)"

Gruß Coach


  

Betrifft: AW: Hier die BEISPIELDATEI von: Olof Meise
Geschrieben am: 13.08.2007 09:37:10

Hallo Coach,
danke für deine Erklärungen. Ich habe das Makro mit meinen wenigen Kenntnissen versucht umzuschreiben.
Hier das Ergebnis:

https://www.herber.de/bbs/user/44989.xls



Das Resultat bleibt genau dasselbe....., was mache ich falsch?
-DANKE


  

Betrifft: AW: Hier die BEISPIELDATEI von: Harry
Geschrieben am: 13.08.2007 23:19:06

Hallo Olof,

verstehe ich dass richtig, du möchtest per Makro die Funktionalität von Tabelle 1 auch in Tabelle 2 herstellen?

Dann

Option Explicit
Sub bedingte_Gueltigkeit()
Dim i As Integer

'Löschen bisheriger Namen in der Mappe, da evtl. schon auf anderem Tabellenblatt
MsgBox ("Names: " & ActiveWorkbook.Names.Count)
If ActiveWorkbook.Names.Count > 0 Then
    For i = 1 To ActiveWorkbook.Names.Count
        ActiveWorkbook.Names.Item(1).Delete
    Next
End If
MsgBox ("Names: " & ActiveWorkbook.Names.Count)

'Tabellenname anpassen
With Sheets("Tabelle2")
    'Stammdaten schreiben
    .Range("B12") = "1"
    .Range("G1") = "1"
    .Range("H1") = "2"
    .Range("I1") = "3"
    .Range("G2") = "a"
    .Range("G3") = "a"
    .Range("G3") = "aa"
    .Range("G4") = "aaa"
    .Range("H2") = "b"
    .Range("H3") = "bb"
    .Range("H4") = "cc"
    .Range("I2") = "d"
    .Range("I3") = "dd"
    .Range("I4") = "ddd"
    .Range("H4") = "bbb"
    
    'Namen deklarieren, evtl. hier auch abweichende Namen von Tabelle 1, dann kann die Lö _
schroutine am Anfang der Sub entfallen
    .Names.Add Name:="Produkte", RefersTo:="=Tabelle2!$G$1:$I$1"
    .Names.Add Name:="Unterkategorie", RefersTo:="=Tabelle2!$G$2:$I$4"
End With

'Gültigkeit eintragen
With Sheets("Tabelle2").Range("B13").Validation
    .Delete
    'hier die gleichen Namen wie weiter oben verwenden
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:= _
    "=offset(Unterkategorie,,match($B$12,Produkte,0)-1,counta(INDEX(Unterkategorie,,match($B$12, _
Produkte,0))),1)"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With

End Sub



Gruß

Harry


 

Beiträge aus den Excel-Beispielen zum Thema "Anwendungs- oder Objektbezogener Fehler"