Microsoft Office Forum [ www.Office-Fragen.de ] >> READONLY <<
Microsoft Office 2003-2019 => Excel => Thema gestartet von: obeer am Oktober 12, 2015, 13:14:23 Nachmittag
-
Hallo alle miteinander,
wir exportieren eine SQL Abfrage nach Excel und möchten diese dann als Serienbriefdatenquelle verwenden.
Da es Mühsam ist, die Leerzeichen manuell enzutippen,hatte ich es erst mit einer Formatierung versucht
(D\E##-#####-#####-#####-#####-##) klappt aber nicht, weil Excel ab der 15. Stelle nur noch Nullen ausgibt.
Also VBA:
************************************************************************************************
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Address < "$O$99" Then Exit Sub
With Target
.Value = _
Trim(Format(Replace(.Value, " ", ""), "!&&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&"))
End With
End Sub
************************************************************************************************
Klappt eigendlich ganz gut, nur wenn ich eine eingegebene Iban wieder löschen will kommt:
Excel funktioniert nicht mehr und das wars.
Dabei beende ich doch die "Sub". Was ist hier falsch?
Vielen Dank im voraus
obeer
-
Moin,
deine gesamze Prozedur einschließlich If Not Target.Address < "$O$99" … ist mi nicht geheuer und auch schwer durchschaubar (sprich: Nicht wirklich transparent).
Wie dem auch sei, ich habe mal für IBAN = in A1 eine Muster-Prozedur geschrieben, wo ich auf jeden Fall das Ergebnis wieder löschen kann:
Sub IBAN_Split()
Dim IBAN As String, IBANneu As String
Dim Block As Integer, WSp As String
IBAN = Cells(1, 1)
WSp = Chr(160)
For Block = 0 To 4
IBANneu = IBANneu & Mid(IBAN, Block * 4 + 1, 4) & WSp
Next Block
IBANneu = IBANneu & Right(IBAN, 2)
ActiveCell = IBANneu
End Sub
-
Hallo,
erstmal vielen Dank für die Arbeit.
Aber egal ob ich es normal oder als Klassenmodul einfüge, ich bekomme keine Leerzeichen.
Habe meinen Code nochmal umgechrieben:
****************************************************************************
Private Sub Worksheet_Change(ByVal Target As Range)
' in Spalte "O" erste Zeile auslassen da Überschrift
If Not Target.Address > "$O$1" Then Exit Sub
With Target
.Value = _
Trim(Format(Replace(.Value, " ", ""), "!&&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&"))
End With
End Sub
******************************************************************************************
Da diese Prozedur aber immer nur eine Zelle anspricht und wenn mehrere eingefügt werden ein Fehler anzeigt, habe ich danach noch ein Macro eingefügt :
***************************************************************************
Sub Makro1()
'
' Makro1 Makro
'
' Tastenkombination: Strg+l
'
Range("O2").Select
Selection.Cut
ActiveSheet.Paste
Range("O3").Select
Selection.Cut
ActiveSheet.Paste
Range("O4").Select
Selection.Cut
ActiveSheet.Paste
BIS
Range("O100").Select
Selection.Cut
ActiveSheet.Paste
End Sub
*************************************************************************
mfG
obeer
-
Also, ich bekomme mit meinem Code schon Leerstellen in die IBAN rein. Und ich kann die natürlich auch löschen, denn das war ja deine Ursprungsproblematik.
Ich mag mich allerdings nicht in deine sehr individuelle Art des Codes einarbeiten.
Wenn die IBANs immer in Spalte_O ab Zeile_2 stehen, wann wäre eine andere Form der Range-Deklaration gewiss für Außenstehende (und vielleicht auch Excel) leichter erkennbar. Eigentlich mag ist solche Folgerungen nicht (schreiben), aber: Du zeigst, dass du bei deiner Methodik bleiben möchtest, darum werde ich diesen Thread nicht mehr beobachten.