HERBERS Excel-Forum - das Archiv
Range().Value Problem
Dennis

Hallo liebes Forum,
ich habe folgenden Code:
Private Sub CommandButton1_Click()
Dim a As String
Dim b As Integer
Dim c As Integer
Dim d As String
Dim e As Integer
Dim f As Integer
Dim Index As Integer
a = Mid(TextBox1.Text, 1, 1)
b = Mid(TextBox1.Text, 2, 2)
c = Asc(a) - 64
d = Mid(TextBox2.Text, 1, 1)
e = Mid(TextBox2.Text, 2, 2)
f = Asc(d) - 64
With Range(Cells(b, c), (Cells(e, f)))
If Range(Cells(b, c), (Cells(e, f))).Value = "" Then
If Range(Cells(b, c), (Cells(e, f))).Rows.Count = 5 Or _
Range(Cells(b, c), (Cells(e, f))).Columns.Count = 5 Then
.Value = "#"
.Font.Bold = True
.Interior.Color = vbYellow
Else
MsgBox "Bitte Abstand von 5 Zeilen/Spalten wählen", vbOKOnly &  vbInformation, " _
Hinweis"
Exit Sub
End If
Else
MsgBox "Diese Zelle ist bereits belegt", vbOKOnly & vbInformation, "Hinweis"
Exit Sub
End If
End With
Range(Cells(b, c), (Cells(e, f))).Select
For Index = xlEdgeLeft To xlEdgeRight
With Selection.Borders(Index)
.LineStyle = xlDouble
.Weight = xlThick
End With
Next Index
End Sub
Ich lese aus einer Userform dort eigegebene Zellen aus und wähle sie über diese Funktion dann an und fülle sie. Funktioniert soweit super.
Jetzt möchte ich aber noch die Probe einfügen, ob eine der Zellen bereits einen Wert hat. Falls ja, soll eine Fehlermeldung kommen.
Dass der Code so nicht funktioniert, ist mir bewusst, leider finde ich keine Lösung. Ich habe die nicht funktionierenden Schnipsel fett markiert, ohne sie läuft der Code (aber eben ohne die zusätzliche Abfrage).
Vielen Dank,
Dennis

AW: Range().Value Problem
hary

Moin Dennis
if Application.CountA(Range(Cells(b, c), (Cells(e, f)))) = 0

gruss hary

Auch dir..
Dennis

..vielen Dank hary :)
Funktioniert nun einwandfrei.

AW: Range().Value Problem
Rudi

Hallo,
wozu der With-Rahmen wenn du ihn nicht nutzt?
  With Range(Cells(b, c), (Cells(e, f)))
If WorksheetFunction.CountA(.Cells) = 0 Then
If .Rows.Count = 5 Or .Columns.Count = 5 Then
.Value = "#"
.Font.Bold = True
.Interior.Color = vbYellow
Else
MsgBox "Bitte Abstand von 5 Zeilen/Spalten wählen", _
vbOKOnly & vbInformation, " Hinweis """
Exit Sub
End If
Else
MsgBox "Diese Zellen sind bereits belegt", _
vbOKOnly & vbInformation, "Hinweis"
Exit Sub
End If
End With

Gruß
Rudi

Danke Rudi
Dennis

Danke dir Rudi!
Ich habe da nachträglich dran rumgebastelt und dann komplett übersehen, dass ein With-Rahmen vorhanden ist.
So sieht das schon viel besser aus :)
Liebe Grüße

usability?
Michael

Hallo zusammen,
als Anwender mag ich es nicht besonders, wenn ich Eingaben machen kann, die dann mit einer Meldung quittiert werden á la: "nein, gib bitte was anderes ein".
Es kommt natürlich auf den Zusammenhang an, aber wäre es nicht denkbar, nur die 1. Textbox auszuwerten und als obere, linke Ecke zu verwenden?
Letztlich muß nur eine Zeile geändert werden...
With Range(Cells(b, c), (Cells(b+4, c+4)))

... und die nicht benutzen Variablen, Abfragen usw. kann man rauswerfen.
Schöne Grüße,
Michael

AW: usability?
Dennis

Hallo Michael,
deine Anmerkung macht Sinn, in meinem Beispiel kann der Benutzer aber auch eingeben, dass die Range nach unten verläuft und nicht nur nach rechts. Somit muss ich das leider so abfragen :)
Gruß,
Dennis

Range().Value Problem
Dennis

Hallo liebes Forum,
ich habe folgenden Code:
Private Sub CommandButton1_Click()
Dim a As String
Dim b As Integer
Dim c As Integer
Dim d As String
Dim e As Integer
Dim f As Integer
Dim Index As Integer
a = Mid(TextBox1.Text, 1, 1)
b = Mid(TextBox1.Text, 2, 2)
c = Asc(a) - 64
d = Mid(TextBox2.Text, 1, 1)
e = Mid(TextBox2.Text, 2, 2)
f = Asc(d) - 64
With Range(Cells(b, c), (Cells(e, f)))
If Range(Cells(b, c), (Cells(e, f))).Value = "" Then
If Range(Cells(b, c), (Cells(e, f))).Rows.Count = 5 Or _
Range(Cells(b, c), (Cells(e, f))).Columns.Count = 5 Then
.Value = "#"
.Font.Bold = True
.Interior.Color = vbYellow
Else
MsgBox "Bitte Abstand von 5 Zeilen/Spalten wählen", vbOKOnly &  vbInformation, " _
Hinweis"
Exit Sub
End If
Else
MsgBox "Diese Zelle ist bereits belegt", vbOKOnly & vbInformation, "Hinweis"
Exit Sub
End If
End With
Range(Cells(b, c), (Cells(e, f))).Select
For Index = xlEdgeLeft To xlEdgeRight
With Selection.Borders(Index)
.LineStyle = xlDouble
.Weight = xlThick
End With
Next Index
End Sub
Ich lese aus einer Userform dort eigegebene Zellen aus und wähle sie über diese Funktion dann an und fülle sie. Funktioniert soweit super.
Jetzt möchte ich aber noch die Probe einfügen, ob eine der Zellen bereits einen Wert hat. Falls ja, soll eine Fehlermeldung kommen.
Dass der Code so nicht funktioniert, ist mir bewusst, leider finde ich keine Lösung. Ich habe die nicht funktionierenden Schnipsel fett markiert, ohne sie läuft der Code (aber eben ohne die zusätzliche Abfrage).
Vielen Dank,
Dennis

AW: Range().Value Problem
hary

Moin Dennis
if Application.CountA(Range(Cells(b, c), (Cells(e, f)))) = 0

gruss hary

Auch dir..
Dennis

..vielen Dank hary :)
Funktioniert nun einwandfrei.

AW: Range().Value Problem
Rudi

Hallo,
wozu der With-Rahmen wenn du ihn nicht nutzt?
  With Range(Cells(b, c), (Cells(e, f)))
If WorksheetFunction.CountA(.Cells) = 0 Then
If .Rows.Count = 5 Or .Columns.Count = 5 Then
.Value = "#"
.Font.Bold = True
.Interior.Color = vbYellow
Else
MsgBox "Bitte Abstand von 5 Zeilen/Spalten wählen", _
vbOKOnly & vbInformation, " Hinweis """
Exit Sub
End If
Else
MsgBox "Diese Zellen sind bereits belegt", _
vbOKOnly & vbInformation, "Hinweis"
Exit Sub
End If
End With

Gruß
Rudi

Danke Rudi
Dennis

Danke dir Rudi!
Ich habe da nachträglich dran rumgebastelt und dann komplett übersehen, dass ein With-Rahmen vorhanden ist.
So sieht das schon viel besser aus :)
Liebe Grüße

usability?
Michael

Hallo zusammen,
als Anwender mag ich es nicht besonders, wenn ich Eingaben machen kann, die dann mit einer Meldung quittiert werden á la: "nein, gib bitte was anderes ein".
Es kommt natürlich auf den Zusammenhang an, aber wäre es nicht denkbar, nur die 1. Textbox auszuwerten und als obere, linke Ecke zu verwenden?
Letztlich muß nur eine Zeile geändert werden...
With Range(Cells(b, c), (Cells(b+4, c+4)))

... und die nicht benutzen Variablen, Abfragen usw. kann man rauswerfen.
Schöne Grüße,
Michael

AW: usability?
Dennis

Hallo Michael,
deine Anmerkung macht Sinn, in meinem Beispiel kann der Benutzer aber auch eingeben, dass die Range nach unten verläuft und nicht nur nach rechts. Somit muss ich das leider so abfragen :)
Gruß,
Dennis

Dialog-Beispiele
Bewerten Sie hier bitte das Excel-Portal