177 Aufrufe
Gefragt in Tabellenkalkulation von

Hallo,

im Forum gibt es schon einen super Beitrag für "Zellenformatierung: Inhalt * 1000". Hier hat ein User (Rainer) den Makro Code bekanntgegeben, um in Zellen automatisch * 1000 zu rechnen. Dieser funktioniert soweit auch, wenn die Zahl manuell eingetippt wird, dass automatisch * 1000 gerechnet wird.

Gerne möchte ich jedoch aus einem anderen Excel einen größeren Bereich in das Excel mit dem Makro kopieren und dass auch dann automatisch * 1000 gerechnet wird.

Hierbei kommt jedoch von Microsoft Visual Basic folgender Fehler:

Laufzeitfehler '13': Typen unverträglich

Typenkonflikt (Fehler 13) | Microsoft Learn

Hat hier jemand eine Idee, inwiefern der Code anzupassen ist, dass auch für kopierte Werte die automatische Rechnung * 1000 möglich ist?

Vielen Dank und lg

Julia

5 Antworten

0 Punkte
Beantwortet von xlking Experte (1.5k Punkte)
Hallo Julia,

auf welchen Beitrag beziehst du dich? Muss es unbedingt ein Makro sein? Sowas geht nämlich am besten ohne Makro. Einfach in eine freie Zelle die Zahl 1000 schreiben, diese dann kopieren, Bereich markieren und bei Inhalte einfügen die Option Multiplizieren markieren.

Gruß Mr. K.
0 Punkte
Beantwortet von
Hallo,

danke für die rasche Rückmeldung - ich beziehe mich auf
https://supportnet.de/fresh/2007/4/id1539569.asp

Die derzeitige Vorgehensweise besteht aus der Multiplikation mit 1000; da jedoch ab und zu Datensätze kopiert werden und ab und zu manuell eingegeben suche ich eine Lösung, dass die Zellen automatisch die Multiplikation vornehmen (egal ob man etwas rein kopiert oder rein tippt).

Falls du hier noch eine Idee hättest, sonst schon mal danke!!

LG
0 Punkte
Beantwortet von
Probiers mal mit

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("A2:A80,C2:C80")) Is Nothing Then
For Each SubTarget In Target.Cells
    With SubTarget
        .Value = SubTarget.Value * 1000
        .NumberFormat = "#,##0"
    End With
Next
End If
Application.EnableEvents = True
End Sub

wobei man

If Not Intersect(Target, Range("A2:A80,C2:C80")) Is Nothing Then

verschärfen sollte, wenn es auch Bereiche gibt die nicht * 1000 gerechnet werden sollen, die absichtlich oder unabsichtlich gemeinsam kopiert würden

bzw die Bedingung in der For Schleife nochmal anwenden so z.B.

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("A2:A80,C2:C80")) Is Nothing Then
For Each SubTarget In Target.Cells
   If Not Intersect(SubTarget, Range("A2:A80,C2:C80")) Is Nothing Then
        With SubTarget
            .Value = SubTarget.Value * 1000
            .NumberFormat = "#,##0"
        End With
    End If
Next
End If
Application.EnableEvents = True
End Sub
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo,

probiere es mal so:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngZelle As Range

'Ereignissteuerungen ausschalten
Application.EnableEvents = False

'alle Zellen des Targets durchlaufen
For Each rngZelle In Target
   With rngZelle
     .Value = .Value * 1000     'Wert multiplizieren
     .NumberFormat = "#,##0"     'Als Zahl formatieren
  End With
Next rngZelle
'Ereignissteuerungen einschalten
Application.EnableEvents = True

End Sub

Gruß

M.O.

0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)
@All,

sollte nicht noch eine Prüfung eingebaut werden ob der Zellinhalt numerisch ist? Andernfalls gibt es eine Fehlermeldung.

Bis später, Karin
...