In einem definierten Berich nur eine Zelle ausw.

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

Betrifft: In einem definierten Berich nur eine Zelle ausw.
von: r2d2
Geschrieben am: 20.05.2015 10:46:11

Hallo,
ich möchte, daß der Anwender in einem freigegebenen Bereich (B2:B20) nur eine Zelle mit einem "x" per Doppelklick markieren kann.
Folgenden Code habe ich:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim BER As String
    BER = ("B2:B20")
    On Error Resume Next
    
    If Not Intersect(Target, Range(BER)) Is Nothing Then
      Target = IIf(Target = "x", "", "x")
      Cancel = True
    End If
End Sub
Aber was muß ich verändern, damit in dem Bereich immer nur ein "x" eingetragen werden kann und wenn z.B. an anderer Stelle ein "x" eingegeben wird muß das vorherige verschwinden.
Danke.

Bild

Betrifft: AW: In einem definierten Berich nur eine Zelle ausw.
von: Rudi Maintaire
Geschrieben am: 20.05.2015 11:08:42
Hallo,
so?

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
  Dim BER As Range, bolX As Boolean
    Set BER = Range("B2:B20")
    
    If Not Intersect(Target, BER) Is Nothing Then
      bolX = Target = "x"
      BER.ClearContents
      If Not bolX Then Target = "x"
      Cancel = True
    End If
End Sub

Gruß
Rudi

Bild

Betrifft: AW: In einem definierten Berich nur eine Zelle ausw.
von: r2d2
Geschrieben am: 20.05.2015 11:49:57
Ja fast... ich habe zwei Bereicht und mit
Set BER = Range("B2:B20; F2:F20")
geht es nicht.

Bild

Betrifft: Set BER = Union(Range("B2:B20"), Range("F2:F20"))
von: Rudi Maintaire
Geschrieben am: 20.05.2015 11:58:37


Bild

Betrifft: AW: Set BER = Union(Range("B2:B20"), Range("F2:F20"))
von: r2d2
Geschrieben am: 20.05.2015 12:04:57
Ja, doch noch nicht ganz, da beide Bereiche unabhängig voneinander sind.
Also dann doch diese Lösung:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim BER1 As Range
Dim BER2 As Range
Dim bolX As Boolean
     
Set BER1 = Range("C8:C55")
Set BER2 = Range("F8:F55")
     
    If Not Intersect(Target, BER1) Is Nothing Then
        bolX = Target = "x"
        BER1.ClearContents
        If Not bolX Then Target = "x"
        Cancel = True
    End If
    If Not Intersect(Target, BER2) Is Nothing Then
        bolX = Target = "x"
        BER2.ClearContents
        If Not bolX Then Target = "x"
        Cancel = True
    End If
End Sub
Oder?

Bild

Betrifft: AW: Set BER = Union(Range("B2:B20"), Range("F2:F20"))
von: Daniel
Geschrieben am: 20.05.2015 13:58:25
Hi
bei mehrern Bereichen kannst du eine Schleife über die Bereiche erstellen, damit du nicht jeden Bereich einzieln ausprogrammieren musst:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim BER As Range
Dim bolX As Boolean
For Each BER In Range("C8:C55,F8:F55").Areas
    If Not Intersect(Target, BER) Is Nothing Then
        bolX = Target.Value = ""
        BER.ClearContents
        Target.Value = IIf(bolX, "x", "")
        Cancel = True
    End If
Next
End Sub

die einzelen Bereiche werden in der Range als Adresse mit Komma getrennt angegeben.
gruß Daniel

Bild

Betrifft: AW: Set BER = Union(Range("B2:B20"), Range("F2:F20"))
von: r2d2
Geschrieben am: 20.05.2015 15:16:20
Und welche Variante ist jetzt die "schnellere" (ok, bei dem kleinen Bereich kaum spürbar) oder die "sauberere"?

Bild

Betrifft: AW: Set BER = Union(Range("B2:B20"), Range("F2:F20"))
von: Daniel
Geschrieben am: 20.05.2015 15:55:02
Hi
sauber ist beides
bezüglich Geschwindigkeit sollte es keinen spürbaren unterschied geben.
entscheiden ist hier der Programmieraufwand für dich.
Gruß Daniel

Bild

Betrifft: AW: In einem definierten Berich nur eine Zelle ausw.
von: r2d2
Geschrieben am: 20.05.2015 11:53:45
Ich habe es jetzt so gelöst:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim BER1 As Range
Dim BER2 As Range
Dim bolX As Boolean
     
Set BER1 = Range("C8:C55")
Set BER2 = Range("F8:F55")
     
    If Not Intersect(Target, BER1) Is Nothing Then
        bolX = Target = "x"
        BER1.ClearContents
        If Not bolX Then Target = "x"
        Cancel = True
    End If
    If Not Intersect(Target, BER2) Is Nothing Then
        bolX = Target = "x"
        BER2.ClearContents
        If Not bolX Then Target = "x"
        Cancel = True
    End If
End Sub


Bild

Betrifft: AW: In einem definierten Berich nur eine Zelle ausw.
von: UweD
Geschrieben am: 20.05.2015 11:20:15
Hallo
so ??

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
    Dim Ber As Range
    Set Ber = Range("B2:B20")
    On Error Resume Next
    
    If Not Intersect(Target, Ber) Is Nothing Then
        If WorksheetFunction.CountIf(Ber, "x") = 0 Then
            Target = IIf(Target = "x", "", "x")
        Else
            MsgBox "x bereits vorhanden"
        End If
        Cancel = True
    End If
End Sub

Gruß UweD

Bild

Betrifft: AW: In einem definierten Berich nur eine Zelle ausw.
von: UweD
Geschrieben am: 20.05.2015 11:38:20
So lässt sich das eine x auch wieder entfernen

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
    Dim Ber As Range, Anz As Single
    Set Ber = Range("B2:B20")
    On Error Resume Next
    
    If Not Intersect(Target, Ber) Is Nothing Then
        Anz = WorksheetFunction.CountIf(Ber, "x")
        If Anz = 0 Or (Target = "x" And Anz = 1) Then
            Target = IIf(Target = "x", "", "x")
        Else
            MsgBox "anderes x bereits vorhanden"
        End If
        Cancel = True
    End If
End Sub


Bild

Betrifft: AW: In einem definierten Berich nur eine Zelle ausw.
von: r2d2
Geschrieben am: 20.05.2015 11:45:28
Im Bereich B2:B20 soll immer nur ein "x" oder gar nichts stehen. Ist schon ein "x" vorhanden, so soll dies bei anklicken einer anderen Zelle verschwinden und in der angeklickten Zelle erscheinen.

Bild

Betrifft: Mit Doppelklick markiert man keine Zelle, ...
von: Luc:-?
Geschrieben am: 20.05.2015 13:04:38
…R2D2,
sondern editiert sie. Das solltest du als SuperRobot aber wissen… ;-]
Gruß, Luc :-?

Besser informiert mit …

 Bild

Beiträge aus den Excel-Beispielen zum Thema "In einem definierten Berich nur eine Zelle ausw."