Range().Value Problem

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Range().Value Problem
von: Dennis
Geschrieben am: 06.08.2015 10:59:19

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

Bild

Betrifft: AW: Range().Value Problem
von: hary
Geschrieben am: 06.08.2015 11:06:20
Moin Dennis

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

gruss hary

Bild

Betrifft: Auch dir..
von: Dennis
Geschrieben am: 06.08.2015 12:44:34
..vielen Dank hary :)
Funktioniert nun einwandfrei.

Bild

Betrifft: AW: Range().Value Problem
von: Rudi Maintaire
Geschrieben am: 06.08.2015 11:09:03
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

Bild

Betrifft: Danke Rudi
von: Dennis
Geschrieben am: 06.08.2015 11:25:06
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

Bild

Betrifft: usability?
von: Michael
Geschrieben am: 06.08.2015 15:10:16
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

Bild

Betrifft: AW: usability?
von: Dennis
Geschrieben am: 06.08.2015 15:45:56
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

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Range().Value Problem"