VBA Funktion zum Feld teilen mit Übergabeparameter

Guten Tag,
ich muss für die Arbeit eine kleine Excel-Funktion basteln die unsere alten Datensätze in ein vorgefertiges Format bringt um diese dann in Navision importieren zu können wobei jedes Feld nur eine bestimmte Länge haben darf und alles darueber hinaus nach dem letzten Leerzeichen abgetrennt wird und der Rest in ein anderes Feld geschrieben wird.
Jetzt habe ich angefangen aber irgendwie komme ich nicht weiter obwohl ich glaube dass ich kurz davor bin :confused:

Hier mein Code, danke im Voraus an alle die mir behilflich sein können :

Public Function splitten(i As Variant, b As Variant)

Dim sTmp As String
Application.ScreenUpdating = False

sTmp = Left(Range(i, i), 250)

If InStr(sTmp, " ") > 0 Then
sTmp = Left(sTmp, InStrRev(sTmp, " "))
End If
ActiveCell.Text = Trim(sTmp)
Range(b) = Trim(Mid(Range(i, i), Len(sTmp) + 1, 250))

Application.ScreenUpdating = True
End Function

Hallo Master,

ich muss für die Arbeit eine kleine Excel-Funktion basteln die
unsere alten Datensätze in ein vorgefertiges Format bringt um
diese dann in Navision importieren zu können wobei jedes Feld
nur eine bestimmte Länge haben darf und alles darueber hinaus
nach dem letzten Leerzeichen abgetrennt wird und der Rest in
ein anderes Feld geschrieben wird.

interessant. Mir wäre lieber du hättest geschrieben WELCHE Länge die Textteile haben sollen und wie du dir das mit den anderen Feldern vorstellst.
In den anderen Feldern könnte ja was drinstehen.

Jetzt habe ich angefangen aber irgendwie komme ich nicht
weiter obwohl ich glaube dass ich kurz davor bin :confused:

Mag so sein :smile:)

Ich habe dir mal Code gebastelt der einen Beispieltext in 10er-Häppchen zerlegt.

Sub Test()
Dim N As Long, X
X = splitten("abcjkds skljdlöjd d öökföööf öfköfkfkkfökä fkfääfläfl fklkffäfläf")
For N = 0 To UBound(X)
 MsgBox X(N)
Next N
End Sub
'
Public Function splitten(ByVal Text As String) As String()
Dim N As Long, S() As String
Text = Trim(Text)
ReDim S(Int(Len(Text) / 10))
For N = 0 To UBound(S)
 S(N) = Mid(Text, N \* 10 + 1, 10)
 S(N) = Trim(S(N))
Next N
splitten = S
End Function

Gruß
Reinhard

Moin, zischmaster,

hast Du schon mal die Funktion split gesehen? Ein Blick in die VBA-Hilfe lohnt sich.

Gruß Ralf

den text zu teilen ist nicht das problem, das habe ich soweit bewerkstelligt, so dass er mir auch ab dem letzten leerzeichen vor der vorgegebenen feldlaenge trennt. mein problem liegt eher darin, das ursprungsfeld, das zielfeld fuer alles was uebersteht und das aktuelle feld an die funktion zu uebergeben. ich hatte es mit range() versucht aber das funkt irgendwie nicht. und wenn ich es ueber cells() mache dann kann ich ja nur den integer wert der spalte bzw zeile übergeben was sich dann nicht im excelsheet uebergeben laesst weil man ja A5 nur aufwendig auf cells(1,5) konvertieren kann.

hab da nochmal eine Frage… gibt es eine moeglichkeit den übergabeparameter direkt zu konvertieren ? von „A5“ in Cells(1,5) ?

hab da nochmal eine Frage… gibt es eine moeglichkeit den
übergabeparameter direkt zu konvertieren ? von „A5“ in
Cells(1,5) ?

Hallo Zischmaster,

k.A. was du möchtest.

Hilft das:

Sub tt()
Dim Z, S, Zelladr
Zelladr = Split(Range(„A5“).Address, „$“)
S = Asc(Zelladr(1)) - 64
Z = CInt(Zelladr(2))
MsgBox Cells(Z, S).Address
End Sub

Gruß
Reinhard

bei mir funktioniert soweit alles und er teilt meinen string auch ordnungsgemäß aber leider hab ich keine ahnung wie ich den string dann wieder in ein Feld schreibe dass ich vorher an die Function im Kopf übergeben habe. Ich habe die Felder jetzt auch schon in Cells konvertiert aber da geht es auch nicht^^ weder mit Range(übergabeparamauskopf).value noch mit cells(spalte,zeile)

Ich hab irgendwo gelesen, dass das daran liegt dass so etwas mit functions nicht geht ?!

Hallo Zischmaster,

sorry, ich verstehe zu wenig was du da genau willst.

Mit Funktionen kann man nicht in andere Zellen schreiben, aber in die Zelle in der die Funktion steht schon.

Gruß
Reinhard

das ist mein programm was ich soweit geschrieben habe

Public Function splitten(i As String, b As Variant)
Dim sTmp As String
Dim linkerteil, rechterteil As String
Dim diesezelle As Variant
Dim zeilenzahl As Long
Dim spaltenzahl As Integer

Application.ScreenUpdating = False
diesezelle = ActiveCell.Address
neueadd = Mid(diesezelle, InStr(1, diesezelle, „$“) + 1, 1) & Mid(diesezelle, InStr(3, diesezelle, „$“) + 1, 5)
spaltenzahl = Asc(Mid(diesezelle, InStr(1, diesezelle, „$“) + 1, 1)) - 64
zeilenzahl = Mid(diesezelle, InStr(3, diesezelle, „$“) + 1, 5)
sTmp = Left(i, 250)
If InStr(sTmp, " ") > 0 Then
sTmp = Left(sTmp, InStrRev(sTmp, " "))
End If

linkerteil = Trim(sTmp)

'ActiveSheet.Cells.Range(b).Value = „test“
'Cells(spaltenzahl, zeilenzahl) = Trim(sTmp)

rechterteil = Trim(Mid(i, Len(sTmp) + 1, 250))
Application.ScreenUpdating = True
End Function