Top-Themen

Aktuelle Themen (A bis Z)

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, 4136 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 ..
Ähnliche Inhalte
XML
Kein automatisches Backup über Button VBA
gelöst Frage von KnuefiXML2 Kommentare

Hallo zusammen, ich habe folgenden VBA Code für ein automatischen Backup dieser funktioniert leider nur über den Button Speichern ...

Batch & Shell
Per Batch automatisch Ordnerstrukturen anlegen
gelöst Frage von evolutionBatch & Shell

Hallo, weiß jemand ob es möglich ist per Batch-Datei automatisch mit einer Eingabe Ordnerstrukturen anlegen zu lassen? Folgendes Szenario ...

Outlook & Mail
Outlook 2010 "Automatisch Antworten" Button entfernen?
gelöst Frage von mb1811Outlook & Mail3 Kommentare

Hallo! Gibt es per Registry eine Möglichkeit im Outlook 2010 den Button "Automatische Antworten" zu entfernen? Wir nutzen ein ...

Windows 7
Standby-Energiespar Button und Herunterfahren Button
Frage von hgshgsWindows 73 Kommentare

Hallo ihr Administratoren, ich bin neu hier und sage einfach mal hallo. :-) Folgendes Problem: Ich würde gerne unter ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 21 StundenWindows 102 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 23 StundenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet3 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 1 TagDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server13 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server13 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Windows Tools
Software-Tool zum Entfernen von bösartigem Windows
Frage von emeriksWindows Tools11 Kommentare

Hi, siehe Betreff hat das jemals irgendjemand schonmal sinnvoll eingesetzt? (MRT) E.

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...