Problemet er at Excel, når jeg åbner filen, gætter på at kolonne 1 række 3 er et tal og derfor formaterer efter det (også selv om andre rækker i netop denne kolonne indeholde bogstaver). Hvis jeg derfor gemmer igen har jeg mistet data, da Excel ikke kan repræsenterer så stort et tal. Smart!
Kan jeg sætte Excel op til altid at åbne .csv filer som tekst? Løsningen skal gerne være en engangs opsætning, da jeg har masser af filer der skal rettes løbende.
Så må vi jo tvinge excel til at gøre det. For at gøre det skal vi bruge en workbook der altid er åben når excel åbnes. Dette kunne være Person.xls
Opret et class-modul (Class1) i denne og indsæt følgende
Public WithEvents MyApp As Application
Private Sub myApp_WorkbookOpen(ByVal Wb As Workbook) If InStr(1, Wb.Name, ".csv") > 0 Then Wb.Sheets(1).Cells.Clear Wb.Sheets(1).Cells.NumberFormat = "@" getfile (Wb.FullName) End If End Sub
Sub getfile(FileIn) Dim F1 As Long Dim X As Long Dim strText As String Dim Temp As Variant
F1 = FreeFile Open FileIn For Input As #F1 While Not EOF(F1) X = X + 1 Line Input #F1, strText Temp = Split(strText, ";") Range("A" & X).Resize(, UBound(Temp)) = Temp Wend Close #F1 End Sub
OPret så et almindelig modul i den og indsæt følgende
Dim X As New Class1
Sub auto_open() Set X.MyApp = Application End Sub
Gem person.xls og kør makroen auto_open
Nu kan du dobbelklikke på en csv-fil Den vil åbne sig og alt vil være tekst. Dette sker ved at filen åbnes, alt slettes og filen indlæses som textfil linie for linie.
Kunne man ikke lave den sådan, at Excel starter en makro i stedet for som udfører hvad "supertekst" skriver? Så er den jo 100% robust over for sjove tegn og linieskift.
Set csv = CreateObject("excel.Application") With csv .Workbooks.Open (filnavn)
For ræk = 1 To 4 linie = .Cells(ræk, 1) p = InStr(linie, ";") If p > 0 Then With ActiveWorkbook.Sheets(1) .Cells(ræk, 1) = Left(linie, p - 1) .Cells(ræk, 2) = Mid(linie, p + 1) End With End If Next ræk End With csv.Quit Set csv = Nothing
Bidrag 2: Rem Anvendelse af Import-Guide Rem ========================== Resultat efter import 'kontonummer Value 'A33333333333333333333 100 'B33333333333333333333 101 '333333333333333333333 102 'uden markering af tal som tekst
Sub konv2() filNavn = Application.GetOpenFilename 'vælg CSV-fil importerCSV filNavn
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.