Excel VBA: Frage zu Spalte und Zeile im Code

Hallo Experten,

ich habe in einem UserForm TextBoxen eingefügt, worüber man in einer Textbox einen Spaltenbuchstaben, in der anderen die Zeilennummer eingeben soll.

In meinen Code, den ich mir grad zusammenbastel kommt folgendes vor:

Range(„B2:B“ & lngEnde) womit es auch funktioniert.

Ich möchte aber die Möglichkeit haben, die Spalte und Zeile über das UserForm auszuwählen und nicht festgelegte Werte zu benutzen.

Wenn ich Range(spaltezeile:spalte & lngEnde) schreib funktioniert es nicht.

Was kann ich da machen?

Bitte lacht mich nicht aus, ich kann mir denken, dass die Lösung recht simpel ist xD

Danke schonmal

Gruß
Imhotep

Hallo Imhotep,

ich würde das mal so probieren:

Range (spalte1 & zeile1 & „:“ & spalte2 & zeile2)

Ohne Garantie, ich habs nicht ausprobiert.

Gruß, Andreas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Imhotep,

ich habe in einem UserForm TextBoxen eingefügt, worüber man in
einer Textbox einen Spaltenbuchstaben, in der anderen die
Zeilennummer eingeben soll.

langt da nicht eine textBox wo du B4711 eingeben kannst?

Range(„B2:B“ & lngEnde) womit es auch funktioniert.

Sieht schon aufgrund des Variablennamens gut aus.

Ich möchte aber die Möglichkeit haben, die Spalte und Zeile
über das UserForm auszuwählen und nicht festgelegte Werte zu
benutzen.
Wenn ich Range(spaltezeile:spalte & lngEnde) schreib
funktioniert es nicht.

Zeige mal bitte den Code den du hast. Und wenn die Variablen nicht mit einem im Code sichtbaren Werte gefüllt wrden, sondern so:
spaltezeile=cells(45,6)
dann sage auch was in cells(45,6) drinnesteht. Und wenn die Variablen über die Textboxen gefüllt werde, sage uns, welche Werte da ggfs. eingegebn werden könnten.

ich kann mir denken, dass die
Lösung recht simpel ist xD

Kann ich ohne den Gesamtcode, ggfs. noch den Hintergrund was der Code genau machen soll, nicht beurteilen.
Und simpel ist sehr relativ :smile:

Gruß
Imhotep

Ist dein Realvorname ein Geheimnis?

Gruß
Reinhard

Hallo Imhotep,

ich würde das mal so probieren:

Range (spalte1 & zeile1 & „:“ & spalte2 & zeile2)

Ohne Garantie, ich habs nicht ausprobiert.

Gruß, Andreas

Hallo Andreas,

es hat leider nicht funktioniert :frowning:

Trotzdem danke

Hallo Reinhard,

das Programm soll doppelte Daten innerhalb einer Spalte (vorerst, später auch als 2.Möglichkeit innerhalb einer Zeile.) finden und farblich markieren. Der ganze Code ist aus Schnipseln, die ich mir zusammengesucht habe zusammengesetzt (Google usw.). Im Code steht auch mein Name, ich denk das ist ok, solang ich nicht einen kompletten Code nehme und meinen Namen drunter setze.
Das ganze funktioniert bis jetzt wie geplant, wenn da nicht der eine kleine Bereich wäre, den ich gerne flexibel haben möchte.

Code hinter dem UserForm:

Private Sub CommandButton1_Click()
MsgBox („Dieses Makro wurde von Sebastian XXXXX erstellt. Kontakt: XXXXXXXXX“)
End Sub

Private Sub CommandButton2_Click()
Dim lngZeile As Long
Dim lngEnde As Long
tabe(1) = ComboBox1.Text
tabnam(1) = ComboBox2.Text
zeile = TextBox2.Text
spalte = TextBox1.Text

lngEnde = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
For lngZeile = zeile To Workbooks(tabe(1)).Worksheets(tabnam(1)).Range(spalte & 65536).End(xlUp).Row
If Application.CountIf(Range(„B2:B“ & lngEnde), Range(spalte & lngZeile)) > 1 Then ’ Hier der Kern des Problems
Range(spalte & lngZeile).Interior.ColorIndex = 45
End If
Next lngZeile
End Sub

Private Sub UserForm_Initialize()
Dim AM As Object
For Each AM In Application.Workbooks
With ComboBox1
.AddItem AM.Name
End With
Next AM
End Sub
Private Sub ComboBox1_Change()
Dim Blatt As Object
Workbooks(ComboBox1.Text).Activate
For Each Blatt In ActiveWorkbook.Sheets
With ComboBox2
.AddItem Blatt.Name
End With
Next Blatt
End Sub
Private Sub ComboBox2_Change()
Worksheets(ComboBox2.Text).Activate
End Sub

Außerdem in einem Modul:

Option Explicit
Public tabe(1), tabnam(1)

Falls du noch ein Bild von der UserForm benötigst, mach ich noch ein Screenshot und stell ich hier rein.

Gruß
Sebastian :wink:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ich hab ein wenig hin und her probiert und eine Lösung gefunden. Wie ich richtig dachte, ist es wirklich simpel, da es nur auf die richtige Schreibweise ankam. Hier, was ich gemacht hab:

Private Sub CommandButton2_Click()
Dim lngZeile As Long
Dim lngEnde As Long
tabe(1) = ComboBox1.Text
tabnam(1) = ComboBox2.Text
zeile = TextBox2.Text
spalte = TextBox1.Text

lngEnde = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
For lngZeile = zeile To Workbooks(tabe(1)).Worksheets(tabnam(1)).Range(spalte & 65536).End(xlUp).Row
If Application.CountIf(Range(spalte + zeile + „:“ + spalte & lngEnde), Range(spalte & lngZeile)) > 1 Then
Range(spalte & lngZeile).Interior.ColorIndex = 45
End If
Next lngZeile
End Sub

Ich danke trotzdem vielmals und wünsche noch einen schönen Abend

Gruß
Sebastian

Hallo Sebastian,

ich kann es gar nicht begründen weil ich da nix getestet habe aber aus dem Bauch heraus habe ich das Gefühl mit deinem Code stimmt was nicht, kann auch sein daß ich ihn anders geschriebn hätte, aber das ist ja wurscht wenn er funktioniert, never touch a running system :smile:

Was ich aber noch loswerden möchte, ersetze 65536 durch Rows.count, dann klappt’s auch in Excel2007.

Und
Application.WorksheetFunction.CountIf
ist schneller als
Application.CountIf
Laß das mal laufen:

Sub test()
Dim T, N, dummy
T = Timer
For N = 1 To 10000
 dummy = Application.WorksheetFunction.CountIf(Columns(1), "xyz")
Next N
MsgBox Timer - T
T = Timer
For N = 1 To 10000
 dummy = Application.CountIf(Columns(1), "xyz")
Next N
MsgBox Timer - T
End Sub

Gruß
Reinhard

Hallo Reinhard,

danke für die Tipps. Hab auch den Test durchlaufen lassen. Erster Wert: 19,09375 und zweiter Wert: 19,1875. Scheint also wirklich schneller zu sein, auch wenn ich beim warten auf das Ergebnis keinen großen Unterschied gemerkt habe :smile: Werd trotzdem meinen Code mal optimieren. Vielen Dank.

Gruß
Sebastian

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]