Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1004to1008
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
Laufzeitfehler 13?
30.08.2008 18:46:00
oblivion
Hallo,
ich habe eine Exceldatei. Sie ist ziemlich Komplex.
Meine Frage ist: Wenn ich auf Blatt "Gesamt" unter Bewohner mehrere Bewohner stehen habe und diese Löschen möchte, wähle ich alle aus und drücke Entfernen. Bei mir kommt dann die Fehlermeldung "Laufzeitfehler 13 - Typen unverträglich".
Noch als Info: Die Daten werden aus "Gesamt" werden per Makro und per Formel auf andere Blätter übertragen. Liegt es vielleicht damit zusammen.
Wenn ich jeden einzeln auswähle und lösche, dann klappt es ohne Probleme.
Weiß jemand woran das liegt?
Gruß Oblivion

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 13?
30.08.2008 19:10:15
Reinhard
Hi Oblivion,
das liegt an der Codezeile 5 im Code, da hast du einen Syntaxfehler drin *denk*
Gruß
Reinhard
AW: Laufzeitfehler 13?
30.08.2008 19:15:00
oblivion
Hi, danke für die Antwort, aber mein Code scheint sehr Komplex zu sein. Hab ihn mal hier her kopiert. Ist da irgendwo ein Fehler?
Option Explicit
Public AlterWert As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("K2:K" & Cells(Rows.Count, "K").End(xlUp).Row + 1)) Is Nothing  _
And Target.Count = 1 Then _
AlterWert = Target.Value
End Sub



Private Sub Worksheet_Change(ByVal Target As Range)
Dim Tab2 As Range, rowOffset As Long, strAdress As String
Dim B As Long, A As Long, C As Long
Dim ws As Worksheet
Sheets("Gesamtdaten").Unprotect "gesamtdaten"
If Not Intersect(Target, Range("K2:K" & Cells(Rows.Count, "K").End(xlUp).Row + 1)) Is Nothing  _
And _
Target.Count = 1 And Target = "" Then
ActiveWorkbook.Unprotect "daten"
For Each ws In Worksheets
If ws.Name = AlterWert Then
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
End If
Next
ActiveWorkbook.Protect "daten"
End If
If Not Intersect(Target, Range("B3")) Is Nothing Then
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
On Error GoTo Fehler1:
With Tabelle2
rowOffset = .Rows(2).Find(What:=Range("B3"), LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column - 3
Range("B5:B" & Rows.Count).ClearContents
strAdress = .Range(.Cells(4, rowOffset), _
.Cells(56, rowOffset)).Address
.Range(strAdress).Copy Range("B5")
Range("E5:G" & Rows.Count).ClearContents
strAdress = .Range(.Cells(4, rowOffset + 1), _
.Cells(56, rowOffset + 5)).Address
.Range(strAdress).Copy Range("C5")
End With
ElseIf Not Intersect(Target, Columns(11)) Is Nothing Then
ArztAnlegen Intersect(Target, Columns(11))
Me.Activate
End If
Fehler1:
AnzeigeAn
If Err.Number  0 Then
MsgBox Err.Description, vbCritical, "Fehler beim Lesen!"
Sheets("Gesamtdaten").Protect "gesamtdaten"
Exit Sub
End If
On Error GoTo Fehler:
If Selection.Count > 1 Then
For C = 1 To Selection.Count
If Intersect(Selection(C), Range("E5:G56", "B5:B56")) Is Nothing Then _
Exit Sub
AnzeigeAn
B = Tabelle2.Rows(2).Find(What:=Range("B3"), LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column - 2
For A = 0 To 5
If A  3 Then
If A = 5 Then
Tabelle2.Cells(Selection(C).Row - 1, B - 1) = _
Cells(Selection(C).Row, 2).Value
Else
Tabelle2.Cells(Selection(C).Row - 1, B + A).Value = _
Cells(Selection(C).Row, 3 + A).Value
End If
End If
Next A
Next C
Else
If Intersect(Target, Range("E5:G56", "B5:B56")) Is Nothing Then Exit Sub
AnzeigeAn
B = Tabelle2.Rows(2).Find(What:=Range("B3"), LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column - 2
For A = 0 To 5
If A  3 Then
If A = 5 Then
Tabelle2.Cells(Target.Row - 1, B - 1) = Cells(Target.Row, 2).Value
Else
Debug.Print Cells(Target.Row, 3 + A)
Tabelle2.Cells(Target.Row - 1, B + A).Value = _
Cells(Target.Row, 3 + A).Value
End If
End If
Next A
End If
Fehler:
AnzeigeAn
If Err.Number  0 Then MsgBox Err.Description, vbCritical, _
"Fehler beim schreiben!"
Sheets("Gesamtdaten").Protect "gesamtdaten"
End Sub



Private Sub AnzeigeAn()
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub


Sub Gesamt()
Application.EnableEvents = True
Sheets("Gesamtdaten").Protect "gesamtdaten"
End Sub



Private Sub ArztAnlegen(rngB As Range)
Dim rngK As Range, lngI As Long
ActiveWorkbook.Unprotect "daten"
For Each rngK In rngB
If rngK.Row > 1 Then
If Len(rngK)  "" Then
For lngI = 1 To Sheets.Count
If Sheets(lngI).Name = "" & rngK Then
MsgBox "Das Blatt " & rngK & " gibt es schon!"
Exit For
End If
Next lngI
If lngI > Sheets.Count Then
Sheets("Muster").Copy After:=Sheets(lngI - 1)
With ActiveSheet
.Name = rngK
.Cells(7, 4) = rngK
.Protect Password:=rngK
.Visible = True
End With
End If
End If
End If
Next rngK
ActiveWorkbook.Protect "daten"
End Sub


Danke für die Hilfe.
Gruß Oblivion

Anzeige
AW: Laufzeitfehler 13?
30.08.2008 19:28:00
Tino
Hallo,
ich denke hier war noch ein Fehler von damals drin.
Teste mal:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Tab2 As Range, rowOffset As Long, strAdress As String
Dim B As Long, A As Long, C As Long
Dim ws As Worksheet
Sheets("Gesamtdaten").Unprotect "gesamtdaten"
If Not Intersect(Target, Range("K2:K" & Cells(Rows.Count, "K").End(xlUp).Row + 1)) Is Nothing _
And _
Target.Count = 1 And Target = "" Then
ActiveWorkbook.Unprotect "daten"
For Each ws In Worksheets
If ws.Name = AlterWert Then
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
End If
Next
ActiveWorkbook.Protect "daten"
End If
If Not Intersect(Target, Range("B3")) Is Nothing Then
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
On Error GoTo Fehler1:
With Tabelle2
rowOffset = .Rows(2).Find(What:=Range("B3"), LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column - 3
Range("B5:B" & Rows.Count).ClearContents
strAdress = .Range(.Cells(4, rowOffset), _
.Cells(56, rowOffset)).Address
.Range(strAdress).Copy Range("B5")
Range("E5:G" & Rows.Count).ClearContents
strAdress = .Range(.Cells(4, rowOffset + 1), _
.Cells(56, rowOffset + 5)).Address
.Range(strAdress).Copy Range("C5")
End With
ElseIf Not Intersect(Target, Columns(11)) Is Nothing Then
ArztAnlegen Intersect(Target, Columns(11))
Me.Activate
End If
Fehler1:
AnzeigeAn
If Err.Number  0 Then
MsgBox Err.Description, vbCritical, "Fehler beim Lesen!"
Sheets("Gesamtdaten").Protect "gesamtdaten"
Exit Sub
End If
On Error GoTo Fehler:
If Selection.Count > 1 Then
For C = 1 To Selection.Count
If Intersect(Selection(C), Range("E5:G56", "B5:B56")) Is Nothing Then
AnzeigeAn
B = Tabelle2.Rows(2).Find(What:=Range("B3"), LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column - 2
For A = 0 To 5
If A  3 Then
If A = 5 Then
Tabelle2.Cells(Selection(C).Row - 1, B - 1) = _
Cells(Selection(C).Row, 2).Value
Else
Tabelle2.Cells(Selection(C).Row - 1, B + A).Value = _
Cells(Selection(C).Row, 3 + A).Value
End If
End If
Next A
End If
Next C
Else
If Intersect(Target, Range("E5:G56", "B5:B56")) Is Nothing Then Exit Sub
AnzeigeAn
B = Tabelle2.Rows(2).Find(What:=Range("B3"), LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column - 2
For A = 0 To 5
If A  3 Then
If A = 5 Then
Tabelle2.Cells(Target.Row - 1, B - 1) = Cells(Target.Row, 2).Value
Else
Debug.Print Cells(Target.Row, 3 + A)
Tabelle2.Cells(Target.Row - 1, B + A).Value = _
Cells(Target.Row, 3 + A).Value
End If
End If
Next A
End If
Fehler:
AnzeigeAn
If Err.Number  0 Then MsgBox Err.Description, vbCritical, _
"Fehler beim schreiben!"
Sheets("Gesamtdaten").Protect "gesamtdaten"
End Sub


Gruß Tino

Anzeige
AW: Laufzeitfehler 13?
30.08.2008 19:47:25
Tino
Hallo,
habe es nochmal durchgetestet, so müsste dies funktionieren

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Tab2 As Range, rowOffset As Long, strAdress As String
Dim B As Long, A As Long, C As Long
Dim ws As Worksheet
Sheets("Gesamtdaten").Unprotect "gesamtdaten"
If Not Intersect(Target, Range("K2:K" & Cells(Rows.Count, "K").End(xlUp).Row + 1)) Is Nothing _
And _
Target.Count = 1 And Target = "" Then
ActiveWorkbook.Unprotect "daten"
For Each ws In Worksheets
If ws.Name = AlterWert Then
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
End If
Next
ActiveWorkbook.Protect "daten"
End If
If Not Intersect(Target, Range("B3")) Is Nothing Then
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
On Error GoTo Fehler1:
With Tabelle2
rowOffset = .Rows(2).Find(What:=Range("B3"), LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column - 3
Range("B5:B" & Rows.Count).ClearContents
strAdress = .Range(.Cells(4, rowOffset), _
.Cells(56, rowOffset)).Address
.Range(strAdress).Copy Range("B5")
Range("E5:G" & Rows.Count).ClearContents
strAdress = .Range(.Cells(4, rowOffset + 1), _
.Cells(56, rowOffset + 5)).Address
.Range(strAdress).Copy Range("C5")
End With
ElseIf Not Intersect(Target, Columns(11)) Is Nothing Then
ArztAnlegen Intersect(Target, Columns(11))
Me.Activate
End If
Fehler1:
AnzeigeAn
If Err.Number  0 Then
MsgBox Err.Description, vbCritical, "Fehler beim Lesen!"
Sheets("Gesamtdaten").Protect "gesamtdaten"
Exit Sub
End If
On Error GoTo Fehler:
If Selection.Count > 1 Then
For C = 1 To Selection.Count
If Not Intersect(Selection(C), Union(Range("E5:G56"), Range("B5:B56"))) Is Nothing Then
AnzeigeAn
B = Tabelle2.Rows(2).Find(What:=Range("B3"), LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column - 2
For A = 0 To 5
If A  3 Then
If A = 5 Then
Tabelle2.Cells(Selection(C).Row - 1, B - 1) = _
Cells(Selection(C).Row, 2).Value
Else
Tabelle2.Cells(Selection(C).Row - 1, B + A).Value = _
Cells(Selection(C).Row, 3 + A).Value
End If
End If
Next A
End If
Next C
Else
If Intersect(Target, Range("E5:G56", "B5:B56")) Is Nothing Then Exit Sub
AnzeigeAn
B = Tabelle2.Rows(2).Find(What:=Range("B3"), LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column - 2
For A = 0 To 5
If A  3 Then
If A = 5 Then
Tabelle2.Cells(Target.Row - 1, B - 1) = Cells(Target.Row, 2).Value
Else
Debug.Print Cells(Target.Row, 3 + A)
Tabelle2.Cells(Target.Row - 1, B + A).Value = _
Cells(Target.Row, 3 + A).Value
End If
End If
Next A
End If
Fehler:
AnzeigeAn
If Err.Number  0 Then MsgBox Err.Description, vbCritical, _
"Fehler beim schreiben!"
Sheets("Gesamtdaten").Protect "gesamtdaten"
End Sub


Gruß Tino

Anzeige
AW: Laufzeitfehler 13?
30.08.2008 20:26:16
oblivion
Hallo, sorry hatte nicht gemerkt, dass du nochmal geschrieben hast. Hab deinen 2. neuen Code ausprobiert. Der 2. große Fehler ist weg, aber Laufzeitfehler 13 kommt trotzdem noch.
Danke für deine Hilfe.
Gruß Oblivion
AW: Laufzeitfehler 13?
30.08.2008 20:29:28
Tino
Hallo,
leider müsstest Du die Datei mal Hochladen.
Gruß Tino
AW: Laufzeitfehler 13?
30.08.2008 20:49:00
oblivion
Hallo, ich bins nochmal. Ich hab nochmal probiert und als Fehlermeldung kam bin ich auf Debug gegangen. Hat mir folgende Zeile angezeigt:
If Not Intersect(Target, Range("K2:K" & Cells(Rows.Count, "K").End(xlUp).Row + 1)) Is Nothing _
And _
Target.Count = 1 And Target = "" Then.
War also nicht in deinem Code. Nur weiß ich auch nicht was hier falsch ist. Ich versuch meine Datei mal hochzuladen. Ist ziemlich groß. Mal sehen.
https://www.herber.de/bbs/user/55052.zip
Hab alle Tabellenblätter sichtbar gemacht und hoffentlich alle Passwörter entfernt.
Hoffe mal es gibt dafür eine Lösung.
Gruß Oblivion
Anzeige
AW: Laufzeitfehler 13?
30.08.2008 21:01:15
Hajo_Zi
Hallo Oblivion,
ersetze "K" durch 11

AW: Laufzeitfehler 13?
30.08.2008 21:10:00
oblivion
Hallo Hajo_Zi. Ich habe das "K" durch eine 11 ersetzt, aber es passiert nichts. Fehlermeldung kommt weiterhin.
Danke für deine Antwort.
Gruß Oblivion
AW: Laufzeitfehler 13?
30.08.2008 21:16:00
Hajo_Zi
Hallo Oblivion,
den ersten Beitrag habe ich Live geschrieben. Jetzt habe ich Deine Datei runtergeladen, bei mir kommt kein Laufzeitfehler.
Wie hast Du den ausgelöst?
Gruß Hajo
AW: Laufzeitfehler 13?
30.08.2008 21:23:16
oblivion
Hallo, Hajo_Zi.
Normalerweise ist die Tabelle gefüllt. Und da sie für andere Bereiche/Stationen auch genutzt werden soll, wollte ich eine leere Tabelle erstellen. Also muss ich alles löschen was in den einzelnen Zeilen steht. Normalerweise würde ich alles, was ich löschen will auswählen und dann löschen. Aber genau wenn ich das mache, dann erscheint dieser Fehler (auf Blatt "Gesamt"). Die anderen Tabellenblätter sind normalerweise entweder schreibgeschützt oder garnicht sichtbar, sodass man dort auch nichts löschen kann.
Weiß nicht warum das so ist.
Danke für die Hilfe.
Gruß Oblivion
Anzeige
AW: Laufzeitfehler 13?
30.08.2008 21:26:00
Hajo_Zi
Hallo Oblivion,
dann schreibe als erste Zeile

If Target.Count>1 then Exit Sub


Gruß Hajo

AW: Laufzeitfehler 13?
30.08.2008 21:37:00
oblivion
Hallo, die Fehlermeldung ist weg, aber die Daten bleiben auf dem Blatt "Gesamtdaten" bestehen und dort sollten sie ja auch gelöscht werden, sonst stehen sie ja wieder da, wenn ich den Monat wechsle und den vorherigen wieder einstelle.
Wo sollte ich deinen Code hin schreiben. Ich hab ihn vor die Zeile geschrieben, die mir der Debugger angezeigt hat.
Danke für die Hilfe.
Gruß Oblivion
Anzeige
@ alle in diesem Beitrag
30.08.2008 21:54:00
oblivion
Hallo, das Problem ist durch Erich G. gelöst worde. Es funktioniert jedenfalls bei mir.
Danke an alle für die Hilfe.
Gruß Oblivion
AW: Laufzeitfehler 13?
30.08.2008 21:23:02
Tino
Hallo,
ich würde sagen Target darf nicht größer als eine Zelle sein.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 Then
If Not Intersect(Target, Range("K2:K" & Cells(Rows.Count, "K").End(xlUp).Row + 1)) _
Is Nothing Then Target = Target.Value
End If
End Sub


Gruß Tino

AW: korrektur
30.08.2008 21:38:00
Tino
Hallo,
korrektur für AlterWert

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 Then
If Not Intersect(Target, Range("K2:K" & Cells(Rows.Count, "K").End(xlUp).Row + 1)) _
Is Nothing And Target  "" Then AlterWert = Target.Value
End If
End Sub


So wie ich den Code verstehe, der nicht komplett von mir ist (es ist viel hinzugekommen), wird AlterWert zum Prüfen verwendet ob eine Tabelle gelöscht werden kann.
Gruß Tino

Anzeige
AW: korrektur
30.08.2008 21:51:46
oblivion
Hallo, ja ich hatte viele Ideen. Schreibe mal auf "Gesamt" unter der Tabelle wo Ärzte steht irgendwelche Namen oder was auch immer die einfällt. Wenn es geklappt hat, dann lösche die Zeile einfach mal wieder. Dann wirst du sehen wözu der Code gut ist.
Das Problem ist gelöst worden durch Erich G. Es klappt jedenfalls bei mir. Werde deine Variante aber auch noch testen. Muss jetzt aber erstmal los. Werde ich heute Nacht alles ausprobieren.
Danke für die Hilfe.
Gruß Oblivion
AW: Laufzeitfehler 13?
30.08.2008 21:17:04
Erich
Hi,
gehe ich recht in der Annahme, dass der Fehler auftritt, wenn mehrere Zellen auf einmal geändert werden sollen?
Dann liegt es daran, dass Target = "" auch dann geprüft wird, wenn Target.Count > 1 ist.
(VBA könnte ja nach dem "...Count = 1 And" auch aufhören zu prüfen, tut es aber nicht!)
Wenn du mal spaßeshalber Target = "" ersetzt durch Target.Address > ""
läuft der (sinnlose) Code fehlerfrei durch.
Also: Erst Count = 1 prüfen, dann in einer eigenen Anweisung auf ="" prüfen:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, _
Range("K2:K" & Cells(Rows.Count, "K").End(xlUp).Row + 1)) Is Nothing _
And Target.Count = 1 Then
If Target = "" Then
MsgBox "ok"
Else
MsgBox "nicht leer"
End If
Else
MsgBox Target.Count & " - " & Target.Address
End If
End Sub
Private Sub FALSCH_Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, _
Range("K2:K" & Cells(Rows.Count, "K").End(xlUp).Row + 1)) Is Nothing _
And Target.Count = 1 And Target.Address = "" Then
MsgBox "ok"
End If
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Laufzeitfehler 13?
30.08.2008 21:27:04
oblivion
Hallo, wenn dieser Code sinnlos ist, kann man ihn doch auch weglassen oder? Ich habe den Code nicht selber geschrieben, sondern aus diesem Forum bekommen. Kenne mich mit VBA noch nicht aus.
Werde mal probieren, was du geschrieben hast und mich noch mal melden.
Danke für die Hilfe.
Gruß Oblivion
AW: Laufzeitfehler 13?
30.08.2008 21:41:00
oblivion
Hallo, ich habe es eben ausprobiert, Scheint zu klappen.
Aber wenn ich den Code weglassen kann, dann sag mir bitte noch, was ich alles löschen kann.
Danke für deine Hilfe.
Gruß Oblivion
AW: Laufzeitfehler 13?
30.08.2008 20:19:44
oblivion
Hallo,
also ich habe deinen neuen Code probiert, aber es klappt nicht. Es kommt weiterhin der Fehler 13 und wenn ich einen anderen Monat auf "Gesamt" einstellen will, kommt ein noch schwerwiegender Fehler. Er verändert dann im Blatt "Gesamtdaten" einige Überschrift wodurch Bezüge verloren gehen. Ich habe mal den Code Zeile für Zeile verglichen. Wenn ich nichts übersehen habe, dann wird in deinem neuen Code nur Exit Sub weggelassen, wenn man das wieder schreibt funktioniert der Code wieder (wenn man vorher wieder das überschriebene auf den alten Zustand bringt).
Weißt du vielleicht Rat?
Danke für die Hilfe.
Gruß Oblivion
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige