Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
708to712
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
708to712
708to712
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Gültigkeit in vba

Gültigkeit in vba
21.12.2005 18:30:26
M.
Hallo,
in einer Tabelle gibt einen kleinen Bereich, in dem Eintragungen gemacht werden dürfen. Diese Daten werden jedoch aus einem schier unendlichen Meer von Tabellen "geholt" und auch wieder "weggebracht". Da ich diese Tabellen nicht alle mit Gültigkeitslisten versehen kann, benötige ich eine Lösung in vba.
Folgenden Codeschnipsel hab ich hier mal gefunden, nur leider sachffe ich es nicht, Ihn so umzubauen, dass gestimmte Buchstabenfolgen "ABC", "DE", "F", usw. als Richtig erkannt werden, jedoch Falsche, wie "ABG", "DH", rausgeschmissen werden.
For n = 1 To Len(Target)
Select Case Asc(LCase(Mid(Target, n, 1)))
Case 97 To 122, 45
Fehler = False
Case Else
Fehler = True
End Select
Next n
(Gibt bei einem NICHT-Buchstaben innerhalb einer Zelle FALSCH raus......)
(Ich bräuchte aber: "Gibt bei einer Buchstabenkombination RICHTIG raus..")
Kann mir geholfen werden? Bin leider nur "vba - Makrorekorder: gut" ;-)
Vorweihnachtliche Grüße von Martin

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Gültigkeit in vba
21.12.2005 23:09:54
MichaV
Hallo,
das könntest Du so machen:

Private Sub Worksheet_Change(ByVal Target As Range)
If istRichtig(Target.Text) Then MsgBox "Korrekt!"
End Sub
Function istRichtig(strWas As String) As Boolean
Dim Richtige
Dim i%
Richtige = Array("ABC", "DE", "F")
For i = 0 To UBound(Richtige)
If strWas = Richtige(i) Then istRichtig = True: Exit Function
'wenn Gross- und Kleinschreibung egal dann
'If ucase(strWas) = ucase(Richtige(i)) Then istRichtig = True: Exit Function
Next i
End Function

Gruß- Micha
PS: Rückmeldung wäre nett.
AW: Gültigkeit in vba
22.12.2005 17:53:17
M.
Hallo Micha und alle anderen,
Habe den Code jetzt umgestrickt, leider verursacht er, in die Mappe eingefügt eine Verlangsamung der Eingabe (Es dauert bis zu 2 Sekunden bevor ich einen neuen Wert eingeben kann. Was ist falsch?

Private Sub Worksheet_Change(ByVal Target As Range)
If istRichtig(Target.Text) Then
Target.Value = UCase(Target.Text)
Exit Sub
ElseIf Not istRichtig(Target.Text) Then Target.ClarContents
Exit Sub
End If
End Sub

Function istRichtig(strWas As String) As Boolean
Dim Richtige
Dim i%
Richtige = Array("ABC", "DE", "F", "GH", "IJK")
For i = 0 To UBound(Richtige)
If ucase(strWas) = ucase(Richtige(i)) Then istRichtig = True: Exit Function
Next i
End Function
Thx
Anzeige
AW: Gültigkeit in vba
22.12.2005 17:58:18
MichaV
Hallo,
die Sub wird aufgerufen, wenn die Zelle sich ändert. Innerhalb dieser Sub änderst Du aber die Zelle wieder! Damit wird die Sub wieder aufgerufen.. usw. Du hast eine Sub gebastelt, die sich selbst aufruft, bis der Speicher voll ist.
So kannst Du das verhindern: (ungetestet)
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents=False
On Error Goto Fehler
If istRichtig(Target.Text) Then
Target.Value = UCase(Target.Text)
Else
Target.ClarContents
End If
Fehler:
Application.EnableEvents=True
End Sub

Gruß- Micha
PS: Rückmeldung wäre nett.
Anzeige
AW: Gültigkeit in vba
22.12.2005 18:00:57
Josef
Hallo ?
Sollte ein Eck schneller sein!
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrExit
Application.EnableEvents = False
If istRichtig(Target.Text) Then
  Target.Value = UCase(Target.Text)
Else
  Target.ClearContents
End If
ErrExit:
Application.EnableEvents = True
End Sub




Function istRichtig(strWas As String) As Boolean
Dim Richtige
Dim i As Variant

Richtige = Array("ABC", "DE", "F", "GH", "IJK")

i = Application.Match(UCase(strWas), Richtige, 0)
istRichtig = IsNumeric(i)
End Function


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
@Sepp
22.12.2005 18:14:39
MichaV
Hallo Sepp,
die Match- Variante braucht 3x länger als die For- Next- Schleife.
Hätte ich aber auch nicht gedacht.
Gruß - Micha
AW: @Sepp
22.12.2005 19:45:22
Josef
Hallo Micha!
Du hast recht!
Hab das jetzt mit einem Array mit 5000 Einträgen getestet.
MATCH braucht immer ~2,7ms, For-Next braucht ~0,23ms bei Einträgen im
vorderen Bereich des Arrays und ~1ms bei Einträgen gegen Ende des Datenfelsdes!
Hätte auch nicht gedacht das MATCH so lahm ist ;-((
Gruß Sepp

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige