[Excel 2000 & Visual Basic 6] Shell commando

Pagina: 1
Acties:

  • DPLuS
  • Registratie: April 2000
  • Niet online
Momenteel gebruik ik de volgende code om gegevens uit een Microsoft Access Database in Excel te krijgen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Private Sub mnuExcel_Click()
    
    Dim db As Database
    Dim rs As Recordset
    Dim strSQL As String
    Dim strTemp As String
    Dim intKanaalnummer As Integer
    intKanaalnummer = FreeFile
    
    Set db = OpenDatabase(App.Path & "\test.mdb")
    strSQL = "SELECT * FROM Telefoonlijst WHERE OwnerId = " & Loginscreen.Id & " ORDER BY Naam"

    Set rs = db.OpenRecordset(strSQL)

    Open App.Path & "\test.csv" For Output As #intKanaalnummer

    Do While Not rs.EOF
        
    strTemp = rs.Fields("Naam") & ";" & rs.Fields("Telefoonnummer") & ";" & rs.Fields("VkNummer") & ";"
    Print #intKanaalnummer, strTemp & vbCrLf;
    rs.MoveNext
    Loop
    
    Close #intKanaalnummer
    
    Shell "C:\Program Files\Microsoft Office\Office\EXCEL.EXE " & App.Path & "\test.csv", vbNormalFocus
End Sub


De bedoeling is dat Excel het comma delimited bestand opent en dat de gegevens dan automatisch in het werkblad ingevoegd worden.

So far so good, maar:

het probleem zit hem in kolom B, ofwel het veld telefoonnummer van de recordset.
Excel converteert nl. het telefoonnummer (dat normaliter als gegevenstype TEXT gezien moet worden), naar een gewoon nummer.

Maw: dit gegeven in het csv-bestand: 01234567890123456789012347 wordt het volgende in Excel: 1,23457E+24.

Nu weet ik dat dit wel een erg lang en fictief nummer is, maar het gaat om het principe: dit veld mag alleen uit nummers bestaan en max. 32 tekens lang.

Hoe kan ik dit nu oplossen?

PS: De gegevens tussen aanhalingstekens zetten in het csv-bestand hielp ook al niet....

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:10
Kan je de (excel) kolom-eigenschappen van die kolom niet via VB zetten?

https://fgheysels.github.io/


  • lexited
  • Registratie: Maart 2001
  • Laatst online: 29-06 09:18
waarom los je dat op deze manier op, moet het een csv file zijn ?
csv heeft geen opmaak codes dus dat gaat niet lukken.
excel openen, en daarna vullen zal de oplossing van je probleem zijn.

ik maak in zulke gevallen altijd gebruik van een template in excel, die maak ik aan, en zet daarna alleen de data erin, dat is makkelijker aanpassen als de lay-ou anders moet (tenzij echt alles anders moet)

via code kan je ook de eigenschappen van de cellen instellen

[ Voor 42% gewijzigd door lexited op 21-11-2003 19:32 ]

1 - 2 - 3


  • DPLuS
  • Registratie: April 2000
  • Niet online
Hoeft niet per sé een CSV bestand te zijn, als ik nu mijn recordset heel makkelijk kon plakken in een werkblad was ik ook tevreden geweest, maar ik geloof niet dat dat gaat....

Verwijderd

DPLuS schreef op 21 november 2003 @ 19:49:
Hoeft niet per sé een CSV bestand te zijn, als ik nu mijn recordset heel makkelijk kon plakken in een werkblad was ik ook tevreden geweest, maar ik geloof niet dat dat gaat....
query maken (voor je recordset dus) .. en gewoon resultaten kopieren plakken? :)

wel een vrij sneue oplossing, maar het werkt iig wel ;)

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 17-08 23:28

pistole

Frutter

DPLuS schreef op 21 november 2003 @ 19:49:
Hoeft niet per sé een CSV bestand te zijn, als ik nu mijn recordset heel makkelijk kon plakken in een werkblad was ik ook tevreden geweest, maar ik geloof niet dat dat gaat....
Daar bestaat toch (in het engels) de mogelijkheid Data -> Import External Data -> New database query voor?

Hoef je niets voor te programmeren...

Ik frut, dus ik epibreer


  • lexited
  • Registratie: Maart 2001
  • Laatst online: 29-06 09:18
als je al data uit een database krijgt krijg je het ook in excel.
kijk even op google, er zijn zat voorbeelden.
het gaat net zo makkelijk als een csv bestand schrijven, even loop-en door de recordset en het staat er

1 - 2 - 3


Verwijderd

ik denk dat dit ook wel helpt:
code:
1
2
strTemp = rs.Fields("Naam") & ";" & chr(34) & rs.Fields("Telefoonnummer") _
   & chr(34) & ";" & rs.Fields("VkNummer") & ";"


Als het goed is voeg je zo een " ( chr(34)=" ) toe voor en achter het telefoonnummer waardoor excel bij de import het telefoonnummer nu als tekst herkent.

[edit 1]
Hmm, schijnt toch niet goed te werken. Excel snapt niet dat tekst tussen "" als tekst ingevoerd moet worden ipv een getal. Je kan evt. een spatie voor het tel.nr. toevoegen als dat niet uitmaakt voor de uitlijning in excel.

[edit 2]
Dit trucje (met de =) werkt wel (alleen geschikt voor excel). Erg netjes is het niet maar het werkt.
code:
1
2
strTemp = rs.Fields("Naam") & ";=" & chr(34) & rs.Fields("Telefoonnummer") _
   & chr(34) & ";" & rs.Fields("VkNummer") & ";"

[ Voor 65% gewijzigd door Verwijderd op 21-11-2003 20:53 ]

Pagina: 1