23.11.2017, 10:42 (Dieser Beitrag wurde zuletzt bearbeitet: 23.11.2017, 10:43 von RPP63.)
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
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...
23.11.2017, 16:59 (Dieser Beitrag wurde zuletzt bearbeitet: 23.11.2017, 17:18 von M*I*B.)
:@ :@ :@ ... 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?!?
Sub test() With Range("L1:L3") arrL = .Value .ClearContents .NumberFormat = "_-* #,##0.0000 [$€-407]_-;-* #,##0.0000 [$€-407]_-;_-* ""-""???? [$€-407]_-;_-@_-" .Value = arrL End With End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
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?
24.11.2017, 10:53 (Dieser Beitrag wurde zuletzt bearbeitet: 24.11.2017, 11:09 von M*I*B.)
... 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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
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.
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