Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Dynamische Spalten in Text per vba?

Begonnen von silentwolf, Juli 21, 2015, 13:10:32

⏪ vorheriges - nächstes ⏩

silentwolf

Hi,
ich habe folgenden Code probiert aber leider bekomme ich es nicht hin und eine Fehlermeldung..
Ich versuche eine Text In Spalte Prozedur zu schreiben die aber dynamisch funktioniert ... Es soll diese Prozedur mehrmals aufgerufen werden und deshalb bräuchte ich den Text in Spalte immer in der letzten freien Spalte einer Tabelle.

Leider weis ich nicht wie es funkionieren könnte.

Hier der Code
Sub SpalteInTextSpalteF()
    Dim LastColumn As Integer

    With Tabelle10

    LastColumn = Cells(2, Columns.Count).End(xlToLeft).Column

    Application.ScreenUpdating = False
   
    Columns(6).TextToColumns Destination:=Range(LastColumn),   DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, OtherChar:="/"
   
    Columns(6).Delete
   
    Cells.EntireColumn.AutoFit
   
   
    End With
    Application.ScreenUpdating = True
   
End Sub

könnte mir jemand behilflich sein bitte?

Der debugger stoppt in der Zeile     Columns(6).TextToColumns Destination:=Range(LastColumn), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, OtherChar:="/"


Laufzeitfehler 1004
Die Methode "Range" für das Objekt Globas ist fehlgeschlagen
LG
Albert

el_gomero

Hallo Albert,

das Thema gehört wohl in den Excel-Bereich. Kann jedenfalls keine Access-Komponenten erkennen.
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

silentwolf

Hi el_gomero,
also so viel ich sehen kann ist es in dem Excel Forum.
Aber danke für Deine Antwort!

LG

MaggieMay

Hi,
Zitatdas Thema gehört wohl in den Excel-Bereich
klar, dort befindet er sich ja auch. ;-)

@SilentWolf:
Ich finde den Code insgesamt etwas "fragwürdig".
Was ist "Tabelle10", wo wird dieses Objekt initialisiert?
Und dann machst du gar keinen Gebrauch von dem With-Statement.
Das solltest du als erstes ändern.
Freundliche Grüße
MaggieMay

el_gomero

da war mir wohl der Schweiss in die Augen gelaufen ... hast natürlich recht, sorry ;)
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

silentwolf

Hi Maggie,
danke für Deine Antwort!
Na ja Tabelle10 ist halt eine Tabelle in meinen Workbook.
Und dort hätte ich den Code halt mal getestet.
Leider hab ich hier ja wohl noch meine Schwierigkeiten um diesen richtig zu schreiben :(
Wo das objekt initialisiert wird hmm das ist eine gute Frage  ???
Ich weis es leider nicht :(
Hab jetzt einige Dinge probiert aber irgendwie komme ich nicht drauf wie es funkionieren soll oder kann.

Lg
Albert

MaggieMay

Wenn "Tabelle10" der Name des Arbeitsblattes ist, so kannst du das folgendermaßen versuchen:
Sub SpalteInTextSpalteF()
    Dim LastColumn As Integer
    ' Application.ScreenUpdating = False

    With ActiveWorkbook.Sheets("Tabelle10")
        LastColumn = .Cells(2, .Columns.Count).End(xlToLeft).Column
        .Columns(6).TextToColumns Destination:=.Range(LastColumn),   DataType:=xlDelimited, _
                        TextQualifier:=xlDoubleQuote, OtherChar:="/"
        .Columns(6).Delete
        .Cells.EntireColumn.AutoFit
    End With
   ' Application.ScreenUpdating = True
End Sub

Freundliche Grüße
MaggieMay

silentwolf

Hi Maggie,

vielen Dank für Deine Hilfe! Leider bekomme ich auch hier noch eine Fehlermeldung in der selben Zeile :(
Anwendungs oder Objektdefinierter Fehler.

LG

MaggieMay

Der Ausdruck ".Range(LastColumn)" liefert vermutlich kein gültiges Range-Objekt.

Was hast du da eigentlich vor, was willst du auf mehrere Spalten verteilen und woher kommt der Input?
Freundliche Grüße
MaggieMay

silentwolf

Hi Maggie,
also was ich genau vorhabe ist folgendes.
Ich möchte die Spalte in meinem Fall "F" der Tabelle1"( ist es eigentlich ) in Text zu Spalten aufteilen.
die Aufgeteilte Spalte soll in die erste freie Spalte dieser Tabelle eingefügt werden.
Danach soll die Spalte F gelöscht werden und wieder der selbe Vorgang neu gestartet werden da ich mehrere Spalten habe die Text zu Spalte aufgeteilt werden müssen.
Da jetzt die letzte Spalte nicht mehr die selbe ist als es zuvor war brauche ich eben wieder die erste freie Spalte in dieser Tabelle.
Ist das so gut genug erklärt??

LG

MaggieMay

#10
Hi,

ich habe mal etwas herumprobiert und eine (für mich) funktionierende Lösung gefunden:
Sub SpalteInTextSpalteF()
    Dim LastColumn As Integer, LastRow As Integer
    Dim Tab As Object
    Set Tab = ActiveWorkbook.Sheets("Tabelle1")
   
   ' Application.ScreenUpdating = False
    With Tab
        LastColumn = .Cells(2, .Columns.Count).End(xlToLeft).Column
        LastRow = .Cells(.Rows.Count, 6).End(xlUp).Row
        .Columns(6).TextToColumns _
                    Destination:=.Range(.Cells(1, LastColumn + 1), .Cells(LastRow, LastColumn + 1)), _
                    DataType:=xlDelimited, _
                    TextQualifier:=xlTextQualifierNone, _
                    Other:=True, OtherChar:=";"
        .Columns(6).Delete
        .Cells.EntireColumn.AutoFit
    End With
   
  '  Application.ScreenUpdating = True
    Set Tab = Nothing
End Sub

Die Parameter musst du evtl. noch anpassen, ich hatte mit dem Semikolon als Trennzeichen getestet.

Wenn du das mehrfach ausführen lassen willst, wie kommt denn dann der neue Inhalt in Spalte "F"?

PS:
Die Definition des Ziel-Ranges geht sicher einfacher, dann wüsste ich gern wie. :-)
Freundliche Grüße
MaggieMay

silentwolf

Hallo Maggie,
vielen dank für Deine mail!
Leider habe ich nicht viel Zeit um den Code zu testen.. aber ich denke es gibt hier doch noch ein Problem und zwar hat die letzte benutzte Spalte leider nicht alle Zellen mit Werten eingetragen :(
Es ist eine CSV Datei die ich hier ändern bez. anpassen möchte. Und hier kann man nicht sagen in welcher Zelle der letzt benutzten Spalte ein Wert steht. Also sollte der Code eigentlich die ganze Spalte durchsuchen und kontrollieren ob ein Wert in der Spalte ist oder nicht.

Danke
Lg
Albert

MaggieMay

Hallo,

gibt es denn eine Spalte aus der sich die Anzahl Zeilen ermitteln lässt?
Dann sollte folgendes klappen:
Sub SpalteInTextSpalteF()
    Dim LastColumn As Integer, LastRow As Integer
    Dim i As Long, X As Long
    Dim xlTab As Object
    Set xlTab = ActiveWorkbook.Sheets("Tabelle1")
   
   ' Application.ScreenUpdating = False
    With xlTab
        LastRow = .Cells(.Rows.Count, 6).End(xlUp).Row
        For i = 1 To LastRow
            X = .Cells(i, .Columns.Count).End(xlToLeft).Column
            If X > LastColumn Then LastColumn = X
        Next

        .Columns(6).TextToColumns _
                    Destination:=.Range(.Cells(1, LastColumn + 1), .Cells(LastRow, LastColumn + 1)), _
                    DataType:=xlDelimited, _
                    TextQualifier:=xlTextQualifierNone, _
                    Other:=True, OtherChar:=";"
        .Columns(6).Delete
        .Cells.EntireColumn.AutoFit
    End With
   
  '  Application.ScreenUpdating = True
    Set xlTab = Nothing
End Sub
Freundliche Grüße
MaggieMay

silentwolf

Hi Maggie,
Vielen Dank für Deine Antwort!
ja die Spalte A in dieser Tabelle enthält die Anzahl der Zeilen also durchgehend.
ZitatWenn du das mehrfach ausführen lassen willst, wie kommt denn dann der neue Inhalt in Spalte "F"?
Es wird ja die Spalte F gelöscht und dann wird die Spalte G zur Spalte F die ich in der gleichen Form wieder mit der Text in Spalte Funktion ausführen möchte.
Werde den Code mal testen den Du geschickt hast mal sehen wie es geht :)
melde mich wieder für neue updates :)

LG
Albert

MaggieMay

Hi,
Zitatja die Spalte A in dieser Tabelle enthält die Anzahl der Zeilen also durchgehend
dann musst du hier die 6 durch die 1 ersetzen:
LastRow = .Cells(.Rows.Count, 6).End(xlUp).Row
Freundliche Grüße
MaggieMay