Avatar billede brilleabe Nybegynder
12. oktober 2003 - 10:51 Der er 13 kommentarer og
1 løsning

Data Eksport fra Excel til .csv og .htm

Jeg har et ark som automatisk står og samler data fra en extern data kilde.

Problemet er at jeg gerne vil gemme et ark løbende i .csv filer og et andet ark som .html. Det skal gemmes i hver sin mappe. Navnene kommer fra celler i et tredie ark.

Begge dele skal gøres via en timer som jeg allerede har - så det er ikke det som er problemet.

Jeg har prøvet at lave en makro som gemmer, problemet er at når jeg har gemt i csv eller html så bliver mit 'oprindelige' ark lukket og det 'nye' ark er åbent - og det er jo ikke det som er meningen...
Avatar billede stefanfuglsang Juniormester
12. oktober 2003 - 11:10 #1
SaveCopyAs dur desværre ikke - kan ikke ændre filformat.
Hvad med at lave en ny Workbook:

Worksheets("Ark1").UsedRange.Copy
Set newSheet = Worksheets.Add
newSheet.Range("A1").PasteSpecial Paste:=xlValues
Avatar billede brilleabe Nybegynder
12. oktober 2003 - 11:16 #2
Det giver mig bare et nyt ark - det løser ikke rigtigt mit problem.
Avatar billede stefanfuglsang Juniormester
12. oktober 2003 - 19:20 #3
Jeg fik fat i et forkert eksempel - ideen var at lave en ny workbook:
Worksheets("Ark1").UsedRange.Copy
Set newBook = Workbooks.Add
newBook("ark1").Range("A1").PasteSpecial Paste:=xlValues
... saveas....
- har ikke testet det, men det må være noget i den stil
Avatar billede brilleabe Nybegynder
12. oktober 2003 - 19:23 #4
Så er jeg med. Forstod det heller ikke.

Hvis jeg laver en ny workbook med det ark som jeg vil gemme, så kan jeg vel gemme det i det ønskede format og så 'tvinge' den nye workbook til at lukke sig selv bagefter (og genåbne den gamle)?
Avatar billede bak Forsker
12. oktober 2003 - 20:24 #5
her er to makroer der hver især skal bruge filnavn og område.
Den ene laver en htmlfil af området og den anden en semicolonsepareret textfil.
Avatar billede bak Forsker
12. oktober 2003 - 20:24 #6
Sub ExportToHTML(Filename As String, Rng As Range)
'    Dim ws As Worksheet
    Dim Filename As Variant
    Dim TDOpenTag As String, TDCloseTag As String
    Dim CellContents As String
    Dim Rng As Range
    Dim r As Long, c As Integer
   
'  Open the text file
    Open Filename For Output As #1
   
'  Write the <TABLE> tag
    Print #1, "<TABLE BORDER=1 CELLPADDING=3>"
   
'  Loop through the cells
    For r = 1 To Rng.Rows.Count
        Print #1, "<TR>"
        For c = 1 To Rng.Columns.Count
            TDOpenTag = "<TD ALIGN=RIGHT>"
            TDCloseTag = "</TD>"
            If Rng.Cells(r, c).Font.Bold Then
                TDOpenTag = TDOpenTag & "<B>"
                TDCloseTag = "</B>" & TDCloseTag
            End If
            If Rng.Cells(r, c).Font.Italic Then
                TDOpenTag = TDOpenTag & "<I>"
                TDCloseTag = "</I>" & TDCloseTag
            End If
            CellContents = Rng.Cells(r, c).Text
            Print #1, TDOpenTag & CellContents & TDCloseTag
        Next c
        Print #1, "</TR>"
    Next r
'  Close the table
    Print #1, "</TABLE>"

'  Close the file
    Close #1
   
'  Tell the user
    MsgBox Rng.Count & " cells exported to " & Filename
End Sub

Sub EksportAsCSV_DK(strFileName As String, rngOmr As Range)
Const Delim    As String = ";"  'afgrænser (delimiter)
Dim y          As Long          'tæller
Dim x          As Long          'tæller
Dim strTemp    As String        'streng til de enkelte rækker
Dim lRows      As Long          'antal rækker
Dim lCols      As Long          'antal kolonner
Dim lFno      As Long          'fil nummer

lFno = FreeFile
lRows = rngOmr.Rows.Count
lCols = rngOmr.Columns.Count
Open strFileName For Output As #lFno

For x = 1 To lRows
    strTemp = ""
    For y = 1 To lCols
        strTemp = strTemp & rngOmr(x, y).Text
        If y < lCols Then
            strTemp = strTemp & Delim
        Else
            Print #lFno, strTemp
        End If
    Next

Next
Close #lFno

End Sub
Avatar billede brilleabe Nybegynder
12. oktober 2003 - 20:29 #7
>>stefanfuglsagn,
bakser lige lidt med din. (den har givet mig en masse gode ideer..)

>>bak,
Dine bliver også lige testet igennem (og de plejer jo at virke)
Avatar billede brilleabe Nybegynder
12. oktober 2003 - 20:50 #8
Sub GemSom()
   
    Dim FilNavn As String
   
    Sheets("CRH").Select
    FilNavn = ("web")
    Sheets("CRH").Copy
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Application.CutCopyMode = False
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=FilNavn, FileFormat:= _
        xlHtml, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
        , CreateBackup:=False
   
    ActiveWindow.Close
Application.DisplayAlerts = True
End Sub

Sidder og leger med denne kode som jeg har tyvstjålet fra kabbak (sorry bak, men for en novise som mig lignede det noget jeg kunne gå til - dit ser meget komplekst ud). Har lidt problemer med at hente filnavn fra en celle (der er tale om bla. en dato/tidspunkt.) nogen bud?
Avatar billede bak Forsker
12. oktober 2003 - 21:34 #9
Mit er da ikke komplext :-)
du kopierer da bare koden ind i et modul og kalder sub'erne hver for sig

Sub test
Dim fil_html as string, Fil_Csv as String, Rng as Range
Fil_html= "c:\test.html"
Fil_csv = "c:\test.csv"
set Rng = range("A1:H100")

ExportToHTML Fil_html , Rng
EksportAsCSV_DK Fil_scv, Rng
End Sub
Avatar billede bak Forsker
12. oktober 2003 - 21:37 #10
mht dato-tid tror jeg ikke at excel accepterer ":" i filnavn
Avatar billede brilleabe Nybegynder
12. oktober 2003 - 22:27 #11
Det ser godt ud.

mht tid hvade jeg tænkt mig noget ala 2003-10-12 2219.csv

Men jeg kan ikke få det til at virke. Jeg har en makro som skriver +now() i en celle og derefter paster indholdet af celle ind i 'sig selv' med paste special, value. Det virker som et 'tidsstempel' hvergang makroen kører.
Jeg har lavet formatereingen til 2003-10-12 2219. Men det virker ikke. (det virker fint hvis jeg bare skriver noget i cellen - så det er fordi makroen ikke kan håndterere formatet. (hvis jeg ændre format på cellen til generel eller nummer får jeg bare et tal). Så jeg har brug for at få skrevet dato+tid i en celle som et nummer og ikke som en 'værdi'.

Alt afhænger af øjene der ser - Som du nok har luret er jeg stadig begynder og jeg vil helst forstå det jeg laver - og jeg er bare ikke dygtig nok til at forstå det hele...
Men jeg har indtil nu lært meget af dig;-)
Avatar billede bak Forsker
12. oktober 2003 - 22:45 #12
FilNavn = range("A1").text

så får du den formaterede udgave :-)
Avatar billede brilleabe Nybegynder
13. oktober 2003 - 21:08 #13
>>bak.
Det var det der skulle til! jeg havde fumlet rundt med .value i en rum tid...
Jeg ser på resten i aften, så vender jeg tilbage.
Avatar billede brilleabe Nybegynder
14. oktober 2003 - 20:33 #14
I skal begge have tusiend tak for hjælpen.
>> stefanfuglsang får 30 for at sætte mig i gang.
>> bak får 30 for at følge mig til dørs.

Håber i vil hjælpe mig igen en anden gang.

/brille
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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