Mehr brandheiße Inhalte
zur Gruppe
Handjob
2859 Mitglieder
Das Thema ist für dich interessant? Jetzt JOYclub entdecken

Überregional: Excel VBA

*****_74 Mann
1.185 Beiträge
Themenersteller 
Überregional: Excel VBA
Komme einfach nicht weiter. Bin was VBA angeht ein Newbie.
Habe mich durchgelesen und mir folgenden Code zusammengebastelt.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ausfuehren = True Then
With Range("B" & Target.Row, "P" & Target.Row).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Else
Target.Interior.ColorIndex = xlNone
End If
End Sub

Er soll folgendes Bewirken. Klicke ich auf den Button ist die Funktion aktiv. Dann gehe ich in eine Zelle, und die Zeile wird automatisch in der Farbe ausgefüllt. Klicke ich wieder auf den Button, soll die Funktion deaktiviert sein. Dachte mir ich mache das ganze über einen Toggle Button.
Doch irgendwie klappt es immer nur zufalsweise.
Habe den Code unter Arbeitsmappe allgemein geschrieben oder sollte der Code woanders hingeschrieben werden.
Hoffe es kennt sich hier jemand damit aus.
*******k69 Mann
1.249 Beiträge
Ist schon etwas her, dass ich in VBA programmiert habe.
With Range("B" & Target.Row, "P" & Target.Row)
Heißt dieser Part nicht, dass es nur in den Spalten B bis P funktioniert?

Teste dein Zufallsweise mal mit diesem Hintergedanken.
Viel Erfolg!
*****_74 Mann
1.185 Beiträge
Themenersteller 
Ja das Stimmt. Es soll ja auch nur die Spalten B bis P markieren und nicht die ganze Zeile.
*******ger Mann
55 Beiträge
Ich habe da noch ein paar Fragen zu Deinen Anforderungen:
1. Soll das nach Aktivierung für mehrere, nacheinander angeklickte Zellen gehen?
2. Soll da nur eine vordefinierte (oder verschiedene bei mehreren Schaltflächen) Farbe genutzt werden?
3. Soll dieser Code bei verschiedenen Tabellen der gleichen Mappe funktionieren oder nur auf einem bestimmten Tabellenblatt?
4. Wo kommt Deine Bedingung "ausfuehren=true" her?

LG Aqua_Tiger
*******ger Mann
55 Beiträge
Zitat von *****_74:
Ja das Stimmt. Es soll ja auch nur die Spalten B bis P markieren und nicht die ganze Zeile.

Du meinst Zellen in den Spalten B bis P?
*****_74 Mann
1.185 Beiträge
Themenersteller 
1. Ja, ich möchte auf den Button drücken, dann gehe ich in Zeile 4, die Spalten B bis P färben sich. Dann gehe ich in Zeile 6 und dies färbt sich auch. Drücke auf den Button und die Funktion ist deaktiviert.
2. Es soll nur eine vordefinierte Farbe genutzt werden.
3. Dieser Code gilt für nur ein Arbeitsblatt.
4. Habe es so aus dem Netz zusammen gebastelt. Daher weiß ich nicht woher die "Bedingung" kommt.
*******Axel Paar
87 Beiträge
Wie willst du denn die Variable "ausführen" an deinen Code, der im Excelsheet hinterlegt wurde, übergeben? Man Könnte ausführen in eine Zelle speichern (zB: in Zelle (1000,1000))
Du könntest den Code hinter dem Button so gestalten:
If Cells(1000,1000)<>0 then
Cells(1000,1000)=0
else
Cells(1000,1000)=1
endif

Dein Code würde dann so aussehen:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Cells(1000,1000)<>0 then Then
With Range("B" & Target.Row, "P" & Target.Row).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Else
Target.Interior.ColorIndex = xlNone
End If
End Sub
*******7_70 Mann
29 Beiträge
Warum über VBA und nicht über Benutzerdefinibare Formatierung?

1 = Farbe
0 = keine Farbe
*****_74 Mann
1.185 Beiträge
Themenersteller 
Weiss nicht wie ich es über benutzerdefinierte Formatierung per Knopfdruck gestalten kann.
Werde den Code gleich mal ausprobieren
*******Axel Paar
87 Beiträge
Mit deinem Code wird die Zeile eingefärbt, aber nur eine Zelle entfärbt.
Willst du wiede die ganze Zeile entfärben dann sieht es so aus:

Private Sub CommandButton1_Click()
If Cells(1000, 1000) <> 0 Then
Cells(1000, 1000) = 0
Else
Cells(1000, 1000) = 1
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
1
If Cells(1000, 1000) <> 0 Then
With Range("B" & Target.Row, "P" & Target.Row).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Else
Range("B" & Target.Row, "P" & Target.Row).Interior.ColorIndex = xlNone
End If
End Sub
*******Axel Paar
87 Beiträge
Du musst mal ganz exakt beschreiben was genau passieren soll.
Du klickst in welche Zelle und was soll sich dann einfärben?
**********berer Mann
7.339 Beiträge
Zitat von *******7_70:
Warum über VBA und nicht über Benutzerdefinibare Formatierung?

1 = Farbe
0 = keine Farbe

Das nennt sich "bedingte Formatierung" und man kann Zellen abhängig von dem, was in ihnen steht, formatieren.

Zum Beispiel kann man bei Eingabe von "0" die Zelle rot färben, bei Eingabe von "1" die Zelle grün. Das geht auch mit größer/kleiner, Datumsangaben, etc. und natürlich kann man statt der Zellenfarbe auch den Text anpassen und vieles mehr.

Einfach mal mit der bedingten Formatierung spielen, denn wenn es nur darum geht, dass eine Zelle (oder auch mehrere) abhängig von ihrem Inhalt anders ausschauen sollen, dann kannst du das auch mit dieser Funktion umsetzen.
*****_74 Mann
1.185 Beiträge
Themenersteller 
Danke. Danke @*******Axel

Genauso wie ich es mir vorgestellt habe, hast du mir mit den ersten Code geholfen. Wahnsinn. Echt echt klasse. Danke, danke, danke.


Evtl. kannst du mir bei einem weiteren Problem helfen. Dann hätte ich es komplett.
Erst einmal der Code.
Sub Schriftart()

Range("A5:P2000").Borders.Color = vbBlue
Range("A5:P2000").Borders.LineStyle = xlContinuous
Range("A5:P2000").Borders.Weight = xlThin
Range("A5:P2000").Font.Name = "Calibri"
Range("A5:P2000").Font.Size = 11
Range("A5:A2000, C5:C2000, I5:I2000, M5:P2000").HorizontalAlignment = xlCenter
Range("A5:A2000, C5:C2000, I5:I2000, M5:P2000").VerticalAlignment = xlCenter

End Sub

Diese Tabelle wird täglich erweitert und ist keine "Inteligente Tabelle"
Jetzt möchte ich, das die Range automatisch zur letzten Zeile geht und die ganze Tabelle mit der Schriftart bearbeitet wird. Das ganze sol nur für ein Tabellenblatt gelten.
*******Axel Paar
87 Beiträge
Das ist kein Problem.

Vorher müssen wir unser Zelle 1000/1000 löschen. Sie würde sonst vermutlich als letzte Zeile erkannt.
Dann wird die letzte Zeile ermittelt und zuletzt dahin gesprungen.

Code:
Cells(1000,1000)=""
letztezeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
cells(letztezeile,1).select
*******Axel Paar
87 Beiträge
Den Rest schafst du, oder?
*******Axel Paar
87 Beiträge
schaffst du. sorry
*******Axel Paar
87 Beiträge
Es ist ein wenig problematisch beim Programmieren mit der Bezeichnung A1, B1 usw zu arbeiten leichter ist es nur mit Zahlen. A1 = Cells(1,1)
Range("A5:P2000") entspricht dann Range(cells(1,5), cells(16,2000))
*******Axel Paar
87 Beiträge
Quatsch
Range("A5:P2000") entspricht dann Range(cells(5,1), cells(2000.16))
Anmelden und mitreden
Du willst mitdiskutieren?
Werde kostenlos Mitglied, um mit anderen über heiße Themen zu diskutieren oder deine eigene Frage zu stellen.