Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Range zu lang, zu viele Zellen?
#1
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)






If Intersect(Target, Range("B5,H5,E5,P5,S5,V5,B7,H7,E7,P7,S7,V7,B9,H9,E9,P9,S9,V9,B11,H11,E11,P11,S11,V11,B13,H13,E13,P13,S13,V13,B15,H15,E15,P15,S15,V15,B17,H17,E17,P17,S17,V17,B19,H19,E19,P19,S19,V19,B21,H21,E21,P21,S21,V21,B23,H23,E23,P23,S23,V23,M4:M23,AA4:AA23")) Is Nothing Then Exit Sub


If Len(Target.Cells(1)) = 0 Then
Target.Cells(1) = "X"
Else
Target.Cells(1) = vbNullString
End If


Cancel = True


End Sub
Hallo, habe eine Sub, die in gewissen Zellen ein x erzeugt. Das klappt soweit. Aber nur bis zu einer maximalen Anzahl an Zellen. Sobald ich jetzt eine Zelle mehr einfüge, kommt ein Laufzeitfehler 1004. Habe aber leider noch fast doppelt so viele Zellen, die er ansprechen muss.
Antworten Top
#2
Moin!
Die Spalten stehen ja fest (leider ohne Algorithmus, den man zugrundelegen könnte)
Spaltennummern: 2, 5, 8, 16, 19, 22
Ab Zeile 5 geht es dann in 2er-Schritten weiter, also die ungeraden Zeilen.
Dies könntest Du in einer geschachtelten Select-Case-Abfrage kürzen.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#3
Hi,

der Spaltenalgorithmus ist doch der:
n*14+m*3+2


für n=0 bis 1
und m=0 bis 2
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#4
Hi

Code:
=(2+((SPALTE(A1)-1)*3))+5*GANZZAHL((SPALTE(A1))/4)

Liefert 2; 5; 8; 16; 19; 22       'In VB Spalte durch Variable ersetzen und Ganzzahl (Int oder Fix)

Edit:
Opa Edgar war schneller und mal wieder kurz und knackig.
Antworten Top
#5
Code:
.Range("B5,H5,E5,P5,S5,V5,B7,H7,E7,P7,S7,V7,B9,H9,E9,P9,S9,V9,B11,H11,E11,P11,S11,V11,B13,H13,E13,P13,S13,V13,B15,H15,E15,P15,S15,V15,B17,H17,E17,P17,S17,V17,B19,H19,E19,P19,S19,V19,B21,H21,E21,P21,S21,V21,B23,H23,E23,P23,S23,V23,M4:M23,AA4:AA23"))


.Range("B5,H5,E5,P5,S5,V5,B7,H7,E7,P7,S7,V7,B9,H9,E9,P9,S9,V9,B11,H11,E11,P11,S11,V11,B13,H13,E13,P13,S13,V13,B15,H15,E15,P15,S15,V15,B17,H17,E17,P17,S17,V17,B19,H19,E19,P19,S19,V19,B21,H21,E21,P21,S21,V21,B23,H23,E23,P23,S23,V23,B26,H26,E26,P26,S26,V26,B28,H28,E28,P28,S28,V28,B30,H30,E30,P30,S30,V30,B32,H32,E32,P32,S32,V32,B34,H34,E34,M4:M23,M25:M34,AA4:AA23,AA25:AA32"))
.Range("C5:D5,F5:G5,I5:J5,C7:D7,F7:G7,I7:J7,C9:D9,F9:G9,I9:J9,C11:D11,F11:G11,I11:J11,C13:D13,F13:G13,I13:J13,C15:D15,F15:G15,I15:J15,C17:D17,F17:G17,I17:J17,C19:D19,F19:G19,I19:J19,C21:D21,F21:G21,I21:J21,C23:D23,F23:G23,I23:J23,Q5:R5,T5:U5,W5:X5,Q7:R7,T7:U7,W7:X7,Q9:R9,T9:U9,W9:X9,Q11:R11,T11:U11,W11:X11,Q13:R13,T13:U13,W13:X13,Q15:R15,T15:U15,W15:X15,Q17:R17,T17:U17,W17:X17,Q19:R19,T19:U19,W19:X19,Q21:R21,T21:U21,W21:X21,Q23:R23,T23:U23,W23:X23"))


Range.("C5:D5,F5:G5,I5:J5,C7:D7,F7:G7,I7:J7,C9:D9,F9:G9,I9:J9,C11:D11,F11:G11,I11:J11,C13:D13,F13:G13,I13:J13,C15:D15,F15:G15,I15:J15,C17:D17,F17:G17,I17:J17,C19:D19,F19:G19,I19:J19,C21:D21,F21:G21,I21:J21,C23:D23,F23:G23,I23:J23,Q5:R5,T5:U5,W5:X5,Q7:R7,T7:U7,W7:X7,Q9:R9,T9:U9,W9:X9,Q11:R11,T11:U11,W11:X11,Q13:R13,T13:U13,W13:X13,Q15:R15,T15:U15,W15:X15,Q17:R17,T17:U17,W17:X17,Q19:R19,T19:U19,W19:X19,Q21:R21,T21:U21,W21:X21,Q23:R23,T23:U23,W23:X23,Q26:R26,T26:U26,W26:X26,Q28:R28,T28:U28,W28:X28,Q30:R30,T30:U30,W30:X30,Q32:R32,T32:U32,W32:X32,C26:D26,F26:G26,I26:J26,C28:D28,F28:G28,I28:J28,C30:D30,F30:G30,I30:J30,C32:D32,F32:G32,I32:J32,C34:D34,F34:G34,I34:J34"))
Also eine Variable für die Spalten einsetzen? 
Habe 4 verschiedene subs mit jeweils anderen Ranges, die zu lang sind. 
Echt knifflig.
Antworten Top
#6
Zunächst mal  :18: für Bosko und Elex!
@Barthi:
Warum gibt es überhaupt die "zerpflückten" Bereiche?

Anders herum:
Wäre es nicht sinnvoller, bei allen Zellen, bei denen das x geswitcht werden soll, unter Schutz geperrt zu entfernen.
Und dann einfach so:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Locked Then Exit Sub
Target = IIf(Len(Target.Cells), "", "X")
Cancel = True
End Sub

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#7
Ich habe das mal für Deine Bereiche aus #1 umgesetzt.
Nur in den grünen Zellen führt der Doppelklick zum switchen.
Der Code ist tatsächlich ausschließlich der kurze aus meiner letzten Antwort.

Gruß Ralf


Angehängte Dateien
.xlsm   X-Markierung.xlsm (Größe: 13,46 KB / Downloads: 1)
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#8
Ich werde aber mal das mühsame "Entsperren" durch ein Makro durchführen lassen.
Damit es sich auch lohnt, mal bis Zeile 123
Werde den Algorithmus von Edgar nehmen.
… to be continued …
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#9
And here it is:

Sub Sperre_entfernen()
  Dim z&, s&, n&, m&
  Application.ScreenUpdating = False
  Cells.ColumnWidth = 2
  For z = 5 To 123 Step 2
    For n = 0 To 1
      For m = 0 To 2
        s = n * 14 + m * 3 + 2
        With Cells(z, s)
          .Locked = False
          .Interior.Color = vbRed
          .HorizontalAlignment = xlCenter
          .Font.Color = vbWhite
          .Font.Bold = True
        End With
      Next
    Next
  Next
  With Range("M4:M123, AA4:AA123")
    .Locked = False
    .Interior.Color = vbRed
    .HorizontalAlignment = xlCenter
    .Font.Color = vbWhite
    .Font.Bold = True
  End With
End Sub
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#10
Eine gute Idee, allerdings sind viele Zellen bereits gesperrt, damit kein Fremder in bestimmte Zellen etwas eintragen kann.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste