• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Werkblad export naar CVS minus regel 1

Status
Niet open voor verdere reacties.

tobi-wan

Gebruiker
Lid geworden
14 sep 2005
Berichten
42
Hoi,

Voor het bijhouden van een telefoonboek in een bedienpost van een telefooncentrale heb ik een CSV file nodig. Nou laat ik dat bijhouden door de klant in een excel file met daar in een button met een export en opslaan functie.

Om e.e.a. nou nog een beetje netter te maken heb ik eigenlijk 2 vragen:

  • -Ik heb problemen met de eerste regel, zeg maar de header. Nou heb ik dat opgelost door op de eerste regel alleen opmerkingen te gebruiken. maar dat werkt niet echt lekker.
    Eigenlijk wil ik een export maken van de hele sheet minus regel 1.
  • -ik wil de button eigenlijk ergens in een werkbalk plaatsen.

(zie bijgevoegde file)

Alvast bedankt voor de hulp,

Tobi
 

Bijlagen

Laatst bewerkt:
Ik heb er deze macro van gemaakt:

Code:
Sub opslaan_csv()
  Application.DisplayAlerts = False
  Application.ScreenUpdating = False
    
  c0 = [gegevensblad!c2]
  ThisWorkbook.Sheets("csvphonebook").Copy
  With Workbooks(Workbooks.Count)
    .Sheets(1).UsedRange.Offset(1).Copy .Sheets(1).Range("A1")
    .SaveAs c0 & "phonebook.csv", xlCSV
    .Close
  End With
    
  Application.ScreenUpdating = True
  Application.DisplayAlerts = True
End Sub

We wisten natuurlijk al dat Microsoft het niet zo nauw neemt met privacy van mensen en gegevens, maar hun eigen interne telefoonlijst op Internet zetten lijkt me wat overdreven. Suggestie: haal je bestand hier weg.

Een knop maken in de werkbalk doe je met :
cursor in menubalk/rechtermuisknop/aanpassen/macro
 
Bedankt voor de snelle reactie. Het werkt.
Ook de knop op de werkbalk werkt.

Is het ook mogelijk om de bestaande opslaan knop uit te schakelen om daarmee de gebruiker te wingen om de macro te gebruiken
 
Is niet nodig als je in deze gebeurtenisprocedure van het Excel bestand dezelfde code zet als ik eerder aanreikte.

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub

Eigenlijk is die extra knop op de werkbalk dan niet nodig, want iedere keer als de gebruiker het bestand opslaat, wordt het bestand als csv-bestand weggeschreven.
 
Dat snap ik niet, want ik heb toch nog steeds de knop met de macro nodig om op te slaan?
Als ik alleen het excel document save dan wordt er toch geen csv aangemaakt?
 
Wel als je mijn suggestie gebruikt: beforesave vind plaats voordat het bestand wordt opgeslagen als het wordt opgeslagen.
 
Ik heb de sub opslaan verwijderd en daar jou regel geplaatst met private sub.
Maar er gebeurt niets. hij slaat wel op maar maakt geen csv aan.

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Application.DisplayAlerts = False
  Application.ScreenUpdating = False
    
  c0 = [gegevensblad!c2]
  ThisWorkbook.Sheets("csvphonebook").Copy
  With Workbooks(Workbooks.Count)
    .Sheets(1).UsedRange.Offset(1).Copy .Sheets(1).Range("A1")
    .SaveAs c0 & "phonebook.csv", xlCSV
    .Close
  End With
    
  Application.ScreenUpdating = True
  Application.DisplayAlerts = True
End Sub
 
Je moet die workbook_beforesave in de module ThisWorkbook zetten (VBEditor openen (Alt-F11), dubbelklik op Thisworkbook en daar de code plaatsen).

Zie bijlage
 

Bijlagen

Laatst bewerkt:
Dat was de oplossing!! Weer een hoop geleerd vandaag.

Bedankt voor je hulp
 
hoi ik wil mijn bovenstaande vraag uitbreiden met een 2e csv bestand

hoi ik wil mijn bovenstaande vraag uitbreiden met een 2e csv bestand met daarin alleen de kolommen met voornaam telefoonnummer en email-adres.

ik ben al aan de slag geweest met usedrange.columns maar daar kom ik niet verder mee.
 
Gebruikmakende van een deel de al beschikbare code van snb
Roep deze procedure aan dmv
Code:
call opslaan_csv2
in je bestaande thisworkbook_beforesave gebeurtenisprocedure

Code:
Sub Opslaan_csv2()
Dim lngRow As Long
Dim strPath As String
    
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    
    strPath = Sheets("gegevensblad").Range("C2")
    Sheets.Add    

    With Sheets("csvphonebook")
        lngRow = .Range("A2", .Range("A65535").End(xlUp)).Rows.Count
        Union(.Range("A2").Resize(lngRow), _
              .Range("B2").Resize(lngRow), _
              .Range("F2").Resize(lngRow)) _
            .Copy _
                Destination:=ActiveSheet.Range("A1")
    End With
    'naar nieuwe werkmap
    ActiveSheet.Move

    With Workbooks(Workbooks.Count)
        .SaveAs strPath & "phonebook2.csv", xlCSV
        .Close
    End With
    
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

End Sub

wil je overigens ook de achternaam, dan zul je nog even
Code:
.Range("C2").Resize(lngRow), _
aan de union statement moeten toevoegen

gr,
Mark.
 
Procedure aanroepen lukt nog niet

Mark,

Ik heb de code geplaatst, hij plaatst het automatisch in Algemeen, OpslaanCSV_2.

Ik kan het niet plaatsen in workbook beforesafe.

Doe ik iets verkeerd of moet ik nog iets doen om de code aan te roepen?Bekijk bijlage phonebook.xls
 
Beste Tobi,

Ik denk dat het werkt als je deze code in je thisworkbook module plakt
(vervang alle oude code)

succes.

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  
  Application.DisplayAlerts = False
  Application.ScreenUpdating = False
    
  c0 = [gegevensblad!c2]
  ThisWorkbook.Sheets("csvphonebook").Copy
  With Workbooks(Workbooks.Count)
    .Sheets(1).UsedRange.Offset(2, 1).Copy .Sheets(1).Range("A1")
    .SaveAs c0 & "phonebook.csv", xlCSV
    .Close
  End With
    
  'roep andere opslaan csv aan
  Call Opslaan_csv2

  Application.ScreenUpdating = True
  Application.DisplayAlerts = True
End Sub

Sub Opslaan_csv2()
Dim lngRow As Long
Dim strPath As String
    
    strPath = Sheets("gegevensblad").Range("C2")
    Sheets.Add

    With Sheets("csvphonebook")
        lngRow = .Range("A2", .Range("A65535").End(xlUp)).Rows.Count
        Union(.Range("A2").Resize(lngRow), _
              .Range("B2").Resize(lngRow), _
              .Range("F2").Resize(lngRow)) _
            .Copy _
                Destination:=ActiveSheet.Range("A1")
    End With
    'naar nieuwe werkmap
    ActiveSheet.Move

    With Workbooks(Workbooks.Count)
        .SaveAs strPath & "phonebook2.csv", xlCSV
        .Close
    End With

End Sub
 
Opgelost, ik snap nu ook hoe je een reeks met kolommen kan maken

Mark,

Alles werkt

Opgelost, Ik snap nu ook hoe je een reeks met kolommen kan maken.'
Weer wat geleerd. Bedankt voor de snelle service
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan