Excel VBA Zelle ansprechen?

2 Antworten

Da es sein kann, dass deine Zeilen noch nicht fortlaufend befüllt sind, würden die bisherigen Lösungen dennoch am "Ende" ansetzen.
Den Index der "ersten" leeren Zelle in einer Spalte kannst du dir über eine Hilfszelle in Excel anzeigen lassen: Matrix Formel, mit Shift+Ctrl+Enter abschliessen
  ={MIN(WENN(A1:A1000;"";ZEILE(A1:A1000)))}
Angenommen diese Formel steht in Zelle "Z1"

Private Sub CommandButton1_Click()
Dim myNextRow as integer
myNextRow = Range("Z1").Value
   Cells(myNextRow, 2).Value = Anrede.Value
    'folgend deine weiteren Zeilen in analoger Weise
End Sub
==
Anmerkung:
Sofern du diese Variante hast:
   End(xlUp)
solltest du vorher einen möglichen AutoFilter per VBA deaktivieren damit du nicht versehentlich auf der "falschen" letzten Zeile landest und deine Daten überschreibst.
Um diesem aus dem Weg zu gehen, wird gerne auch .UsedRange.Rows verwendet, was allerdings auch einen Nachteil hat, da ein möglicher Rahmen um eine "leere" Zelle bereits als "used" gilt und ggf viel zu weit unten etwas findet.  

Es gibt mehrere Wege, die nächste freie Zeile zu finden. Die einfachste ist 

iNextRow = Range("A1:A10000").End(xlUp).Row + 1

(oder so ähnlich / ungetestet)

Falls das nicht klappen sollte, such im Internet mal nach "VBA Range End"

Du kannst auch selbst eine einfache Schleife verwenden. In etwa so:

iNextRow = 1
While Cells(iNextRow ,1).Value <> ""
  iNextRow  = iNextRow  + iNextRow 
Wend

Dann gibt es noch eine Variante mit UsedRange (einfach mal googeln).

8

Wie binde ich das in meinem Skript den ein ?

0
58
@darkstarresi

Einen der Befehle deinen Zuweisungen vorschalten und dann in deinen Zuweisungen die Zeile durch iNextRow ersetzen.

0
8
@Suboptimierer

Private Sub CommandButton1_Click()

inextrow = Range("A1:A10000").End(xlUp).Row + 1

inextrow.Value = Anrede.Value

0
58
@darkstarresi

Nein, iNextRow ist die nächste, freie Zeile. Es ist kein Bereich. Value funktioniert auf einen Bereich oder auf Steuerelemente.

Cells(iNextRow, 2).Value = Anrede.Value
'... 
0
8
@Suboptimierer

inextrow = Range("A1:A10000").End(xlUp).Row + 1

Cells(inextrow, 2).Value = Anrede.Value

0

VBA Code Erklärung

Guten Abend zusammen. Könnte mir jemand weiterhelfen bei diesem Code. Was macht er genau in Excel? Also Die einzelnen Schritte die er durchläuft,.

Option Explicit

Public Sub Double_Red()
Dim lngZeile As Long
Dim lngZeilenSprung As Long
Dim strSuchwert As String

lngZeile = Cells(Rows.Count, 4).End(xlUp).Row

  For lngZeilenSprung = lngZeile To 1 Step -1
    strSuchwert = Cells(lngZeilenSprung, 4).Value
      If Application.WorksheetFunction.CountIf(Range(Cells(1, 4), Cells(lngZeile, 4)), strSuchwert) <> 1 Then
        Cells(lngZeilenSprung, 4).Interior.ColorIndex = 3
      End If
  Next lngZeilenSprung

End Sub
...zur Frage

In Excel VBA eine If-Schleife um zwei Zeilen voneinander zu subtrahieren (Uhrzeitformat und abs- Funktion inbegriffen)?

Mein Bisheriger Versuch:

For j = 4 To 700

With ActiveWorksheet

If .Cells(j, 2) = "" Then Exit For

If Minute(Abs(.Cells(j, 8).Value) - Abs(.Cells(j - 1, 8).Value)) >= 1 Then _

Call FilterCopieVerspätung

End With
Next j

End Sub

Problem: Typenkonflikt

...zur Frage

VBA for-schleife: Leere Zeilen überspringen?

Hallo! Ich habe mir in Excel mit VBA eine Schleife gebastelt zur Zielwertsuche. Da ich VBA sonst nie brauche möchte ich hierfür nicht erst VBA lernen. Daher hier meine Frage ob mir hier jemand helfen kann. Es geht um folgendes Skript. Dieses macht Probleme wenn zwischen den Zeilen Leerzeilen sind (Fehler 400). Kann man das irgendwie verhindern? Die leeren Zeilen z.B. überspringen?

Vielen Dank!

Sub PreisBerechnung()
Dim IntZeile As Integer
For IntZeile = 4 To 199
Cells(IntZeile, 33).GoalSeek Goal:=2.5, ChangingCell:=Cells(IntZeile, 26)

Next
End Sub
...zur Frage

Beim ändern einer bestimmten Zelle Makro erneut ausführen?

Hallo,

ich habe folgendes Anliegen: Ich möchte in Excel mit VBA etwas machen. Hier einmal der Code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("j10")) Is Nothing Then
    Select Case Range("j10").Value
        Case "manuell"
            Range("s7:u7").ClearContents
        Case "Anfang & Ende"
            Range("s7").Value = Worksheets("PEPStauchung").Range("d2").Value
    End Select
End If
End Sub 

Ich möchte, dass, wenn ich in Zelle S6 einen Wert ändere, das ganze erneut durchgeführt wird.

Wie binde ich das ein? Vielen Dank!!!

Syrena

...zur Frage

Wie kann ich in VBA-Excel per laufender Nummer meine Userform Einlesen und danach diese "Einlesung" bearbeiten?

Hi, ich arbeite momentan an einer Userform(Bild) womit ich in meiner Tabelle "Gesamtdaten": In die erste leere Zeile einen neuen Mitarbeiter anlegen kann.

Diese läuft auch einwandfrei.

Der Übernehmen Button hat folgende Programierung: (ist nur der teil den Ihr auch auf dem Screenshot seht ... der rest wäre zu viel :D )

Private Sub cmdÜbernehmen_Click()

Dim ELZ As Long

ELZ = Sheets("Gesamtdaten").Cells(Rows.Count, 1).End(xlUp).Row + 1

Sheets("Gesamtdaten").Cells(ELZ, 1).Value = Me.TXTlfdNr.Value
Sheets("Gesamtdaten").Cells(ELZ, 2).Value = Me.TXTLehrjahr.Value
Sheets("Gesamtdaten").Cells(ELZ, 3).Value = Me.CBAusbildungsart.Value
Sheets("Gesamtdaten").Cells(ELZ, 4).Value = Me.CBAusbilder.Value
Sheets("Gesamtdaten").Cells(ELZ, 5).Value = Me.TXTName.Value
Sheets("Gesamtdaten").Cells(ELZ, 7).Value = Me.TXTVorname.Value
Sheets("Gesamtdaten").Cells(ELZ, 8).Value = Me.TXTPersonalnummer.Value
Sheets("Gesamtdaten").Cells(ELZ, 9).Value = Me.CBGeschlecht.Value
Sheets("Gesamtdaten").Cells(ELZ, 10).Value = Me.TXTStrasseHsNr.Value
Sheets("Gesamtdaten").Cells(ELZ, 11).Value = Me.CBPLZ.Value
Sheets("Gesamtdaten").Cells(ELZ, 12).Value = Me.CBOrt.Value

Der Abbruch button:

Private Sub cmdAbbruch_Click()

Unload Me

End Sub

Nun würde ich jedoch noch gerne einen button haben der wenn ich oben im Textfeld "lfdNr" eine schon vorhandene nummer eingebe. Dieser sofort alle daten in die jeweilge Combbox/Textbox einträgt und falls ich eine änderung vornehme diese auch mit rückfrage (msgbox Datensatz wurde geänder etc.) auch wieder in die Zeile der passenden LfdNr übernimmt.

Ich bin recht neu in VBA ... bzw. arbeite diese Jahr das 1. mal überhaupt mit excel ... desswegen hole ich mir (wenn ich nach [nun fast 1 woche] suchen keine lösung zu diesem problem finde die mir "zusagt" bzw. ich diese verstehe ... ( will ja was lernen ;'D )

Ich entschuldige mich schonmal für mein etwas "konfuses" auftreten aber hoffe auf Unterstützung :)

Was villeicht auch noch zu erwähnen ist:

Die lfdNr setzt sich automatisch beim öffnen der Userform auf die LfdNr die ein Neuer Datensatz automatisch bekommen sollte.

    TXTlfdNr = Sheets("DropDown-Menü's").Range("J15") 'In J15 steht die Formel =ANZAHL2(Gesamtdaten!A2:A502)

MfG Tim

...zur Frage

Excel VBA Userform: Textbox abhängig von Combobox machen?

Hallo,ich bin aktuell an einem Excel Projekt, in dem ich per VBA eine Userform erstellen möchte. Nun komme ich an folgender Prozedur nicht weiter.Ausgangssituation: Ich habe eine Userform mit Combobox (Combobox1) und Textbox (Textbox1) erstellt. Ich möchte nun, dass sobald in der Combobox ein bestimmter Wert ausgewählt wird, in der Textbox ebenso ein bestimmter Wert erscheint, der nur auf den einen Wert der Combobox passt. Die Combobox funktioniert einwandfrei, die Textbox macht nur nicht was sie soll. Bitte um Hilfe.Hier mein aktueller Code:

Private Sub UserForm_Initialize()
Me.ComboBox1.AddItem Range("A2")
Me.ComboBox1.AddItem Range("A3")
Me.ComboBox1.AddItem Range("A4")
Me.ComboBox1.AddItem Range("A5")
Me.ComboBox1.AddItem Range("A6")
If ComboBox1.Value = Range("A2") Then  
TextBox1.Text = "5"  
End If
End Sub
...zur Frage

Was möchtest Du wissen?