Clever-Excel-Forum

Normale Version: Macro: Format löschen / ändern von-bis?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Moin Ralf,

vielen Dank für die Erklärung...  Das ist wirklich vollkommen verquer :16:  Ich glaube mal, VBS wird nie so richtig mein Freund :21:
Ist halt nur auf den ersten Blick so!
Man muss nur die Standardbelegung der noch nicht gefüllten Variablen-Typen kennen (oder das Lokalfenster im Editor einblenden).
Würdest Du so etwas auch als verquer titulieren?
Code:
Dim i As Long
i = 5 * 3
If Not i = 0 Then …
'hier ginge natürlich auch If i > 0 Then

Gruß Ralf
... nö, das ist nicht verquer, das ist logisch ;)

Aber was anderes; kaum bin ich ein paar Tage weg, meint Excel resp. Mickersoft, es dürfe hier selbstständig was ändern (der Rechner war wohlgemerkt nicht an während meiner Abwesenheit) :@ 

Ich wollte vorhin mal das Script antesten. Also Template geöffnet und rein gebastelt... Test... Schei**** :@ AD fasst das Template zwar an, läuft dann aber auf eine Fehlermeldung, die es vorher noch nie so gegeben hat. Also alles wieder zurück (resp. vorher gesichertes Template wieder zurück kopiert) und neuer Versuch... Gleiche in Grün...

Fehlermeldung siehe Anlage...

Eine solche Temp- Datei ist an dem angegebenen Ort nicht zu finden, an den Rechten hat sich auch nichts geändert und Excel kann manuell auch problemlos da rein schreiben. Dennoch hakt das irgendwo...

Is mir gerade ein Rätsel ...
:@ :@ :@  ... wenn mir Bill Gates mal im dunkeln über'n Weg läuft ... :@ :@ :@ 
Das komische tmp- Problem ist gelöst. WIN10 hatte mal wieder klammheimlich ein Update eingespielt. Nach "Rückabwicklung" und manuellem Einspielen des Updates ist der Fehler plötzlich weg...


Back to topic...

Ich habe den Code noch ein bisschen umgefrickelt; der sieht jetzt so aus:

Code:
Sub Formatkorrektur()
    Dim Bereich As Range
    Set Bereich = Range("A:A").Find("Quantity").Offset(1)
    If Not Bereich Is Nothing Then
        Set Bereich = Bereich.Resize(Bereich.End(xlDown).Row - Bereich.Row + 1, 13)
        Bereich.Columns("A").NumberFormat = "#,##0"
        Bereich.Columns("B:K").NumberFormat = "@"
        Bereich.Columns("L").NumberFormat = "_-* #,##0.0000 [$€-407]_-;-* #,##0.0000 [$€-407]_-;_-* ""-""???? [$€-407]_-;_-@_-"
       Bereich.Columns("M").NumberFormat = "_-* #,##0.000 [$€-407]_-;-* #,##0.000 [$€-407]_-;_-* ""-""??? [$€-407]_-;_-@_-"
        With Bereich.Columns("A:M")
            With .Font
                .Name = "Arial"
                .FontStyle = "Normal"
                .Size = 8
                .Strikethrough = False
                .Superscript = False
                .Subscript = False
                .OutlineFont = False
                .Shadow = False
                .Underline = xlUnderlineStyleNone
                .ColorIndex = 0
                .TintAndShade = 0
                .ThemeFont = xlThemeFontNone
            End With
        End With
    End If
End Sub
Funktioniert so weit wie gewollt, mit einer Einschränkung:
AD exportiert die Daten in Spalte "L" leider als Text und nicht als Zahl. Somit zieht auch die Formatierung als Währung über das Script nicht. Ebenfalls sind die "Text- Zahlen" zentriert dargestellt, obwohl diese Spalten als rechtsbündig deklariert sind... (humbug...)
Erstaunlicher Weise (für mich zumindest) scheint Excel aber damit rechnen zu können, denn die berechneten Daten in Spalte "M" ($A * $L) sind korrekt Zahlen und lassen sich somit auch als Währung deklarieren.

Frage also:
Wie kann ich das Script so erweitern, das zum einen die Spalte "L" von Text- auf Zahl umgeswitcht wird und dann zudem die Spalte rechtsbündig wird?!?
Hallo Micha,

vielleicht hilft etwas in der Art

Code:
Sub test()
With Range("L1:L3")
arrL = .Value
.ClearContents
.NumberFormat = "_-* #,##0.0000 [$€-407]_-;-* #,##0.0000 [$€-407]_-;_-* ""-""???? [$€-407]_-;_-@_-"
.Value = arrL
End With
End Sub
Moin André,

mal sehen, ob ich das verstehe...

Du definierst den Bereich, schreibst den Inhalt in die Variable arrL (was heißt dsa genau? Ist das ein beliebiger Name oder ein Systemteil?), setzt das Nummernformat und schreibst den Kram zurück?

Ich werde das mal antesten und berichten ...
... nööööö, klappt so nicht, zumindest nicht so, wie ich es eingebunden habe. Oder habe ich das falsch gemacht? Es ändert sich im Grunde nichts. Die Spalte ist immer noch Text und die Formatierung als Währung wirkungslos...

Hier noch mal das Script mit dem "Trick" von André:

Code:
Sub Formatkorrektur()
    Dim Bereich As Range
    Set Bereich = Range("A:A").Find("Quantity").Offset(1)
    If Not Bereich Is Nothing Then
        Set Bereich = Bereich.Resize(Bereich.End(xlDown).Row - Bereich.Row + 1, 13)
        Bereich.Columns("A").NumberFormat = "#,##0"
        Bereich.Columns("B:K").NumberFormat = "@"
        With Bereich.Columns("L")
            arrL = .Value
            .ClearContents
            .NumberFormat = "_-* #,##0.0000 [$€-407]_-;-* #,##0.0000 [$€-407]_-;_-* ""-""???? [$€-407]_-;_-@_-"
            .Value = arrL
            .NumberFormat = "_-* #,##0.0000 [$€-407]_-;-* #,##0.0000 [$€-407]_-;_-* ""-""???? [$€-407]_-;_-@_-"
        End With
        Bereich.Columns("M").NumberFormat = "_-* #,##0.000 [$€-407]_-;-* #,##0.000 [$€-407]_-;_-* ""-""??? [$€-407]_-;_-@_-"
        With Bereich.Columns("A:M")
            With .Font
                .Name = "Arial"
                .FontStyle = "Normal"
                .Size = 8
                .Strikethrough = False
                .Superscript = False
                .Subscript = False
                .OutlineFont = False
                .Shadow = False
                .Underline = xlUnderlineStyleNone
                .ColorIndex = 0
                .TintAndShade = 0
                .ThemeFont = xlThemeFontNone
            End With
        End With
    End If
End Sub

EDIT sagt gerade:
Kann es ggf. sein, das in dem temporär gesicherten Daten das Apostroph weiterhin vorhanden ist (arrL = .Value) und dann ebenso wieder zurück gegeben wird (.Value = arrL) ?!?
Wenn dem so ist, müsste man irgendwie die Apostrophe in den Daten killen oder, was vielleicht auch geht, eine Dummy- Berechnung damit durchführen like "ZelleX = 10 * ZelleX /10" oder vielleicht reicht auch einfach "ZelleX = 1 * ZelleX"
Lasse doch einfach mal Daten, aus Tabelle (aka Power Query) drüberlaufen.
Die Umwandlung dürfte automatisch erfolgen.
Alternative: Daten, Text in Spalten nacheinander auf L und M, jeweils sofort fertigstellen.

Ich vermisse (D)eine Beispieldatei.

Gruß Ralf
Hallo Ralf,

schau mal ganz am Anfang. Dort findest Du die Vorlage als Beispiel...

Das Weitere habe ich nicht verstanden, was Du meinst...
PowerQuery "drüber laufen lassen" ist ein manueller Akt, der nicht machbar ist. Das ist ja Sinn der Aktion, das hier das "Geradeziehen" automatisch läuft und der Bestellfutzi keinesfalls noch an der Tabelle rumfrickeln soll.


Zitat:Alternative: Daten, Text in Spalten nacheinander auf L und M, jeweils sofort fertigstellen.

... Du sprichst in Rätseln Angel
Hallo,

probier mal diese Variante:
Code:
Sub Formatkorrektur()
    Dim Bereich As Range
    
    Set Bereich = Range("A:A").Find("Quantity").Offset(1)
    If Not Bereich Is Nothing Then
        Set Bereich = Bereich.Resize(Bereich.End(xlDown).Row - Bereich.Row + 1, 13)
        Bereich.Columns("A").NumberFormat = "#,##0"
        Bereich.Columns("B:K").NumberFormat = "@"
        Dim temp As Variant
        Dim i As Long
        temp = Bereich.Columns("L")
        For i = 1 To UBound(temp)
            temp(i, 1) = CDbl(temp(i, 1))
        Next
        Bereich.Columns("L") = temp
        Bereich.Columns("L").NumberFormat = "_-* #,##0.0000 [$€-407]_-;-* #,##0.0000 [$€-407]_-;_-* ""-""???? [$€-407]_-;_-@_-"
        Bereich.Columns("M").NumberFormat = "_-* #,##0.000 [$€-407]_-;-* #,##0.000 [$€-407]_-;_-* ""-""??? [$€-407]_-;_-@_-"
        With Bereich.Columns("A:M")
            With .Font
                .Name = "Arial"
                .FontStyle = "Normal"
                .Size = 8
                .Strikethrough = False
                .Superscript = False
                .Subscript = False
                .OutlineFont = False
                .Shadow = False
                .Underline = xlUnderlineStyleNone
                .ColorIndex = 0
                .TintAndShade = 0
                .ThemeFont = xlThemeFontNone
            End With
        End With
    End If
End Sub
Seiten: 1 2 3