Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
944to948
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
944to948
944to948
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

vba formatierung - fehler??

vba formatierung - fehler?
23.01.2008 20:16:00
alex
hallo zusammen,
ich habe gestern große hilfe bei der lösung meines formatierungsproblems durch das forum erhalten.
funktioniert soweit reibungslos, sagte ich schon gestern. habe es mit meinen beschränkten vba kenntnissen heute noch für mich zurechtgeschrieben(umgeändert)(wahrsch. total umständlich und vielleicht auch noch falsch). aber läuft und ich bin froh.
kurze erläuterung um was es geht:
in spalte 33 schreibe ich bestimmte werte worauf die benachbarte zelle der spalte 34 mit einem bestimmten format reagiert. das gleiche bloss mit anderen werten in spalten 42 und 43. sieht so aus:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
Dim Zahl As Integer
If Target.Column = 33 Then
For i = 1 To Len(Target.Value)
On Error GoTo w1
Zahl = Zahl & Mid(Target.Value, i, 1)
Next i
w1:
If Zahl = 50 Then
Target.Offset(0, 1).NumberFormat = "0.0"
ElseIf Zahl = 75 Then
Target.Offset(0, 1).NumberFormat = "0.0"
ElseIf Zahl = 1000 Then
Target.Offset(0, 1).NumberFormat = "[h]:mm"
End If
End If
If Target.Column = 34 Then
For i = 1 To Len(Target.Value)
On Error GoTo w2
Zahl = Zahl & Mid(Target.Offset(0, -1).Value, i, 1)
Next i
w2:
If Zahl = 1000 Then
Target.Offset(0, 1).NumberFormat = "[h]:mm"
End If
End If
If Target.Column = 42 Then
For i = 1 To Len(Target.Value)
On Error GoTo w3
Zahl = Zahl & Mid(Target.Value, i, 1)
Next i
w3:
If Zahl = 100 Then
Target.Offset(0, 1).NumberFormat = "[h]:mm"
ElseIf Zahl = Schlagball Then
Target.Offset(0, 1).NumberFormat = "0.0"
ElseIf Zahl = Wurfball Then
Target.Offset(0, 1).NumberFormat = "0.0"
ElseIf Zahl = Schleuderball Then
Target.Offset(0, 1).NumberFormat = "0.0"
ElseIf Zahl = GeräteKombi Then
Target.Offset(0, 1).NumberFormat = "0.0"
End If
End If
If Target.Column = 43 Then
For i = 1 To Len(Target.Value)
On Error GoTo w4
Zahl = Zahl & Mid(Target.Offset(0, -1).Value, i, 1)
Next i
w4:
If Zahl = 100 Then
Target.Offset(0, 1).NumberFormat = "[h]:mm"
End If
End If
End Sub


jedoch stellte ich heute fest, (Problem 1:) dass wenn ich das Arbeitsblatt schütze das makro nicht mehr ausgeführt wird. wenn ich nur objekte und szenarien schütze und inhalte (kein häkchen) nicht, dann gehts. aber dann sind meine formel nicht mehr geschützt-geht also so nicht. es kommt dann folgende fehlermeldung:
Laufzeitfehler '1004':
Die NumberFormat-Eigenschaft des Range-Objektes kann nicht festgelegt werden.
und im VBA-Code selber ist dann die zeile mit folgendem inhalt markiert:
For i = 1 To Len (Target.Value)
Problem 2 (weniger tragisch aber störend): wenn ich mehrere werte in den benannten spalten durch "markieren" und "enf" lösche, dann kommt auch eine fehlermeldung, die ich dann wegklicke und dann is wieder gut.
Laufzeitfehler '13':
Typen unverträglich
wenn ich jede zelle einzeln lösche passiert nichts.
so, das waren meine 2 täglichen problemchen.

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: vba formatierung - fehler?
23.01.2008 21:01:00
serge
Hallo Alex
zu 1)
gebe mit ActiveSheet.Unprotect an Anfang des VBA die Datei frei und
mit ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True am Ende wieder schützen!
zu 2)
keine Idee!
Serge

AW: Problem 1 gelöst, Problem 2 nicht
23.01.2008 21:27:00
alex
Alles klar serge,
hat funktioniert, vielen vielen dank an dich!!!
Problem 2 an den rest des forums?

AW: Problem 1 gelöst, Problem 2 nicht
23.01.2008 21:57:30
Original
Hi,
das mit dem Schutz musst du noch einbauen:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
Dim Zahl As Integer
If Target.Count = 1 Then
If Target.Column = 33 Then
For i = 1 To Len(Target.Value)
On Error GoTo w1
Zahl = Zahl & Mid(Target.Value, i, 1)
Next i
w1:
If Zahl = 50 Then
Target.Offset(0, 1).NumberFormat = "0.0"
ElseIf Zahl = 75 Then
Target.Offset(0, 1).NumberFormat = "0.0"
ElseIf Zahl = 1000 Then
Target.Offset(0, 1).NumberFormat = "[h]:mm"
End If
End If
If Target.Column = 34 Then
For i = 1 To Len(Target.Value)
On Error GoTo w2
Zahl = Zahl & Mid(Target.Offset(0, -1).Value, i, 1)
Next i
w2:
If Zahl = 1000 Then
Target.Offset(0, 1).NumberFormat = "[h]:mm"
End If
End If
If Target.Column = 42 Then
For i = 1 To Len(Target.Value)
On Error GoTo w3
Zahl = Zahl & Mid(Target.Value, i, 1)
Next i
w3:
If Zahl = 100 Then
Target.Offset(0, 1).NumberFormat = "[h]:mm"
ElseIf Zahl = Schlagball Then
Target.Offset(0, 1).NumberFormat = "0.0"
ElseIf Zahl = Wurfball Then
Target.Offset(0, 1).NumberFormat = "0.0"
ElseIf Zahl = Schleuderball Then
Target.Offset(0, 1).NumberFormat = "0.0"
ElseIf Zahl = GeräteKombi Then
Target.Offset(0, 1).NumberFormat = "0.0"
End If
End If
If Target.Column = 43 Then
For i = 1 To Len(Target.Value)
On Error GoTo w4
Zahl = Zahl & Mid(Target.Offset(0, -1).Value, i, 1)
Next i
w4:
If Zahl = 100 Then
Target.Offset(0, 1).NumberFormat = "[h]:mm"
End If
End If
End If
End Sub


Auch bei VBA bescheiden solltest du dir das unselige GoTo abgewöhnen!
mfg Kurt

Anzeige
AW: Alles gut!
23.01.2008 22:22:31
alex
alles klar,
hat geklappt.
Bist super, danke dir!
sehe gerade, dass du mir bei meiner neuen frage oben schon wieder geantwortet hast. also bis gleich. :-)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige