VBA Nächste Zeile mit Bedingung markieren
#1
Hallo zusammen,

ich arbeite gerade an einem Planungstool um mir mein Arbeitsleben zu vereinfachen und habe hier schon einiges lernen dürfen, daher hoffe ich das ich auch heute hier Lösungen find :D.

Also ich habe anbei eine kleine Datei angehängt mit 3 Spalten wo ich Ausführungen Pro Jahr / Monat / Woche stehen habe.
Die Aufgabe ist es nun einen Button einzufügen mit dem ich wenn ich D2 markiert habe auf die nächste Zeile springe wo ich eine Monats oder Jahresleistung stehen habe.
Es darf die spalte nicht geändert werden, nur die aktive Zeile.

Und wenn weder Wochen / Monats / Jahresleistung vorhanden ist (Also am ende der liste) soll eine einfache msg box auftauchen...


.xlsx   Frage für Forum.xlsx (Größe: 8,93 KB / Downloads: 8)

Gestern Abend zerbrach ich mir den Kopf und bin nicht auf die Lösung gekommen...

Nun beim schreiben denke ich gerade an 2 Variablen...
Variable 1 = Aktive Zeile
Variable 2 = Zeile gefunden in schleife Wenn Wochenleistung Leer aber Monats oder Jahresleistung > 0 ist.
Am ende des Makros dann
Variable 1 = Variable 2 ?

Ist das eventuell schon die Lösung? 20
Da die Datei nun schon erstellt ist und die Frage eventuell andere Leute umtreibt bin ich trotzdem auf eure Vorschläge gespannt wie immer :)

Mfg Seeqi.
Antworten Top
#2
Hallo Seeqi,

Code:
Sub aaa()
  With ActiveSheet
    .Cells(.Columns("B:C").Resize(Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeConstants).Row, 4).Select
  End With
End Sub

Gruß, Uwe
Antworten Top
#3
Hi,

ich habe es so verstanden:
Code:
Sub t()
Dim a As Range
Set a = ActiveCell.End(xlToLeft).Offset(1)
If a = "" Then Set a = a.End(xlDown)
With a
    If .Row = Rows.Count Then
        MsgBox "Ende erreicht"
    Else
        Cells(.Row, ActiveCell.Column).Select
    End If
End With
End Sub
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#4
Moin zusammen,

vielen Dank schonmal für die Lösungsansätze.

Ich habe mich mal an einer eigenen Lösung versucht.

Code:
Private Sub CommandButton76_Click()

Dim AZeile As Integer
Dim last As Long
Dim izeile As Integer
Dim ispalte As Integer

last = Worksheets("Stammdaten").Range("D13").End(xlDown).Row
AZeile = ActiveCell.Row


For izeile = AZeile To last
For ispalte = 24 To 25
If Cells(izeile, ispalte).Value > 0 Then
AZeile = izeile
End If
Next ispalte
Next izeile

Cells(AZeile, ActiveCell.Column).Select
End Sub

Problem bei meiner Lösung ist, dass er wenn Azeile = IZeile die schleife beenden soll... nur leider bin ich noch nicht so gut das ich wüsste wie das genau funktioniert...

Schön wäre wenn mir hier jemand helfen könnte meine Lösung zum laufen zu kriegen so lerne ich wohl am besten :D
Antworten Top
#5
Hallo,

Code:
Private Sub CommandButton76_Click()
  Dim AZeile As Long
  Dim last As Long
  Dim izeile As Long
  Dim ispalte As Long
  
  last = Cells(Rows.Count, 4).End(xlUp).Row
  AZeile = ActiveCell.Row
  
  For izeile = AZeile To last
    For ispalte = 24 To 25
      If Cells(izeile, ispalte).Value > 0 Then
        Cells(AZeile, ActiveCell.Column).Select
        Exit For
      End If
    Next ispalte
  Next izeile
End Sub

Gruß, Uwe
Antworten Top
#6
Moin Uwe,

Danke dir erstmal, nun weiß ich wo das Exit For hinkommt :).

Problem ist, er springt noch immer an das letzte Ergebnis.

Ziel ist es, dass er in die Zeile des ersten Treffers "springen" soll und dann beim erneuten betätigen des Button in den nächsten Treffer usw.
Antworten Top
#7
Hi,

du musst natürlich auch noch die äußere Schleife unterbrechen...
Code:
Private Sub CommandButton76_Click()
  Dim AZeile As Long
  Dim last As Long
  Dim izeile As Long
  Dim ispalte As Long
  Dim Abbruch As Boolean
  
  last = Cells(Rows.Count, 4).End(xlUp).Row
  AZeile = ActiveCell.Row
  
  For izeile = AZeile To last
    For ispalte = 24 To 25
      If Cells(izeile, ispalte).Value > 0 Then
        Cells(AZeile, ActiveCell.Column).Select
        Abbruch = True
        Exit For
      End If
    Next ispalte
    If Abbruch Then Exit For
  Next izeile
End Sub
Mangels geeigneter Beispieldatei (der Code passt nicht zur bisherigen Datei) natürlich ungetestet.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#8
Ok das Problem verstehe ich aber die Lösung finde ich gerade nicht...

Wenn er in einer Zeile ist wo eine Monatsleistung vorhanden ist und die Zeile in die er die schleife startet die aktive Zeile wird er natürlich in der aktiven Zeile die Monatsleistung finden und Selektiert mich quasi in meine jetzige Zeile

Heißt er muss auch prüfen ob meine Aktive zeile = die ist in die er mich "Selektieren" will und wenn dies der fall ist muss er die schleife weiter machen...
Antworten Top
#9
Hi,

also zumindest wenn ich dir weiter helfen soll, solltest du eine Datei hier rein stellen, die zum Code passt. Mehr als ich bereits geschrieben habe, kann ich aus deinem Code und deiner Beschreibung nicht raus lesen...
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#10
So hab die Datei mal etwas zusammen geschnitten das sie hier rein passt.

in Spalte W X und Y sind die Intervalle zu sehen.
Das Makro soll nun folgendes tun:

Von der aktiven Zelle aus prüfen in welcher Zeile die nächste Monats/Jahresleistung ist und danach diese Zelle in der aktiven Spalte selektieren wo die Monats/Jahresleistung vorhanden ist.
Beim nächsten mal betätigen soll dann die nächste Monats/Jahresleistung Zeile ausgewählt werden, usw.

Wenn er keine Monatsleistungen mehr findet soll eine Msgbox kommen "keine Monatsleistungen mehr zu verplanen".

die letzte Zeile die geprüft werden soll ist die letzte Zeile mit Inhalt in Spalte D, da hier immer werte stehen werden.


.xlsm   Test für Forum.xlsm (Größe: 164,28 KB / Downloads: 4)

Hoffe konnte das Thema etwas verständlicher machen für alle :D
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste