auch dieses Anliegen war schon im Archiv verschwunden und ich konnte nicht mehr darauf antworten.
Deshalb unten angefügt die Originalbeiträge.
@Harry: Dein Vorschlag ist gut, allerdings möchte ich nicht die Funktionalität in tabelle 2 herstellen, sondern in der jeweils markierten Datei/Tabelle.
Das Makro soll also auch aus einer anderen Datei heraus gestartet werden können.
ICh habe versucht es umzuschreiben und erhalte immer die selbe Fehlermeldung wie vorher.
Hier wieder meine Beispieldatei:
https://www.herber.de/bbs/user/44937.xls
Danke für weitere Ideen!
-----------------------------------------------------------------
Hier die bisherigen Antworten:
Anwendungs- oder Objektbezogener Fehler von Olof Meise vom 09.08.2007 14:19:57
AW: Anwendungs- oder Objektbezogener Fehler - von Luschi am 10.08.2007 05:57:43
AW: Anwendungs- oder Objektbezogener Fehler - von Olof Meise am 10.08.2007 10:38:20
Hier die BEISPIELDATEI - von Olof Meise am 10.08.2007 12:08:19
AW: Hier die BEISPIELDATEI - von Coach am 11.08.2007 10:03:10
AW: Hier die BEISPIELDATEI - von Olof Meise am 13.08.2007 09:37:10
AW: Hier die BEISPIELDATEI - von Harry am 13.08.2007 23:19:06
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
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
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?
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
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
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
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