webForumDet fria alternativet

Försöker vara smart med FSO

.NET

4 svar · 210 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Jag försöker att så långt som möjligt återanvända kod.

En listbox är fylld med filnamn, när man klicka på den så skall via en sub, resultatet skrivas in i Text1.(borde vara enkelt, men jag missar någonstans)

 OppnaFilTillTextRuta , Form1.StatusBar1.Panels(1).text & List2.text, Text1.text

Här vill jag alltså ha med mig två agrument, sökväg och vart till.
(har kollat via msgbox och jag har sökvägen med mig.)
Sen till subben, som jag har lagt i en modul:

Sub OppnaFilTillTextRuta(inFil, utFil)
    Dim f As Integer, FileName As String
    FileName = inFil 'App.Path & "\test.txt"
    f = FreeFile
    If Dir(FileName) <> "" Then
    Open FileName For Input As f
    utFil = Input(LOF(f), f)
    Close f
End If
End Sub

Jag får ett error, argument not optional.

:(

Medlem sedan maj 20018 027 inlägg
#2

Du har råkat få med ett kommatecken för mycket i ditt funktionsanrop. Därför tolkar VB det som att du inte skickar med argument 1, alltså "inFil", vilken du inte har deklarerat som optional.

Medlem sedan mars 20011 880 inlägg
#3

Tack för den biten.
Det finns tydligen ett problem till
Jag får tydligen inte med mig sista biten:

OppnaFilTillTextRuta Form1.StatusBar1.Panels(1).text & List2.text, Text1.text

Om jag nu använder som ovan, så blinkar det bara till, men ingenting läses in i text1.
Om jag därimot hårdkodar i subben..

Sub OppnaFilTillTextRuta(inFil)
    Dim f As Integer, FileName As String
      FileName = inFil
    f = FreeFile  
    Open FileName For Input As f
    Form1.Text1.text = Input(LOF(f), f)
    Close f
End Sub

Då fungerar det, men då har jag kommit ifrån återanvändningen.
Vad har jag gjort för fel som jag inte ser?

Medlem sedan maj 20018 027 inlägg
#4

Har du funderat över ditt val av namn på variablerna? Vad jag kan förstå av din kod, är parametern "utfil" inte alls tänkt att vara namnet på en fil. Du har istället tänkt att den ska motsvara text-propertyn på ditt textfält, vilket ska ändras av din sub. Om det är så du har tänkt, skulle du kunna skicka hela Text1-kontrollen till suben, enligt:

Sub OppnaFilTillTextRuta(String As inFil, ByRef Text As TextKontroll)
    Dim f As Integer, FileName As String
    FileName = inFil 'App.Path & "\test.txt"
    f = FreeFile
    If Dir(FileName) <> "" Then
        Open FileName For Input As f
        TextKontroll.Text = Input(LOF(f), f)
        Close f
    End If
End Sub

Anrop:

OppnaFilTillTextRuta Form1.StatusBar1.Panels(1).text & List2.text, Text1

Jag tog mig friheten att byta namn på parametern för att jag vill ha namn som säger något om vad parametrarna är till för.

Är det däremot så att parametern "utfil" verkligen är tänkt att vara namnet på en fil, då måste du istället öppna en fil som output för att kunna skriva till. Men som sagt, det såg inte ut som det var det du tänkte utifrån din kod.

Medlem sedan mars 20011 880 inlägg
#5

Tack för att du tar dig tid. Jag förstår iden och den är ju bra, du uppfattade mig perfekt.
Nu är ju inte allt som glimmar.....
Jag fick problem.
Först så hade du gjort ett litet misstag, som jag rättade till, men jag får
ett error:

Sub OppnaFilTillTextRuta(inFil As String, ByRef Text As TextKontroll)
    Dim f As Integer, FileName As String
    FileName = inFil 'App.Path & "\test.txt"
    f = FreeFile
    If Dir(FileName) <> "" Then
        Open FileName For Input As f
        TextKontroll.Text = Input(LOF(f), f)
        Close f
    End If
End Sub

(Du hade råkat vända på inFil's datatyp)

Men jag får detta error:
User Defined tupe not defined.
Jag kör alltså VB 6.0 är det de som spökar?
[REDIGERAT]
Jag ändrade till :
TextKontroll As Object
Sen gick det av bara farten.
Tack för din hjälp

268 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
136 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
134 ms — ändringar (db)