Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1584to1588
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

Probleme mit selection, with und end with

Probleme mit selection, with und end with
10.10.2017 10:35:05
Ben
Hallo zusammen,
ich mache hier vermutlich einige grundsätzliche Verständnisfehler.
Hier im Bsp. soll eine Zelle in Spalte 17 gefärbt werden, wenn in Spalte 45 = "z", bis zur Zeile 5000. Ich verstehe aber nicht ob ich selection durch interior ersetzen muss und im Zusammenspiel mit With und end with hört es dann leider ganz auf bei mir.
Könnt ihr euch das mal anschauen? Danke!
Sub Makro2()
Dim i As Integer
For i = 1 To 5000
If Cells(i, 45) = "z" Then 'Spalte
Cells(i, 17).Interior Destination:=Cells(i, 17)
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent1
.TintAndShade = 0.599993896298105
.PatternTintAndShade = 0
End With
End If
Next i
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Probleme mit selection, with und end with
10.10.2017 10:48:33
Michael
Hallo Ben!
Hier mal zwei Varianten, die Dir hoffentlich beim Verständnis der With-Konstruktion helfen (bezogen auf Deine Aufgabenstellung):
Sub a()
Dim Mappe As Workbook: Set Mappe = ThisWorkbook
Dim TabBlatt As Worksheet: Set TabBlatt = Mappe.ActiveSheet
Dim i As Long
For i = 1 To 5000
With TabBlatt
If .Cells(i, 45) = "z" Then
With .Cells(i, 17).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent1
.TintAndShade = 0.599993896298105
.PatternTintAndShade = 0
End With
End If
End With
Next i
Set Mappe = Nothing: Set TabBlatt = Nothing
End Sub

Sub b()
Dim Mappe As Workbook: Set Mappe = ThisWorkbook
Dim TabBlatt As Worksheet: Set TabBlatt = Mappe.ActiveSheet
Dim Spalte As Range, Zelle As Range
With TabBlatt
Set Spalte = .Range(.Cells(1, 17), .Cells(.Rows.Count, 17).End(xlUp))
For Each Zelle In Spalte
If Zelle.Offset(, 28) = "z" Then
With Zelle.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent1
.TintAndShade = 0.599993896298105
.PatternTintAndShade = 0
End With
End If
Next Zelle
End With
Set Mappe = Nothing: Set TabBlatt = Nothing
Set Spalte = Nothing: Set Zelle = Nothing
End Sub
LG
Michael
Anzeige
AW: Probleme mit selection, with und end with
10.10.2017 11:24:15
Ben
Hallo Michael,
danke für deine Bemühungen, funktioniert. Mir erscheint (a) etwas leichter verständlich für mich.
ein paar Verständnis Fragen, die mich noch interessieren würden:
  • Kannst du die Dimensionierung kurz erläutern? Dim Mappe und Dim TabBlatt. Ist das der Vollständigkeit halber von dir, oder ist diese Dimensionierung Pflicht?

  • wieso erhält "i" die Dimensionierung as Long und nicht integer

  • was bedeutet set nothing?

  • sorry für die vielen Fragen, aber schon mal danke falls du Lust hast das zu beantworten!
    Gruss Ben
    AW: Probleme mit selection, with und end with
    10.10.2017 11:35:23
    Michael
    Hallo Ben!
    ...oder ist diese Dimensionierung Pflicht?
    Die Deklaration von Variablen in VBA ist zumindest Best Practice, eigentlich schon Pflicht. Siehe dazu auch den sehr guten Artikel http://www.online-excel.de/excel/singsel_vba.php?f=4
    Wie Du die Variablen benennst, ist aber egal. Statt "Mappe" hätte ich das Workbook-Objekt auch "Wb" nennen können, aber ich habe mich für Ersteres entschieden, damit Du Dir ggf. im Code leichter tust.
    wieso erhält "i" die Dimensionierung as Long und nicht integer
    Weil der Long-Datentyp einen größeren Zahlenbereich umfasst, und dies bei der mittlerweile vorhandenen Zeilen-/Zellen-Anzahl in Excel erforderlich ist (Integer ist uU "zu klein"). Du kannst mittlerweile (auch hinsichtlich Performance etc.) immer auf einen Long setzen, wenn Du einen Integer benötigst.
    was bedeutet set nothing?
    Ist eigentlich nicht unbedingt notwendig, aber da zunächst Objekte (Workbook, Worksheet...) deklariert wurden, werden diese Objekte am Ende des Codes ordnungsgemäß zurückgesetzt. Ist eher historisch, quasi sauberes Programmieren, aber nicht unbedingt erforderlich.
    LG
    Michael
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige