Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1496to1500
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
Inhaltsverzeichnis

Code bitte mal überprüfen

Code bitte mal überprüfen
16.06.2016 23:11:28
Patrick

Hallo,
da ich mich natürlich auch selbst bemühe, meine Aufgaben irgendwie zu lösen, habe ich mich mal was in VBA eingelesen.
Mein Problem ist, dass in einer bereits mal hochgeladenen Tabelle, trotz Code-Anpassung zwei Spalten mit gefüllten Zeilen nicht automatisch mit formatiert wurden, wie es bei allen anderen mit dem Code geklappt hat.
Also habe ich den Code nochmal angepasst, es funktioniert noch immer nicht.
Die Formatierung aus dem Code soll auch bei Zellen in Spalte N und O durchgeführt werden, geschieht aber nicht. Hier sind die Codes, vielleicht mag ja einer nachsehen, was falsch ist. Wäre sehr dankbar...
DieseArbeitsmappe:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Calculation = xlCalculationAutomatic
Dim bereich1 As Range
Dim bereich2 As Range
Dim GesamtBereich As Range
Dim zelle As Range
Set bereich1 = Tabelle8.Range("J2:K1500") 'Bereich mit Formeln, Bereich ggf. anpassen
Set bereich2 = Tabelle8.Range("M2:O1500")
Set GesamtBereich = Union(bereich1, bereich2)
With Tabelle8
For Each zelle In GesamtBereich
If zelle <> "" Then
.Range(.Cells(zelle.Row, 1), .Cells(zelle.Row, 13)).Borders.Weight = xlThin
.Range(.Cells(zelle.Row, 1), .Cells(zelle.Row, 13)).HorizontalAlignment = xlCenter
.Range(.Cells(zelle.Row, 1), .Cells(zelle.Row, 13)).VerticalAlignment = xlCenter
With .Range(.Cells(zelle.Row, 1), .Cells(zelle.Row, 13)).Font
.Name = "Arial"
.Size = 8
.Bold = True
End With
End If
Next
End With
End Sub
Tabelle8:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim bereich1 As Range
Dim bereich2 As Range
Dim GesamtBereich As Range
Dim zelle As Range
Set bereich1 = Tabelle8.Range("A2:I1500") 'Bereich mit händischen Eintragungen, ggf. anpassen
Set bereich2 = Tabelle8.Range("L2:L1500")
Set GesamtBereich = Union(bereich1, bereich2)
With Tabelle8
For Each zelle In GesamtBereich
If zelle <> "" Then
.Range(.Cells(zelle.Row, 1), .Cells(zelle.Row, 13)).Borders.Weight = xlThin
.Range(.Cells(zelle.Row, 1), .Cells(zelle.Row, 13)).HorizontalAlignment = xlCenter
.Range(.Cells(zelle.Row, 1), .Cells(zelle.Row, 13)).VerticalAlignment = xlCenter
With .Range(.Cells(zelle.Row, 1), .Cells(zelle.Row, 13)).Font
.Name = "Arial"
.Size = 8
.Bold = True
End With
End If
Next
End With
End Sub

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code bitte mal überprüfen
17.06.2016 06:16:52
Crazy Tom
Hi
da du dich ja gerne selbst bemühst
diese Zeile zum Beispiel
.Range(.Cells(zelle.Row, 1), .Cells(zelle.Row, 13)).Borders.Weight = xlThin

könnte man auch so schreiben
.Range(.Cells(zelle.Row, "A"), .Cells(zelle.Row, "M")).Borders.Weight = xlThin

fällt dir auf warum die Spalten N & O nicht formatiert werden?
MfG Tom

AW: Code bitte mal überprüfen
17.06.2016 16:15:40
Patrick
Jetzt verstehe ich es. Danke. Soweit habe ich mich nun auch noch nicht mit VBA beschäftigt. Habe erst seit kurzem damit zu tun, nicht unbedingt freiwillig. :-).

Anzeige
...Kann man, Tom, gilt aber als schlechter ...
17.06.2016 21:25:39
Luc:-?
…Pgmmierstil…! ;-]
Gruß & schöWE, Luc :-?
Besser informiert mit …

AW: ...Kann man, Tom, gilt aber als schlechter ...
17.06.2016 22:09:44
Patrick
Naja, ich habe halt nur im Code gelsen, dass ich den Bereich festgelegt hatte, aber hatte nicht die Ahnung von all dem. Ist aber klar, hätte mich einfach mal mehr mit dem Code auseinander setzen sollen. Ich suche gerade überall irgendwelche code-Schnipsel zusammen, um meine Probleme zu lösen. Da verstehe ich dann auch ein wenig mehr von dem Aufbau. Ich belasse es auch bei den Zahlen, gefällt mir ganz gut.

Anzeige
AW: ...Ja Luc hier gehts aber nicht um ...
17.06.2016 22:29:44
Daniel
... guten oder schlechten Programmierstil, sondern Tom hat die Spaltenbuchstaben anstelle der Spaltennummern eingesetzt, damit deutlich wird, warum der Code nicht so funktioniert wie er soll.
btw, wo wir grad bei gutem Stil sind, "wdn" statt "werden" zu schreiben ist auch kein guter Stil, aber das willst du ja nicht kapieren.
Gruß Daniel

Du hast mir gar nichts zu sagen, ...
18.06.2016 04:09:24
Luc:-?
…Daniel,
und deine penetrante Besserwisserei und Wadenbeißerei verbitte ich mir einfürallemal!
Verdammter Krümelkacker, arbeite lieber an deiner Orthografie! :-[
Warum Tom das gemacht hat, ist mir schon klar, nur sollte das Patrick nicht unbedingt in der Form nachmachen - es gibt nämlich etliche, die das tun - man sieht's immer wieder mal!
Luc :-?

Anzeige
AW: Du hast mir gar nichts zu sagen, ...
18.06.2016 11:52:30
Daniel
ach Luc, ich scheibe dir ja gar nichst vor, du darfst auch weiter hin deinen Stil pflegen, dich sage dir nur ab und zu mal, wie dein Stil auf mich wirkt.
Und deine Beleidigungen solltest du besser unterlassen, das ist nun wirklich schlechter Stil.

AW: ...Kann man, Tom, gilt aber als schlechter ...
18.06.2016 07:12:04
Crazy Tom
Moin Luc (ich hoffe der Beitrag erscheint an richtiger Stelle?!)
kann ich nicht beurteilen ob es schlechter Programmierstil ist
aber bevor ich im Code für Spalte "IK" anfange zu zählen oder zu rechnen
da trage ich dann doch lieber fix die Spaltenbuchstaben ein ;-)
@ Patrick
ist es wirklich gewollt, dass beim Worksheet-Change sämtliche Zeilen
bis 1500 in der For-Each-Schleife formatiert werden?
durch die Schleife werden alle Formatierungen, bei jeder Neueingabe
im Bereich, neu gezeichnet
das nimmt bei 1435 beschriebenen Zeilen schon etwas Zeit in Anspruch
vielleicht erfüllt dieser Code ja schon deine Erwartungen
Private Sub Worksheet_Change(ByVal Target As Range)
'   Bereich mit händischen Eintragungen, ggf. anpassen
If Not Intersect(Target, Range("A2:I1500, L2:L1500")) Is Nothing Then
If Target.Value <> "" Then
With Range(Cells(Target.Row, 1), Cells(Target.Row, 15))
.Borders.Weight = xlThin
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
With Range(Cells(Target.Row, 1), Cells(Target.Row, 15)).Font
.Name = "Arial"
.Size = 8
.Bold = True
End With
End If
End If
End Sub

MfG Tom

Anzeige
AW: ...Kann man, Tom, gilt aber als schlechter ...
18.06.2016 13:06:32
Patrick
Hi CrazyTom,
was macht denn dieser Code anders? Sorry, habe ihn eingefügt, aber verstehe das noch nicht.
Muss ich nicht dann den Code bein "DieseArbeitsmappe" auch ändern?
Ich habe im Sheet bereits eine WENN-Formel, die schon bereits lange Rechenzeit beansprucht, weshalb ich diese Berechnungen erst starten lasse, wenn Excel geschlossen werden soll. Mir wäre es natürlich recht, wenn diese Berechnungszeiten insgesamt kürzer werden würden...

AW: ...Kann man, Tom, gilt aber als schlechter ...
18.06.2016 13:52:16
Patrick
Nachtrag:
Ich bekomme mit der Formel einen Laufzeitfehler wegen dieser Reihe:
If Target.Value <> "" Then

AW: ...Kann man, Tom, gilt aber als schlechter ...
18.06.2016 14:12:52
Daniel
Hi
in dem Code ist nicht berücksichtigt, dass Target auch mal mehr als eine Zelle umfassen kann (z.B. beim Löschen oder beim Einfügen)
in diesem Fall hat Target ja nicht nur einen Wert sondern mehre und Target.Value wird ein zweidimensionales Array mit allen Zellwerten von Target.
Ein Array kann man nicht mit einem Einzelwert vergleichen.
eine weitere Fehlermöglichkeit wäre, dass in der markierten Zelle ein Fehlerwert steht wie #NV, auch solche Fehlerwerte erforden eine spezielle Behandlung
beide Fälle könnte man so abfangen:
If Target(1).Text <> "" Then
wobei das (1) darfür sorgt, dass nur die erste Zelle von Target verwendet wird und somit das .Value auf jeden Fall einen Einzelwert erzeugt und das .Text den Zellinhalt in einen Text umformatiert, so dass Fehlerwerte auch nur einfache Texte sind und somit keine Spezialbehandlung mehr erfordern.
Gruß Daniel

Anzeige
AW: ...Kann man, Tom, gilt aber als schlechter ...
18.06.2016 14:20:07
Patrick
Ja, genau, ich habe eine Zeile testweise wieder gelöacht und dann kam der Fehler.
Die Frage ist, ob ich jetzt auch den Code in "DieseArbeitsmappe" ebenfalls anpassen muss?
Auf jeden fall danke für die Unterstützung. Ich verstehe einfach nicht viel von VBA und glaube langsam, dass ich das mit der Tabelle nicht schaffe...

AW: ...Kann man, Tom, gilt aber als schlechter ...
18.06.2016 14:24:50
Patrick
Edit,
scheint auch ohne Änderung des anderen Codes zu funktionieren und auch schneller.
Danke, diese Aufgabe konnte ich dann schonmal lösen.
Bin mal wieder in Google ;)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige