Return oder Zeilenumbruch in Textfeld bei Auswahl aus einer CSV Datei

05/04/2009 - 12:02 von andre.gobet | Report spam
Hallo NG

Ich bin gerade ein Projekt am realisieren in welchem die Mitarbeiter
Adressen aus einer separaten .csv Datei auswàhlen können und die
ausgewàhlte Adresse dann in einen Textfeld angezeigt wird.

Mein Code funktioniert, wenn ich verschiedene Textfelder definiere und
jedem Textfeld einen Wert aus der Datei zuweise. z.B.

UserForm Textfelder:
txtNameFirma
txtAdresseFirma
txtPLZ
txtOrt

Ich möchte nun folgendes realisieren dass die komplette Adresse im
TextFeld "txtNameFirma" angezeigt wird und natürlich mit Return's so
dass dann die Adresse wie folgt Aussieht

NameFirma
Adresse
PLZ & Ort

Dazu habe ich folgenden Code geschrieben:

Zuerst ein Klassenmodul namens "GesellschaftKL"
Public Adresse1 As String
Public Strasse1 As String
Public PLZ1 As String
Public Ort1 As String


Anschliessend ein Module names "Companys" für das laden der CSV Datei
und das Splitting
Function LoadCompanys() As Collection
On Error Resume Next
Dim lxq As New Collection
Dim lixq As String
Dim nfxq As Integer
nfxq = FreeFile
Open "C:\Schafer_Office_V3\Visual_Office\config_files_D\mfz
\gesellschaften.csv" For Input Shared As nfxq
Dim uxq As gesellschaftenKL
Dim scxq As String
scxq = ";"
While Not EOF(nfxq)
Line Input #nfxq, lixq
Set uxq = New gesellschaftenKL
uxq.Adresse1 = Split(lixq, scxq)(0)
uxq.Strasse1 = Split(lixq, scxq)(1)
uxq.PLZ1 = Split(lixq, scxq)(2)
uxq.Ort1 = Split(lixq, scxq)(3)
lxq.Add uxq, uxq.Adresse1
Wend
Close nfxq
Set LoadCompanys = lxq
End Function

Und anschliessend noch eine UserForm für die Selektion der Adresse aus
der CSV Datei sowie für das einfügen der ausgewàhlten Adresse in das
TextFeld

Private Sub UserForm_Activate()

Set companys = LoadCompanys
Dim uxq As gesellschaftenKL
Dim cuxq As gesellschaftenKL
Dim ixq As Integer
ixq = 0
For Each uxq In companys
Me.txtAdressAuswahl1.AddItem uxq.Adresse1
Me.txtAdressAuswahl1.ListIndex = ixq
End If
ixq = ixq + 1
End Sub

So und nun beginnn die Probleme ich schaffe es nicht dass die Adresse
anschliessend im TextFeld "txtAdressAuswahl1" angezeigt wird. Mit dem
untenstehenden Code sollte eigentlich die ausgewàhlte Adresse in das
Textfeld eingefügt werden und gesplittet nach Name Adresse PLZ Ort.

Private Sub beinfugen_Change()
On Error GoTo err1
Me.txtAdressAuswahl1.SetFocus
Dim s As String
s = Me.txtAdressAuswahl1
Dim ts() As String
ts = Split(s, vbCrLf)
Me.txtAdressAuswahl1 = ts(0) & vbCrLf & ts(1) & vbCrLf & ts(2) &
vbCrLf & ts(3) & vbCrLf & ts(4)
GoTo fin
err1:
Resume fin
fin:
End Sub

Vielleicht kann mir ja jemand helfen.

Gruss

- André
 

Lesen sie die antworten

#1 Michael Franke
05/04/2009 - 13:26 | Warnen spam
Hallo André,

auf die Schnelle ist mir folgendes aufgefallen, ohne dass ich den
vollen Durchblick gewonnen hàtte:

Mein Code funktioniert, wenn ich verschiedene Textfelder definiere und
jedem Textfeld einen Wert aus der Datei zuweise. z.B.

UserForm Textfelder:
txtNameFirma
txtAdresseFirma
txtPLZ
txtOrt

Ich möchte nun folgendes realisieren dass die komplette Adresse im
TextFeld "txtNameFirma" angezeigt wird und natürlich mit Return's so
dass dann die Adresse wie folgt Aussieht

NameFirma
Adresse
PLZ & Ort



Im selben Schritt, in dem Du den o.g. Textfeldern ihre Werte zuweist,
sollte es doch möglich sein, ein weiteres Textfeld "txtFirmaKomplett"
zu füllen, und zwar nach dem Schema

Me.txtFirmaKomplett = Me.txtNameFirma & vbCrLf
Me.txtFirmaKomplett = Me.txtFirmaKomplett & Me.txtAdresseFirma &
vbCrLf
Me.txtFirmaKomplett = Me.txtFirmaKomplett & Me.txtPLZ & " " &
Me.txtOrt

Anschließend könntest Du die einzelnen Textfelder auf unsichtbar
stellen, damit die Daten nicht doppelt angezeigt werden.

Private Sub UserForm_Activate()

Set companys = LoadCompanys
    Dim uxq As gesellschaftenKL
    Dim cuxq As gesellschaftenKL
    Dim ixq As Integer
    ixq = 0
    For Each uxq In companys
        Me.txtAdressAuswahl1.AddItem uxq.Adresse1
            Me.txtAdressAuswahl1.ListIndex = ixq
        End If
        ixq = ixq + 1
End Sub



Hier fehlt ein "Next" zur "For Each"-Schleife; dafür ist das "End If"
überflüssig.

So und nun beginnn die Probleme ich schaffe es nicht dass die Adresse
anschliessend im TextFeld "txtAdressAuswahl1" angezeigt wird. Mit dem
untenstehenden Code sollte eigentlich die ausgewàhlte Adresse in das
Textfeld eingefügt werden und gesplittet nach Name Adresse PLZ Ort.

Private Sub beinfugen_Change()
    On Error GoTo err1
    Me.txtAdressAuswahl1.SetFocus
    Dim s As String
    s = Me.txtAdressAuswahl1
    Dim ts() As String
    ts = Split(s, vbCrLf)
    Me.txtAdressAuswahl1 = ts(0) & vbCrLf & ts(1) & vbCrLf & ts(2) &
vbCrLf & ts(3) & vbCrLf & ts(4)
    GoTo fin
err1:
    Resume fin
fin:
End Sub



Du willst die Adresse im Textfeld "txtAdressAuswahl1" anzeigen lassen,
dass Du zuvor mit der "AddItem"-Methode, also als Kombinations- oder
Listenfeld gefüllt hast. Das kann m.E nicht funktionieren. Außerdem
ist unklar, welche Rolle Dein Feld "beinfugen" hat, für das Du hier
das "Change"-Ereignis verwendest.

Gruß, Michael

Ähnliche fragen