1.4k Aufrufe
Gefragt in Tabellenkalkulation von Mitglied (926 Punkte)
Guten Morgen,
ich bin dabei mir ein Makro zusammen zu bauen mit dem ich ein Tabellenblätter bearbeiten kann, die aus Exporten aus einem Buchhaltungsprogramm entstehen.
Ein Komplex darin soll sein:

Sub Spalten_bearbeiten()
Cells.ColumnWidth = 11

Dim varAntwort
Dim raBereich As Range
varAntwort = Application.InputBox("Spalte löschen", Type:=2)
If varAntwort <> False Then
On Error Resume Next
Columns(varAntwort).Delete
End If

varAntwort = Application.InputBox("links Spalte einfügen", Type:=2)
If varAntwort <> False Then
On Error Resume Next
Columns(varAntwort).Insert Shift:=xlToLeft
End If

varAntwort = Application.InputBox("Prozentformat Spalte?", Type:=2)
If varAntwort <> False Then
On Error Resume Next
If Not raBereich Is Nothing Then
Cells(1, 10) = 100
Range(1, 10).Select
Selection(1, 10).Copy
Columns(varAntwort).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlDivide, SkipBlanks:= _False, Transpose:=False Columns(varAntwort).NumberFormat = "0%"
Columns(varAntwort).EntireColumn.AutoFit
End If
Set raBereich = Nothing
End Sub

Die Codeblöcke "Spalte löschen", "Spalte einfügen" etc, sollen aber jeweils für sich mehrfach ausgeführt werden, bis kein Spaltenbuchstabee mehr angegeben wird.
Im letzten Teil des Makros sollen die vorhandenen Zahlen durch 100 geteilt werden, nur funktionieren tuts nicht. Im übrigen müsste es doch wohl auch einfacher gehen, als mit Eingabe, Select, Copy etc.

Diese beiden Zeilen habe ich dem ursprünglichen Makro aus einer früheren Antwort übernommen:
If Not raBereich Is Nothing Then
Set raBereich = Nothing
Wüßte aber gerne was sie bewirken?
Vielen Dank im Voraus
mfg
Wolfgang H.

2 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Wolfgang,

Dein Code kann nicht laufen, da ein Enter fehlt und ein End if.
Was Dein Code macht habe ich mir nicht angesehen.
Da mir einige Befehle nicht bekannt sind z.B.
Selection(1, 10).Copy
Die Variable RaBereich wird bei Dir nicht gesetzt, also wird dieser Codeteil auch nicht ausgeführt.
Mit If Not raBereich Is Nothing Then wird geprüft ob die Variable belegt
mit Set raBereich = Nothing wird die Variable gllert, was bei allen Variablen die mit Set gesetzt wrde erflgen sollte (was bei Dir ´nicht erfolgt, ich habe kein Set gefunden)

In Deinem Codehabe ich auch nicht gefunbden das was mehrmals ausgeführt wird.


Gruß Hajo
0 Punkte
Beantwortet von Mitglied (926 Punkte)
Hallo allerseits und hallo Hajo,

Der Code läuft.

unter folgendem Link:
www.supportnet.de/t/2323926

Habe ich das folgende Makro von Karin / Beverly gefunden:
Sub Datum_formatieren()
Dim varAntwort
Dim raBereich As Range
varAntwort = Application.InputBox("Bitte Spaltenbuchstaben eingeben", Type:=2)
If varAntwort <> False Then
On Error Resume Next
Set raBereich = Range(varAntwort & 1)
On Error GoTo 0
If Not raBereich Is Nothing Then
Columns(varAntwort).TextToColumns Destination:=Range(varAntwort & 1), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 5), TrailingMinusNumbers:=True
Columns(varAntwort).EntireColumn.AutoFit
End If
End If
Set raBereich = Nothing
End Sub

ich habe versucht dieses Makro für meine Zwecke zu verändern. Nach Eingabe eines Buchstabens in:
Inputbox "Spalte löschen", wird diese gelöscht.
Inputbox "links Spalte einfügen" wird links von der angegebenen Spalte eine neue Spalte eingefügt.
InputBox("Prozentformat Spalte?" werden die dort vorhandenen Zahlen als Prozente formatiert.
Das bis hier beschriebene funkioniert so auch!
Allerdings sollen die Zahlen, die als Prozente formatiert werden, vorher durch "100" geteilt werden. Das geht sicherlich sehr viel einfacher als das was ich auf einer anderen Webseite gefunden habe und versucht habe hier zu verwenden.
Im Code ist tatsächlich nichts was mehrfach ausgeführt wird.
genau das wollte ich erfragen:
Wie muss das Makro ergänzt werden, das jede Inputbox erneut aufgerufen wird, bis kein Buchstabe mehr eingegeben wird
mfg
Wolfgang
...