Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1856to1860
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
VBA-Code Spalte einfügen
01.12.2021 11:56:03
Hannes
Hallo zusammen,
folgendes Problem: Wenn ich manuell eine neue Spalte einfüge erhalte ich die Fehlermeldung Laufzeitfehler 13: Typen unverträglich...Gelb markiert wird folgende Zeile:
If Not TargetOldText = "" And Not Target.Value = "" Then
nach debuggen klappt es zwar wieder, aber wenn ich die spalte direkt vor eine beschriebene spalte einfüge ist die neue spalte von dem Code betroffen (es bleiben also in meinem Fall die Spalten 3,5 to7) ich würde aber gerne, dass sich der code/die neue Spalte entsprechend anpasst.
Beispiel ich füge die Spalte vor 3 ein, dann müsste der code entsprechend heißen 4,6-8....ist das automatisiert irgendwie möglich?
Mein Code lautet:
Option Explicit
Dim blockedEvent As Boolean
Dim TargetOldText As String

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Column
Case 3, 5 To 7 'Spalten C, E bis G
If Not blockedEvent Then
blockedEvent = True
If Not TargetOldText = "" And Not Target.Value = "" Then
Target.Value = TargetOldText & ", " & Target.Value
Else
Target.Value = Target.Value
End If
TargetOldText = Target.Value
Else
blockedEvent = False
End If
Case Else
TargetOldText = ""
End Select
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Select Case Target.Column
Case 3, 5 To 7 'Spalten C, E bis G
TargetOldText = Target.Value
Case Else
'do nothing
End Select
End Sub

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Code Spalte einfügen
01.12.2021 12:36:45
Rudi
Hallo,
Target ist die ganze Spalte. .Value mehrerer Zellen schlägt nun mal fehl.
Füge noch die Abfrage nach nur einer geänderten Zelle ein.
If Target.count=1 Then ....
Gruß
Rudi
AW: VBA-Code Spalte einfügen
01.12.2021 12:37:31
Tobias
Hallo Hannes,
du könntest den Spalten Namen zuweisen, dann nimmt Excel die automatisch mit! Denke das ist die einfachste Möglichkeit. Dann über ein Intersect prüfen ob das target im benannten Bereich liegt!

=Tabelle1!$C:$C;Tabelle1!$E:$E;Tabelle1!$F:$F
Müsste dann der Code in ähnlicher Form für den Namen sein
Schöne Grüße
Tobias
AW: VBA-Code Spalte einfügen
01.12.2021 12:41:18
{Boris}
Hi,
beim Einfügen von Spalten hat Target 1.048.576 Elemente - und die kannst Du nicht mit Target.Value vergleichen.
Am Einfachsten: Zu Beginn des Codes auf Target.Count abfragen - ist der Wert größer 1: Exit Sub
Zu Deiner 2. Frage:
Du darfst die Spalten halt nicht fest im Code verdrahten (3,5,7). Entweder lassen sich die gewünschten Spalten z.B. per eindeutigen Spaltenüberschriften dynamisch ermitteln, oder Du änderst sie halt stets manuell, oder Du packst sie in einen String, den Du dann änderst / erweiterst, nach diesem Muster:

Private Sub Worksheet_Change(ByVal Target As Range)
Const strSPALTEN As String = "3,5,7,"
If InStr(1, strSPALTEN, Target.Column & ",") = 0 Then Exit Sub
'hier Dein weiterer Code
End Sub
VG, Boris
Anzeige
AW: VBA-Code Spalte einfügen
01.12.2021 13:39:24
Hannes
Hallo verstehe ich das richtig, dass dieser code klappen müsste? Ich erhalte den Fehler Case else außerhalb von select case.
Option Explicit
Dim blockedEvent As Boolean
Dim TargetOldText As String

Private Sub Worksheet_Change(ByVal Target As Range)
Const strSPALTEN As String = "3,5,7,"
If InStr(1, strSPALTEN, Target.Column & ",") = 0 Then Exit Sub
If Not blockedEvent Then
blockedEvent = True
If Not TargetOldText = "" And Not Target.Value = "" Then
Target.Value = TargetOldText & ", " & Target.Value
Else
Target.Value = Target.Value
End If
TargetOldText = Target.Value
Else
blockedEvent = False
End If
Case Else
TargetOldText = ""
End Select
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Select Case Target.Column
Case 3, 5 To 7 'Spalten C, E bis G
TargetOldText = Target.Value
Case Else
'do nothing
End Select
End Sub

Anzeige
AW: VBA-Code Spalte einfügen
01.12.2021 13:49:49
Rudi
du hast ja auch kein Select Case im Code.

Private Sub Worksheet_Change(ByVal Target As Range)
Const strSPALTEN As String = "3,5,7,"
If InStr(1, strSPALTEN, Target.Column & ",") = 0 Then
Exit Sub
Else
If Not blockedEvent Then
blockedEvent = True
If Not TargetOldText = "" And Not Target.Value = "" Then
Target.Value = TargetOldText & ", " & Target.Value
Else
Target.Value = Target.Value
End If
TargetOldText = Target.Value
Else
blockedEvent = False
End If
Else
TargetOldText = ""
End if
End Sub

AW: VBA-Code Spalte einfügen
01.12.2021 13:57:04
Hannes
Hi, ich muss nochmal stören...jetzt sagt er Fehler beim komprimieren wegen Else ohne If am ende.
Danke für deine Hilfe!
Option Explicit
Dim blockedEvent As Boolean
Dim TargetOldText As String

Private Sub Worksheet_Change(ByVal Target As Range)
Const strSPALTEN As String = "3,5,7,"
If InStr(1, strSPALTEN, Target.Column & ",") = 0 Then
Exit Sub
Else
If Not blockedEvent Then
blockedEvent = True
If Not TargetOldText = "" And Not Target.Value = "" Then
Target.Value = TargetOldText & ", " & Target.Value
Else
Target.Value = Target.Value
End If
TargetOldText = Target.Value
Else
blockedEvent = False
End If
 Else
TargetOldText = ""
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Select Case Target.Column
Case 3, 5 To 7 'Spalten C, E bis G
TargetOldText = Target.Value
Case Else
'do nothing
End Select
End Sub

Anzeige
AW: VBA-Code Spalte einfügen
01.12.2021 14:16:10
Rudi

Dim blockedEvent As Boolean
Dim TargetOldText As String
Private Sub Worksheet_Change(ByVal Target As Range)
Const strSPALTEN As String = "3,5,7,"
If InStr(1, strSPALTEN, Target.Column & ",")  0 Then
If Not blockedEvent Then
blockedEvent = True
If Not TargetOldText = "" And Not Target.Value = "" Then
Target.Value = TargetOldText & ", " & Target.Value
Else
Target.Value = Target.Value
End If
TargetOldText = Target.Value
Else
blockedEvent = False
End If
Else
TargetOldText = ""
End If
End Sub

zum 2.Teil
01.12.2021 13:21:38
Rudi
Du könntest auch die Überschriften in Zeile 1 abfragen.
Schema:

If Target.Count = 1 Then
Select Case Cells(1, Target.Column)
Case "Spalte3", "Spalte5", "Spalte6", "Spalte7" 'Überschriften anpassen
If Not blockedEvent Then
Gruß
Rudi
Anzeige
AW: zum 2.Teil
01.12.2021 17:06:29
Hannes
Hi, leider komme ich mit diesem code immer noch nicht weiter:
Dim blockedEvent As Boolean
Dim TargetOldText As String

Private Sub Worksheet_Change(ByVal Target As Range)
Const strSPALTEN As String = "3,5,7,"
If InStr(1, strSPALTEN, Target.Column & ",")  0 Then
If Not blockedEvent Then
blockedEvent = True
If Not TargetOldText = "" And Not Target.Value = "" Then
Target.Value = TargetOldText & ", " & Target.Value
Else
Target.Value = Target.Value
End If
TargetOldText = Target.Value
Else
blockedEvent = False
End If
Else
TargetOldText = ""
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Select Case Target.Column
Case 3, 5 To 7 'Spalten C, E bis G
TargetOldText = Target.Value
Case Else
'do nothing
End Select
End Sub
Ich erhalte nach einfügen einer neuen Spalte die meldung laufzeitfehler
markiert wird diese zeile: If Not TargetOldText = "" And Not Target.Value = "" Then
die ausführung erfolgt dabei auch immer noch in den (dann neuen) zeilen 3,5,7 und nicht in 4,6,8
Anzeige
meldung laufzeitfehler
02.12.2021 10:16:33
Rudi
du ignorierst ja auch meine Hinweise.
Gruß
Rudi
AW: meldung laufzeitfehler
02.12.2021 11:24:43
Hannes
Moin,
Ich fürchte ich bin zu dämlich um deine Hinweise konkret umzusetzen.
Sobald ich anpassungnen vornehme erhalte ich immer Fehlermeldungen....
Ich besitze einfach nicht die besten VBA Kenntnisse.
AW: meldung laufzeitfehler
02.12.2021 11:28:57
Hannes
Habe mittlerwile diese Formel aus dem Internet.
Allerdings bin ich auch da zu blöd um es einfach auf alle Zellen in meiner Mappe zu beziehen. (Also nicht nur Spalte 71) Hat da jemden eine Lösung, wie der code umgeschrieben werden muss?
Und Ich erhalte des öfteren den Laufzeitfehler 13: Typen unverträglich und diese Zeile im Code ist gelb markiert strTarget = Trim(Target.Value
Nach debuggen läuft es dann wieder.
Const TargetColumn As Long = 71 ' Ziele in Spalte 71.
Const bolSorted As Boolean = True ' Legt fest, ob die Werte noch sortiert werden.
Dim blockedEvent As Boolean
Dim TargetOldText As String

Private Sub Worksheet_Change(ByVal Target As Range)
Dim strResult As String
Dim strTarget As String
Dim arrSorted As Variant
Dim i As Long
If Target.Column = TargetColumn Then
  strTarget = Trim(Target.Value)
If Not blockedEvent Then
blockedEvent = True
If Not TargetOldText = "" And Not Target.Value = "" Then
If InStr(1, TargetOldText, Target.Value) > 0 Then
strResult = Replace(TargetOldText, ", " & strTarget, "")
strResult = Replace(strResult, strTarget & ", ", "")
strResult = Replace(strResult, strTarget, "")
Else
strResult = TargetOldText & ", " & Target.Value
End If
If bolSorted Then
arrSorted = Split(strResult, ", ")
strResult = ""
Call Selectionsort(arrSorted)
For i = 0 To UBound(arrSorted)
strResult = strResult & arrSorted(i) & ", "
Next i
If Len(strResult) > 1 Then _
strResult = Left$(strResult, Len(strResult) - 2)
End If
Target.Value = strResult
Else
Target.Value = Target.Value
End If
TargetOldText = Target.Value
Else
blockedEvent = False
End If
Else
TargetOldText = ""
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Target.Column = TargetColumn Then
TargetOldText = Target.Value
End If
[TargetZeile] = Target.Row
[TargetSpalte] = Target.Column
[TargetValue] = Target.Value
End Sub

Private Sub Selectionsort(ByRef data As Variant)
Dim OG&, i&, j&, k&, h As Variant
OG = UBound(data)
For i = 0 To OG - 1
h = data(i)
k = i
For j = i + 1 To OG
If data(j) 

Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige