goodbytes
Goto Top

Automatisches Anlegen eines Toggle-Buttons

Hallo,
ich stehe gerade vor einem kleinen Problem.

In meiner Excel-Datei werden soviele Spalten mit einem Rahmen formatiert, wie es angegeben wird Zeilen von-bis), um Pflichteingaben kennzuzeichnen.

Option Explicit
Const StartZeile = 7

Sub Datenübernahme()

    Dim Cell As Range
    Dim a As Integer
    Dim b As Integer
    Dim c As String
    Dim d As String
    Dim e As Integer
    
    a = Range("I1").Value  
    b = Range("J1").Value  
    c = Range("H3").Value  
    d = Range("I3").Value  
    e = Range("J3").Value  
    
    If a < 7 Then
        a = 7
    End If
    
' Pflichtfelder zum Einträgen formatieren  

    Range("H7:K20").Select  
    
            With Selection.Borders
                .LineStyle = xlNone
            End With
            
            With Selection.Interior
                .ColorIndex = xlNone
            End With
    
    Range(("H" & a) & ":" & ("K" & b)).Select  
    
    For Each Cell In Selection

        If Cell.Row >= StartZeile Then
            
            With Selection.Borders
                .LineStyle = xlContinuous
            End With
            
            With Selection.Interior
                .ColorIndex = 27
            End With

        End If
    Next
...

Bei diesen Feldern wird normalerweise manuell ein Zahlenwert eingegeben.
Allerdings könnte auch mal ein klar definierter Text drin stehen ("negativ" bzw. "positiv")

Damit der User, wenn er keinen Wert, sondern nur "negativ" oder "positiv" eintragen nöchte will ich iHm etwas Tipparbeit ersparen.

Dazu möchte ich gerne einen Toggle-Button zur Auswahl dieser zwei Wete anzeigen. In meinem Fall müssten also dieToggon-Button in jeder Zelle des definierten Bereiches erzeugt werden und damit zur Auswahl zur Verfügung stehen. Der ausgewählte Text soll dann in der Zelle erscheinenund eventuell ein weiteres Makro gestartet werden.

Wie könnte ich das hinbekommen?

Ach so, eines wundert mich auch noch sehr. den Zeilenbereich kann man ja hier frei eingeben. Die Zellformatierung soll aber definitiv erst ab der Zeile 7 anfangen, selbst wenn der Startwert kleiner als 7 ist.

Angedacht hatte ich es so:

Ich hatte es probiert mit:

    Range(("H" & a) & ":" & ("K" & b)).Select  
    
    For Each Cell In Selection


    Range(("H" & a) & ":" & ("K" & b)).Select  
    
    For Each Cell In Selection

        If Cell.Row >= StartZeile Then

Leider macht mein Excel 2007 aber das aber nicht mit, sondern ignorirt es einfach.an dieser Stelle

       ...  If Cell.Row >= StartZeile Then ...

Nun hab ich mittels folgender Krücke die Eingabe abgeprüft und im Falle "<7" einfach den Wer der Variable mit 7 überschrieben um auf mindestens 7 zu erhöhen.

    If a < 7 Then
        a = 7
    End If

Nicht gerade besonders elegant... face-sad

Vielleicht hat da auch jemand eine Idee?

Vielen Dank im voraus !!!

Torsten

Content-Key: 171053

Url: https://administrator.de/contentid/171053

Ausgedruckt am: 28.03.2024 um 14:03 Uhr

Mitglied: rubberman
rubberman 07.08.2011 um 14:25:15 Uhr
Goto Top
Hallo Torsten,

du brauchst keine Buttons. Excel kennt die sogenannte "Gültigkeit" für einen Zelleninhalt. Vorgegebene Werte können über einen Zellen-Dropdown ausgewählt werden. Sollte der User trotzdem einen anderen Wert eingeben, so kann dies überprüft und verhindert werden.
Beispiel:
Sub AddValidation()
    With ThisWorkbook.Sheets("Tabelle1").Range("A1").Validation  
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="negativ,positiv"  
        .IgnoreBlank = True
        .InCellDropdown = True
        .ErrorTitle = "Falscheingabe"  
        .ErrorMessage = "Entweder ""negativ"" oder ""positiv"" eingeben."  
        .ShowInput = False
        .ShowError = True
    End With
End Sub

Das zweite Problem kann ich mir nur so erklären, dass du explizit angeben musst, dass sich in Variable "Cell" auch wirklich ein Cells Object befinden soll. Also so:
    For Each Cell In Selection.Cells

Grüße
rubberman
Mitglied: 76109
76109 07.08.2011 um 19:47:59 Uhr
Goto Top
Hallo Torsten!

Du hast vergessen die Varible b auf >= 7 (StartZeile) zu prüfen.

Etwas gekürzte Variante:
Option Explicit

Const StartZeile = 7

Sub Datenübernahme()
    Dim a As Long
    Dim b As Long
    Dim c As Long
    Dim d As Long
    Dim e As Long
    
    a = Range("I1").Value  
    b = Range("J1").Value  
    c = Range("H3").Value  
    d = Range("I3").Value  
    e = Range("J3").Value  
    
    If a < StartZeile Then a = StartZeile
    If b < StartZeile Then b = StartZeile
    
' Pflichtfelder zum Einträgen formatieren  

    With Range("H7:K20")  
        .Borders.LineStyle = xlNone
        .Interior.ColorIndex = xlNone
    End With
    
    With Range(Cells(a, "H"), Cells(b, "K"))  
        .Borders.LineStyle = xlContinuous
        .Interior.ColorIndex = 27
    End With
End Sub

Gruß Dieter
Mitglied: goodbytes
goodbytes 08.08.2011 um 09:12:39 Uhr
Goto Top
Hallo rubbermann und Dieter,

@Dieter: Ja, stimmt. Nachdem ich die Variable auf >=7 prüfe klappt es jetzt auch.

@rubberman: Das ist natürlich eine gute Lösung. Zwei Fragen hätte ich aber noch.

Wenn ich nicht nur eine Zelle oder gleich die ganze Spalte auf Gültigkeit prüfe, sondern nur einen bestimmten Bereich (z.B. "C7:C20"), wie kann ich das realisieren.

Ein zweites Problem ist: In der Zelle kann danach "negativ" oder "positiv" stehen oder auch manuell ein Wert eingetragen werden.

Wenn ein Wert eingetragen wird läuft die Prüfung aber natürlich auf einen Fehler. Lässt sich das irgendwie vermeiden?

Oder könnte ich es irgendwie so realisieren, das die Zelle bei Eingabe von beispielsweise "n" und Enter einfach "negativ" in die Zelle schreibt?

Gruß
Torsten
Mitglied: rubberman
rubberman 08.08.2011 um 20:01:31 Uhr
Goto Top
Hallo Torsten
Zitat von @goodbytes:
Wenn ich nicht nur eine Zelle oder gleich die ganze Spalte auf Gültigkeit prüfe, sondern nur einen bestimmten Bereich
(z.B. "C7:C20"), wie kann ich das realisieren.

Indem du genau diesen Zellenbereich angibst (statt "A1" in meinem Beispiel).


Zitat von @goodbytes:
Ein zweites Problem ist: In der Zelle kann danach "negativ" oder "positiv" stehen oder auch manuell ein Wert
eingetragen werden.

Wenn ein Wert eingetragen wird läuft die Prüfung aber natürlich auf einen Fehler. Lässt sich das irgendwie
vermeiden?

Setze .ShowError = False


Zitat von @goodbytes:
Oder könnte ich es irgendwie so realisieren, das die Zelle bei Eingabe von beispielsweise "n" und Enter einfach
"negativ" in die Zelle schreibt?

Nicht mit dieser Methode.

Grüße
rubberman
Mitglied: goodbytes
goodbytes 11.08.2011 um 11:10:51 Uhr
Goto Top
Hallo rubberman,
mit dem Zellbereich, ich hatte es ja so probiert, hatte aber einen Tippfehler drin, den ich die ganze Zeit übersehen hatte.

Es funktioniert jetzt prima so, vielen Dank !!! Auch natürlich an Dieter !!! face-smile

Gruß
Torsten