Avatar billede Pdahl Juniormester
07. februar 2020 - 22:44 Der er 5 kommentarer

Hvordan sletter man sidste linie i et tekstboks-objekt med VBA?

Med nedenstående kode (fra en private sub) indlæser jeg tekstlinier fra en tekst-fil til et objekt af typen Textbox.

Kode-snippet:
----------------------------------------------------------------------------------------------------
Open "C:\Users\" & User & "\Documents\" & "TextBody1.ini" For Input As #1   
   
    While EOF(1) = False
        Line Input #1, StrLine
        tbBody1.Text = tbBody1.Text & StrLine & vbNewLine       
    Wend
   
Close #1
---------------------------------------------------------------------------------------------------

Jeg har brug for at fjerne [vbNewLine] efter den sidste indlæste linie.
Er der nogen som har et godt bud på at løse dette?
Avatar billede bvirk Guru
08. februar 2020 - 00:58 #1
Det er en fejl der her floret i 25 år på  nettet, at bruge ... as#1

Jeg ved at det, i den begrænsede brug der nok sker her i praksis, blot må betegnes som en  skønhedsfejl, men  det 30 år gamle stuff har faktisk en kommando til at sikre sig en buffer der ikke er i anvendelse - freefile

Man behøver slet ikke loope og kære sig om at sætte  newlines på  noget hvorfra det er fjernet ved indlæsning.

with createobject("scripting.filesystem").OpenTextFile("C:\Users\" & User & "\Documents\" & "TextBody1.ini",1)
    tbBody1.Text = .ReadAll
end with

Sådan ca.

Af mindre elegante hvis der skulle loopes er afslutende strengafkortning til 1-len, førstegangs undtaget newline foranstilning eller indlæsning til array der afslutningvis joines med newline
Avatar billede bvirk Guru
08. februar 2020 - 01:01 #2
tbBody1.Text=left(tbBody1.Text,len(tbBody1.Text)-1)
Avatar billede Pdahl Juniormester
08. februar 2020 - 17:44 #3
Tak for dit bud, bvirk, men jeg får det ikke rigtigt til at virke - hmmm?

(NB! - Koden er i VBA til Outlook => understøtter ikke OpenTextFile/ (FileSystemObject, selvom jeg har tilføjet forskellige OpenLibrary-referencer
(bl.a. til WORD og EXCEL) ?

Min Procedure ser (efter ændringer) således ud:

[ debug => 'Sub or Function not defined' (=> OpenTextFile) ]
' - - -

Sub ReadTextBody1()
    Const forReading = 1, ForWriting = 2, ForAppending = 8
    Dim fs, f
    Dim User As String

User = Environ$("UserName")
File = Dir("C:\Users\" & User & "\Documents\" & "TextBody1.ini")

If Len(File) > 0 Then

Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile(OpenTextFile("C:\Users\" & User & "\Documents\" & "TextBody1.ini"), ForAppending, TristateFalse)

With CreateObject("scripting.filesystem").OpenTextFile(File, 1) 
    tbBody1.Text = .ReadAll
End With

    ' tbBody1.Text = Left(tbBody1.Text, Len(tbBody1.Text) - 1)

End If
End Sub

' - - -
Avatar billede Pdahl Juniormester
08. februar 2020 - 17:53 #4
eller...?  :-)

With fs.OpenTextFile(File, 1)

    tbBody1.Text = .ReadAll

End With
Avatar billede bvirk Guru
10. februar 2020 - 11:03 #5
' kræver ikke office - såkaldt 'late binding' hvor argumentet til createobject er en progId https://stackoverflow.com/questions/345178/question-about-createobject-in-vb6-vba
Function fileAsText1(filename)
    With CreateObject("Scripting.FileSystemObject").OpenTextFile(filename, 1)
        fileAsText1 = .ReadAll
    End With
End Function

'i en office installtion hvor 'microsoft scripting runtime' er reference
Function fileAsText2(filename)
    Dim fs As New FileSystemObject
    With fs.OpenTextFile(filename, ForReading)
        fileAsText2 = .ReadAll
    End With
End Function

Og undskyld den, i #1, harselerende tone - viden er jo blot defineret som det man ved.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester