Avatar billede Thomas Knudsen Nybegynder
15. december 2003 - 18:41 Der er 16 kommentarer og
1 løsning

Konvertere CSV-fil til Distributionsliste

Håber det er rette gruppe.
Nyhedsbrevs-modul.
Gemmer via webinterface i ASP i en database alle de kunder som skriver sig på listen. Når jeg skal bruge listen, aktiveres manuelt en ASP side, som opretter en kommasep. fil eller lign. og sender den som en email til sekretæren

Nu vil hun gerne lave en email i Outlook og så sende som BCC til alle på listen. Men hvordan får jeg Outlook til at lave en distributionsliste ud af den fil? En makro havde jeg forestillet mig, således at det bliver så nemt som muligt for sekretæren.
Jeg er totalt ukendt i VB verdenen, så gerne løsning istedet for råd. Derfor også de mange points.

Hurtigt og brugbart svar belønnes med flere points
Avatar billede martin_moth Mester
15. december 2003 - 18:54 #1
Du kan ikke afgive flere points end du allerede har afgivet ;o)

Vis lige hvordan adresserne står i csv-filen

Hvis jeg skulle lave det ville jeg lave det i VB - har du selv VB, eller skal det være en macro?
Avatar billede Thomas Knudsen Nybegynder
15. december 2003 - 19:04 #2
CSV filen har jeg ikke endnu, men skrev det fordi det regnede jeg ikke med blev et problem.
Men det bliver vel bare noget med en masse emails adskildt af ",". Der gemmes ikke noget andet i databasen. Evt. kunne jeg også bare lave en ny linje i tekstfilen istedet for komma.

VB eller macro. Du bestemmer, men det skal bare være nemt for hende at aktivere din kode, lave en email og så klikke på Til, vælge distributionslisten og klikke Send.
Avatar billede martin_moth Mester
15. december 2003 - 19:17 #3
Det kræver at du har VB for at du kan kompilere koden til en exe - har du det?
Avatar billede Thomas Knudsen Nybegynder
15. december 2003 - 19:21 #4
jeg har intet med VB at gøre ;) så hvis du tænker på en compiler, så har jeg ikke nogen. Beklager.

Kan du lave en exe fil som evt. henter en tekstfil i den mappe som den ligger i og så opretter Distributionslisten? Evt. kan jeg få en ven til at kompilere den, da det jo er rarest at se hvad den egentlig laver  :)
Avatar billede martin_moth Mester
15. december 2003 - 19:25 #5
Så skal jeg helt præcist have at vide hvordan csv-filen ser ud - skal vi sige en emailadresse pr linie?
Avatar billede martin_moth Mester
15. december 2003 - 19:28 #6
Har det klar om 15 min, skal lige vaske op - hun insisterer!
Avatar billede Thomas Knudsen Nybegynder
15. december 2003 - 19:32 #7
en adresse pr linje er helt perfekt..
15 min? jamen du er pt. min nye gud  *lol*
Avatar billede martin_moth Mester
15. december 2003 - 19:32 #8
PS: Hedder filen altid det samme og ligger den altid det samme sted, elelr skal programmet kunen browse efter filen?
Avatar billede martin_moth Mester
15. december 2003 - 20:00 #9
Opret en form. Smid en textbox (Text1) og en knap (Command1) på formen

Copy-paste følgende kode:

Option Explicit
Dim Adresser() As String

Private Sub Command1_Click()
  If ReadCSV(Text1.Text) = True Then
    Call SendEmail
  Else
    MsgBox "Der opstod en fejl ved at læse filen " & Text1.Text & ". Skyd programmøren."
  End If
 
End Sub

Private Sub Form_Load()
  Command1.Caption = "opret e-mail"
  Text1.Text = "C:\test.csv" 'RETTES
End Sub

Private Sub SendEmail()
  Dim Outlook As Outlook.Application
  Dim mail
  Dim MAPI
  Dim i As Integer
  Dim strAdresser As String
  Set Outlook = CreateObject("Outlook.Application")
  Set MAPI = Outlook.GetNameSpace("MAPI")
  Set mail = Outlook.CreateItem(0)
  strAdresser = Adresser(LBound(Adresser))
  For i = LBound(Adresser) + 1 To UBound(Adresser)
    strAdresser = strAdresser & "," & Adresser(i)
  Next i
  mail.Recipients.Add (strAdresser)
  mail.Subject = "Hejsa" 'RETTES
  mail.Body = "Endnu en mail - øv" 'RETTES
  mail.send
  Set Outlook = Nothing
  Set mail = Nothing
End Sub


Private Function ReadCSV(Filename As String) As Boolean
  ReadCSV = False
  Dim FilNummer As Integer
  Dim Tæller As Integer
  FilNummer = Freefile
  Open Filename For Input As #FilNummer
  Do While Not EOF(FilNummer)
    ReDim Preserve Adresser(Tæller)
    Line Input #FilNummer, Adresser(Tæller)
    Tæller = Tæller + 1
  Loop
  Close #FilNummer
  ReadCSV = True
End Function

Jeg kan godt kompilere til en sex og sende hvis du giver en e-mail adresse
Avatar billede martin_moth Mester
15. december 2003 - 20:01 #10
Du skal lige rette
  Call SendEmail
til
  SendEmail
Avatar billede Thomas Knudsen Nybegynder
15. december 2003 - 20:07 #11
Du må gerne lave den .exe, for jeg stoler på dig.
MEN....som jeg læser koden, "mail.Recipients.Add (strAdresser)
", så sendes de ikke som BCC?

Og fungerer det i Outlook, eller sender hun emaileen via din exe?
For så mister hun jo en masse formateringsmuligheder.
Jeg spørger sikkert dumt, ved det, men skal være helt sikker på det helst fungerer som en distributionsliste via Til-knappen.
Avatar billede martin_moth Mester
15. december 2003 - 20:11 #12
Du har ret - havde overset det med BCC

Ret fra
  mail.Recipients.Add (strAdresser)
til
  mail.bcc stradresser

Outlook vil spørge om det eksterne program må oprette forbindelse når du køre programmet. Du kan evt. droppe
  mail.send

Lav en test-CSV med dine egne emailadresser til at teste

En mailadresse?
Avatar billede martin_moth Mester
15. december 2003 - 20:16 #13
På den anden side - få hellere din ven til at kompilere det - og husk at sige til ham, at han skal oprette en reference til MicroSoft Outlook (jeg har ikke denne reference på min PC, og gider ikke rode med det)
Avatar billede martin_moth Mester
15. december 2003 - 20:20 #14
Du kan også meget simpelt kopiere alle adresserne til clipboard - her en ny version af progarammet:

Option Explicit
Dim Adresser() As String

Private Sub Command1_Click()
  If ReadCSV(Text1.Text) = True Then
    CopyToClipboard
  Else
    MsgBox "Der opstod en fejl ved at læse filen " & Text1.Text & ". Skyd programmøren."
  End If
 
End Sub

Private Sub Form_Load()
  Command1.Caption = "opret e-mail"
  Text1.Text = "C:\test.csv" 'RETTES
End Sub

Private Sub CopyToClipboard()
  Dim i As Integer
  Dim strAdresser As String

  strAdresser = Adresser(LBound(Adresser))
  For i = LBound(Adresser) + 1 To UBound(Adresser)
    strAdresser = strAdresser & "," & Adresser(i)
  Next i
  Clipboard.Clear
  Clipboard.SetText (strAdresser)
End Sub


Private Function ReadCSV(Filename As String) As Boolean
  ReadCSV = False
  Dim FilNummer As Integer
  Dim Tæller As Integer
  FilNummer = Freefile
  Open Filename For Input As #FilNummer
  Do While Not EOF(FilNummer)
    ReDim Preserve Adresser(Tæller)
    Line Input #FilNummer, Adresser(Tæller)
    Tæller = Tæller + 1
  Loop
  Close #FilNummer
  ReadCSV = True
End Function


Din sekretær kører programmet, går ind i Outlook, stiller cursoren i BCC-feltet, trykker Ctrl+V, og alle adresserne fra csv-filen står nu i BCC-feltet.

Så slipper du for at kommunikere med Outlook fra VB med alle de problemer det kan give :o)
Avatar billede Thomas Knudsen Nybegynder
15. december 2003 - 20:25 #15
Genialt Martin..
Meget mere enkelt = lige min stil
Det kan da ikke være nemmere.

Mange tak for hurtighed, fleksibilitet.
Kan du kompilere det, når nu Outlook er ude af billedet og så sende til gertged@gertged.dk?
Avatar billede martin_moth Mester
16. december 2003 - 08:13 #16
Arrh - nu er jeg taget på arbejde hvor jeg ikke har VB.
Så du må vente til i aften...
Avatar billede martin_moth Mester
16. december 2003 - 18:54 #17
Er sendt.
Tak for points
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
Kurser inden for grundlæggende programmering

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