Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: txt-bestand maken via VBA  (gelezen 8508 keer)

0 leden en 1 gast bekijken dit topic.

Offline buks

  • Ervaren lid
  • ***
  • Berichten: 313
  • Oplossing.be
txt-bestand maken via VBA
« Gepost op: 01 januari 2007, 21:39:35 »
Vooreerst een gezond en voorspoedig 2007.

Gisteren had ik een bestandje gemaakt met de bedoeling om deze gegevens in html-code weg te schrijven naar een txt-bestand. Deze wordt dan ingelezen in mijn website.

Gisteren werkte dit perfect maar vandaag gebruik ik opnieuw hetzelfde bestand (zonder iets te hebben aangepast) en staat er plots voor iedere regel in het tekstbestand volgende :      "  

Mijn bestand is als volgt opgesteld :
 - kolom A : datum
 - kolom B : 2 of 3 (is van belang voor de opmaak in mijn website)
- kolom C : tekst

Mijn VBA-code :

Public Sub DataSchrijvenArchief()
Dim Bestandnr As Integer
Bestandnr = FreeFile
Open "d:\EasyPHP\www\archief.txt" For Binary As Bestandnr

Dim Rij As Integer
Range("A1").Select
Selection.End(xlDown).Select
Rij = Range("A1").End(xlDown).Row

Dim Waarde1, Waarde2 As String
Dim Klasse As Integer
Dim i As Integer
For i = 0 To Rij - 1
    Klasse = Range("B" & Rij - i).Value
    Waarde1 = "<TR><TD CLASS=" & Chr(34) & "k1" & Chr(34) & ">" & Range("A" & Rij - i).Value & "</TD>"
    Waarde2 = "<TD CLASS=" & Chr(34) & "k" & Klasse & Chr(34) & ">" & Range("C" & Rij - i).Value & "</TD></TR>" & vbNewLine
    Put Bestandnr, , Waarde1
    Put Bestandnr, , Waarde2
Next
Close Bestandnr
End Sub


Iemand enig idee wat er plots het probleem is?

Alvast bedankt
Win 7 Home - Intel Core i3 CPU 550 @ 3.20GHz - Basicnet XL - IE 9 - MS Office 2010 - Norton Internet Security 2012

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.280
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re:txt-bestand maken via VBA
« Reactie #1 Gepost op: 01 januari 2007, 22:03:46 »
Buks, ik weet niet zeker òf het er iets mee te maken heeft, maar volgens mij is de schuldige je 'vbnewline' in waarde2. Als je een carriage return (chr(13)) of line feed (chr(10)) naar een text-bestand schrijft, wordt dit omgezet in een .

Groet, Leo
______________________________

Groet, Leo

Offline buks

  • Ervaren lid
  • ***
  • Berichten: 313
  • Oplossing.be
Re:txt-bestand maken via VBA
« Reactie #2 Gepost op: 02 januari 2007, 21:00:37 »
Ik had eerst mijn code gemaakt zonder vbnewline erin en het werkte goed maar alles stond natuurlijk op één rij in het txt-bestand.  Dan heb ik vbnewline toegevoegd en alles werkte perfect. Ik heb het dan enkele malen getest zonder probleem.

De volgende dag ging ik dan het txt-bestand integreren in mijn website en toen ik een eerste keer de code liet lopen was het probleem begonnen.

Ik vind het alleen zeer raar dat het de dag dat ik het gemaakt heb wel goed werkte en de daarop volgende dag dan weer niet.  

Vandaag nog steeds hetzelfde probleem.

Als ik in mijn code de vbnewline eruit haal krijg ik volgende in mijn txt-bestand :

"en een hele reeks rare (chineese) tekens

Ik heb er dan maar vlug weer mijn vbnewline in gezet, zodat het leesbaar is.  ;D

Ik zal nog enkele zaakjes proberen waaraan ik vandaag gedacht heb.

Ik laat alvast mijn resultaat weten, maar indien er toch iemand een oplossing zou vinden voor mij, laat het dan gerust weten

groetjes
Buks
Win 7 Home - Intel Core i3 CPU 550 @ 3.20GHz - Basicnet XL - IE 9 - MS Office 2010 - Norton Internet Security 2012

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.280
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re:txt-bestand maken via VBA
« Reactie #3 Gepost op: 02 januari 2007, 22:59:40 »
Buks, ik vond dit 'Een tekst-file met kolommen' met wat surfen. Wellicht helpt dit je verder? Ik heb een ander vermoeden dat je met het openen als 'Binary' ook niet goed zit... ???

Groet, Leo



toevoeging:
Ik heb vanacht nog ff liggen nadenken over het 'binary' gedeelte... 8) en vervolgens vanochtend eea opgezocht in een dik Excel programmeerboek.
Volgens mij moet je het binary vervangen voor 'output' dan moet het goed gaan. Helaas stond er geen verklaring in op welk moment je gebruik moet maken van open als binary. :(

Maar.... voordat je dat doet, zou je eerst ´ns kunnen testen wat je huidige code doet als je je bestaande txt bestandje delete! Ik heb het idee dat je code het DAN weer wel goed doet (dus alleen bij de 1e keer openen en schrijven!). - Dan heb je namelijk antwoord op je vraag waarom het eerst wel goed ging... ;) -
Dit zou dan komen omdat dan de inhoud leeg is en er dus niets binair omgezet wordt. Pas bij de 2e keer runnen van je code wordt de inhoud naar binair omgezet en krijg je je probleem met je  (vbnewline-vierkantje)...
Nog even vwbt het ....  VbNewLine heeft dus wel een ASCII waarde (10) en daarmee ook een binaire waarde (00001010) maar geen menselijke leesbaar character. Daarom wordt er dus in een txt-bestand een  getoond!  :)

En dan tot slot nog een stuk code dat ik uit eerder genoemd boek ooit zelf heb gebruikt om een bepaalde selectie uit mijn WB weg te schrijven naar een txt-bestand... (merk op dat er hier gebruik gemaakt wordt van de bestandsmodus 'Append') Sub ExportSelectedRange()
'bron: MS-office handboek, programmeren in Excel 2003
   
'deze code maakt een csv of txt-textbestand van een selectie in een worksheet
   
    Range("C71:P71").Select
   
    Dim FileName As String
    Dim NumRows As Long
    Dim NumCols As Integer
    Dim r As Long
    Dim c As Integer
    Dim Data As String
    Dim ExpRng As Range
   
    Set ExpRng = Selection
    NumCols = ExpRng.Columns.Count
    NumRows = ExpRng.Rows.Count
    FileName = Range("rngWagennrPad") & "ZwarteLijst.txt"
    Open FileName For Append As #1
        For r = 1 To NumRows
            For c = 1 To NumCols
                Data = ExpRng.Cells(r, c).Value
                'If IsNumeric(Data) Then Data = Val(Data) 'liever een textstring -> geeft cijfers achter de komma!
                If IsEmpty(ExpRng.Cells(r, c)) Then Data = ""
                'de 2e write is zonder ';' hierdoor wordt er automatisch een nieuwe regel gemaakt!
                If c <> NumCols Then
                    Write #1, Data;
                Else
                    Write #1, Data
                End If
            Next c
        Next r
    Close #1

End Sub
______________________________

Groet, Leo

Offline buks

  • Ervaren lid
  • ***
  • Berichten: 313
  • Oplossing.be
Re:txt-bestand maken via VBA
« Reactie #4 Gepost op: 03 januari 2007, 21:20:47 »
Leo,

Alvast bedankt voor al uw denk en opzoek werk.  Ik denk dat ik ook een oplossing gevonden heb, maar eerst nog eens alles overlopen.

1) Wat betreft het deleten van het txt-bestandje helpt het niks, want dit had ik ook reeds geprobeerd.  Het vreemde is wel dat ik het de eerste dag verschillende maal getest heb maar nooit geen probleem gehad heb, maar dan wel vanaf de 2e dag.  Volgens mij heb ik niets gewijzigd voor ik het de laatste malen getest heb en mijn dag afgesloten heb (voor ik stop wil ik altijd zeker zijn dat het werkt, zodat ik de volgende keer geen problemen heb, tenzij het "project" natuurlijk nog niet afgewerkt is  ;) ).

Het verschil betreffende "binary" dat ik gevonden heb is dat in de andere gevallen steeds extra code wordt meegeschreven.  Dit heb ik ook nog terug gevonden :

Sequentiële toegang (de werkstanden Input, Output en Append) wordt gebruikt voor het schrijven van tekstbestanden, zoals foutlogboeken en rapporten.
Directe toegang (de werkstand Random) wordt gebruikt voor het lezen en schrijven van gegevens van en naar een bestand, zonder dat dit bestand wordt gesloten. Direct toegankelijke bestanden bewaren gegevens in records, waardoor u eenvoudig en snel informatie kunt vinden.
Binaire toegang (de werkstand Binary) wordt gebruikt voor het lezen of schrijven van en naar elke willekeurige byte-positie in een bestand. Dit is bijvoorbeeld het geval bij het opslaan of weergeven van een bitmap-afbeelding.

2)  Binary wijzigen in Output: mijn open functie heb ik deze avond dan eens gewijzigd naar :

Open "d:\EasyPHP\www\archief.txt" For Output As Bestandnr

Het gevolg hiervan was dat de instructie "put", om mijn gegevens weg te schrijven, niet meer werkte.  Bij output moet je dan "print #nrbestand, WegTeSchrijvenWaarde" gebruiken.

Na deze wijzigingen werkte het bestand nu wel weer.  Ik heb het nu ook zo opgeslaan en zal het morgen nog eens opnieuw testen om te zien of ik niet hetzelfde probleem krijg  ;D .

Daarnaast heb ik gisterenavond ook nog een oplossing gevonden tussen mijn oude bestanden, maar voor het overzicht te behouden zal ik deze in een nieuwe post plaatsen.
Win 7 Home - Intel Core i3 CPU 550 @ 3.20GHz - Basicnet XL - IE 9 - MS Office 2010 - Norton Internet Security 2012

Offline buks

  • Ervaren lid
  • ***
  • Berichten: 313
  • Oplossing.be
Re:txt-bestand maken via VBA
« Reactie #5 Gepost op: 03 januari 2007, 21:35:10 »
Bij deze dan mijn oplossing die ik gisterenavond gevonden heb en die vandaag ook nog werkt !!!  ;)

Ik dacht dat ik het toen ergens uit een naslagwerk betreffende VB gehaald hebt, maar blijkbaar werkte het ook in VBA.

Public Sub Test3()
Dim FSO, LogFile As Object
Dim strLogFileName As String
Const ForAppending = 8
Dim i As Integer
Dim Waarde1, Waarde2 As String
Dim Klasse As Integer
Dim Rij As Integer
Range("A1").Select
Selection.End(xlDown).Select
Rij = Range("A1").End(xlDown).Row

strLogFileName = "d:\EasyPHP\www\testarchief3.txt"
Set FSO = CreateObject("scripting.filesystemobject")
Set LogFile = FSO.opentextfile(strLogFileName, ForAppending, True)

For i = 0 To Rij - 1
    Klasse = Range("B" & Rij - i).Value
    Waarde1 = "<TR><TD CLASS=" & Chr(34) & "k1" & Chr(34) & ">" & Range("A" & Rij - i).Value & "</TD>"
    Waarde2 = "<TD CLASS=" & Chr(34) & "k" & Klasse & Chr(34) & ">" & Range("C" & Rij - i).Value & "</TD></TR>" & vbNewLine
    LogFile.writeline (Waarde1 & Waarde2)
Next

Set FSO = Nothing
LogFile.Close
End Sub

Deze code plaats wel telkens de waarde bij achteraan in de file.  Maar normaal zou ik het bestand toch telkens knippen en plakken in een andere directory.

De vorige oplossing overschrijft het bestand telkens.

Dit is de oplossing die ik gevonden heb, maar indien de oplossing via "output" ter vervanging van "binary" blijft werken, zal ik deze gebruiken.

Nogmaals bedankt voor je hulp Leo

groetjes
Buks

PS : ik laat morgen wel nog iets weten of de code nog correct werkt en ik zal alvast mijn oorspronkelijke code ook wel nog enkele keren onderzoeken want ik ben te nieuwsgierig wat het probleem is  :)
Win 7 Home - Intel Core i3 CPU 550 @ 3.20GHz - Basicnet XL - IE 9 - MS Office 2010 - Norton Internet Security 2012

Offline buks

  • Ervaren lid
  • ***
  • Berichten: 313
  • Oplossing.be
Re:txt-bestand maken via VBA
« Reactie #6 Gepost op: 04 januari 2007, 21:44:24 »
Zoals belooft het resultaat van vandaag :

De code met "Output" werkt ook nog steeds perfect.

groetjes
Buks
Win 7 Home - Intel Core i3 CPU 550 @ 3.20GHz - Basicnet XL - IE 9 - MS Office 2010 - Norton Internet Security 2012

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.280
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re:txt-bestand maken via VBA
« Reactie #7 Gepost op: 04 januari 2007, 22:46:44 »
'k ben d'r blij om!  ;D
Tot een volgend 'probleem'. ('t was een leukertje trouwens!!!)

Groet, Leo
______________________________

Groet, Leo

 


www.combell.com