Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Automatisches Anlegen eines Toggle-Buttons

Frage Entwicklung VB for Applications

Mitglied: goodbytes

goodbytes (Level 2) - Jetzt verbinden

07.08.2011 um 12:46 Uhr, 3992 Aufrufe, 5 Kommentare

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.

01.
Option Explicit 
02.
Const StartZeile = 7 
03.
 
04.
Sub Datenübernahme() 
05.
 
06.
    Dim Cell As Range 
07.
    Dim a As Integer 
08.
    Dim b As Integer 
09.
    Dim c As String 
10.
    Dim d As String 
11.
    Dim e As Integer 
12.
     
13.
    a = Range("I1").Value 
14.
    b = Range("J1").Value 
15.
    c = Range("H3").Value 
16.
    d = Range("I3").Value 
17.
    e = Range("J3").Value 
18.
     
19.
    If a < 7 Then 
20.
        a = 7 
21.
    End If 
22.
     
23.
' Pflichtfelder zum Einträgen formatieren 
24.
 
25.
    Range("H7:K20").Select 
26.
     
27.
            With Selection.Borders 
28.
                .LineStyle = xlNone 
29.
            End With 
30.
             
31.
            With Selection.Interior 
32.
                .ColorIndex = xlNone 
33.
            End With 
34.
     
35.
    Range(("H" & a) & ":" & ("K" & b)).Select 
36.
     
37.
    For Each Cell In Selection 
38.
 
39.
        If Cell.Row >= StartZeile Then 
40.
             
41.
            With Selection.Borders 
42.
                .LineStyle = xlContinuous 
43.
            End With 
44.
             
45.
            With Selection.Interior 
46.
                .ColorIndex = 27 
47.
            End With 
48.
 
49.
        End If 
50.
    Next 
51.
... 
52.
 
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:

01.
    Range(("H" & a) & ":" & ("K" & b)).Select 
02.
     
03.
    For Each Cell In Selection 
04.
 
05.
<code> 
06.
    Range(("H" & a) & ":" & ("K" & b)).Select 
07.
     
08.
    For Each Cell In Selection 
09.
 
10.
        If Cell.Row >= StartZeile Then
Leider macht mein Excel 2007 aber das aber nicht mit, sondern ignorirt es einfach.an dieser Stelle

01.
       ...  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.

01.
    If a < 7 Then 
02.
        a = 7 
03.
    End If
Nicht gerade besonders elegant...

Vielleicht hat da auch jemand eine Idee?

Vielen Dank im voraus !!!

Torsten
Mitglied: rubberman
07.08.2011 um 14:25 Uhr
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:
01.
Sub AddValidation() 
02.
    With ThisWorkbook.Sheets("Tabelle1").Range("A1").Validation 
03.
        .Delete 
04.
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="negativ,positiv" 
05.
        .IgnoreBlank = True 
06.
        .InCellDropdown = True 
07.
        .ErrorTitle = "Falscheingabe" 
08.
        .ErrorMessage = "Entweder ""negativ"" oder ""positiv"" eingeben." 
09.
        .ShowInput = False 
10.
        .ShowError = True 
11.
    End With 
12.
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
Bitte warten ..
Mitglied: 76109
07.08.2011 um 19:47 Uhr
Hallo Torsten!

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

Etwas gekürzte Variante:
01.
Option Explicit 
02.
 
03.
Const StartZeile = 7 
04.
 
05.
Sub Datenübernahme() 
06.
    Dim a As Long 
07.
    Dim b As Long 
08.
    Dim c As Long 
09.
    Dim d As Long 
10.
    Dim e As Long 
11.
     
12.
    a = Range("I1").Value 
13.
    b = Range("J1").Value 
14.
    c = Range("H3").Value 
15.
    d = Range("I3").Value 
16.
    e = Range("J3").Value 
17.
     
18.
    If a < StartZeile Then a = StartZeile 
19.
    If b < StartZeile Then b = StartZeile 
20.
     
21.
' Pflichtfelder zum Einträgen formatieren 
22.
 
23.
    With Range("H7:K20") 
24.
        .Borders.LineStyle = xlNone 
25.
        .Interior.ColorIndex = xlNone 
26.
    End With 
27.
     
28.
    With Range(Cells(a, "H"), Cells(b, "K")) 
29.
        .Borders.LineStyle = xlContinuous 
30.
        .Interior.ColorIndex = 27 
31.
    End With 
32.
End Sub
Gruß Dieter
Bitte warten ..
Mitglied: goodbytes
08.08.2011 um 09:12 Uhr
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
Bitte warten ..
Mitglied: rubberman
08.08.2011 um 20:01 Uhr
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
Bitte warten ..
Mitglied: goodbytes
11.08.2011 um 11:10 Uhr
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 !!!

Gruß
Torsten
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Printerport mit Powershell anlegen (12)

Frage von Druide83 zum Thema Batch & Shell ...

Batch & Shell
gelöst Recursiv Unterordner anlegen Powershell (2)

Frage von Voiper zum Thema Batch & Shell ...

JavaScript
gelöst Range (Slider) Javascript mit Plus-Minus Buttons (3)

Frage von internet2107 zum Thema JavaScript ...

Windows Netzwerk
Automatisches IP Setup für verschiedene (Wlan-)Netzwerke (4)

Frage von mraudi zum Thema Windows Netzwerk ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Router & Routing
gelöst Empfehlung günstiges ADSL2+ nur Modem (10)

Frage von TimMayer zum Thema Router & Routing ...