Avatar billede perpe Nybegynder
11. april 2008 - 10:53 Der er 36 kommentarer og
1 løsning

Mail vedhæftet fil fra excel

Jeg har lavet denne lille makro, som jeg bruger til, at sende en file (det er ikke regnearket, der skal sendes, men derimod en anden file fx. c:\temp\test.csv.

Hvordan får jeg skrevet det ind i min lille makro ? Jeg har ledt og ledt, men ikke fundet løsningen.

Sub prp()
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
              "mailto:perpe@mail.dk?subject=Test"
      Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
End Sub
Avatar billede Slettet bruger
11. april 2008 - 12:42 #1
du kan ikke bruge mailto til at sende attachment men du kan bruge Outlook objected i stedet, se her: http://www.rondebruin.nl/mail/folder2/files.htm
Avatar billede perpe Nybegynder
11. april 2008 - 12:50 #2
Tak for det, den havde jeg egentlig også været inde i på et tidspunkt, men makroen stopper når den når til:

  Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon

Hvad gør jeg galt ?
Avatar billede Slettet bruger
14. april 2008 - 08:06 #3
prøv at læse det der står nederst på siden om Early binding
Avatar billede perpe Nybegynder
14. april 2008 - 11:15 #4
Sorry - det har jeg nu gjort (Jeg er ikke nogen ørn til VBa, men håber at blive det).

Jeg har fulgt beskrivelsen, men får stadig fejl.

Den kode som jeg forsøger, at fyre af er:

Sub Send_Files()
'Working in 2000-2007
    Dim OutApp As Outlook.Application
    Dim OutMail As Outlook.MailItem
    Dim sh As Worksheet
    Dim cell As Range, FileCell As Range, rng As Range

    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With

    Set sh = Sheets("ark1")

    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon

    For Each cell In sh.Columns("B").Cells.SpecialCells(xlCellTypeConstants)

        'Enter the file names in the C:Z column in each row
        Set rng = sh.Cells(cell.Row, 1).Range("C1:Z1")

        If cell.Value Like "?*@?*.?*" And _
          Application.WorksheetFunction.CountA(rng) > 0 Then
            Set OutMail = OutApp.CreateItem(olMailItem)

            With OutMail
                .To = cell.Value
                .Subject = "Testfile"
                .Body = "Hi " & cell.Offset(0, -1).Value
                For Each FileCell In rng.SpecialCells(xlCellTypeConstants)
                    If Trim(FileCell) <> "" Then
                        If Dir(FileCell.Value) <> "" Then
                            .Attachments.Add FileCell.Value
                        End If
                    End If
                Next FileCell
                .Send  'Or use Display
            End With

            Set OutMail = Nothing
        End If
    Next cell

    Set OutApp = Nothing

    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub

Ved Set OutApp = CreateObject("Outlook.Application") kommer fejlen: Runtime error 429, ActiveX can´t create object.
Avatar billede Slettet bruger
14. april 2008 - 11:32 #5
nu har du vel outlook fra officepakken installeret ?
Avatar billede perpe Nybegynder
14. april 2008 - 11:41 #6
Jo den er installeret og kører som den skal.
Avatar billede Slettet bruger
14. april 2008 - 11:55 #7
prøv at ændre:

    Dim OutApp As Outlook.Application
    Dim OutMail As Outlook.MailItem
til

    Dim OutApp As Object
    Dim OutMail As Object

Så spiller det her
Avatar billede perpe Nybegynder
14. april 2008 - 12:10 #8
Har prøvet, men det virkser stadig ikke. Kan der være behov for, at jeg skal ha´ tilføjet flere "References" ?
Avatar billede Slettet bruger
14. april 2008 - 12:19 #9
check menuen Funktioner|Tilføjelsesprogramer og sæt nogle flueben
Avatar billede perpe Nybegynder
14. april 2008 - 12:34 #10
der er flueben i alle dem jeg kan se, bortset fra værktøj til euro-valuta, men måske jeg skal ha´ installeret nogel flere ?
Avatar billede Slettet bruger
14. april 2008 - 12:46 #11
det lyder godt nok underligt, jeg har arbejdert med dette object i flere måneder uden problemer. Hvad er det for en fejl du får og hvilken linje?
Avatar billede perpe Nybegynder
14. april 2008 - 12:52 #12
det er i denne linie: Set OutApp = CreateObject("Outlook.Application"), at jeg får fejlen: Runtime error 429, ActiveX can´t create object.

Men jeg har fundet dette link: http://www.dicks-clicks.com/excel/olSending.htm#Sending_an_E-mail_with_Attachments og det dækker egentlig mit behov.
Avatar billede Slettet bruger
14. april 2008 - 13:05 #13
tyder på du mangler nogle dll´er til outlook.
Avatar billede perpe Nybegynder
14. april 2008 - 13:55 #14
har du en ide om hvilke ?
Avatar billede Slettet bruger
14. april 2008 - 14:00 #15
næ, men du kan afinstallere og geninstalere outlook
Avatar billede perpe Nybegynder
14. april 2008 - 14:07 #16
Det prøver jeg. Tak for hjælpen. Har du ikke et hint til mit spørgsmål om: ASCII+31 ; som separator ved eksport af file fra excel.

Jeg lukker nærværende spørgsmål og du får dine point.
Avatar billede Slettet bruger
14. april 2008 - 14:25 #17
nu har jeg ikke lige set det spørgsmål om ASCII+31 ?
Avatar billede perpe Nybegynder
14. april 2008 - 14:38 #18
Her er mit spørgsmål:

Jeg skal bruge tegnet ascii+31, som separator i en flad file. Når jeg ser det på skærmen, så ser det rigtigt ud, men når jeg ta´r filen ind i en editor så er separatoren ?-tegnet.
Avatar billede Slettet bruger
14. april 2008 - 14:43 #19
prøv med =TEGN(31)
Avatar billede perpe Nybegynder
14. april 2008 - 14:55 #20
Hvor i denne kode skal jeg skrive det ?

    ActiveWorkbook.SaveAs Filename:="C:\temp\tegn31.txt", FileFormat:=xlText, _
        CreateBackup:=False
Avatar billede Slettet bruger
14. april 2008 - 15:04 #21
hvis du bare skal have en komasepareret fil skal du sætte FileFormat:=xlCSV
Avatar billede perpe Nybegynder
14. april 2008 - 15:17 #22
Den skal ikke bare være kommasepareret, separatoren skal være tegn(31)
Avatar billede Slettet bruger
14. april 2008 - 15:25 #23
hmm... Så ville jeg gøre som du kodet nu og læse filen ind i en enkelt String og så gennemløbe strengen og indsætte 31 og overskrive filen igen
Avatar billede perpe Nybegynder
14. april 2008 - 15:37 #24
Har du en lille stum kode, som jeg eventuelt kunne bruge ?
Avatar billede Slettet bruger
14. april 2008 - 15:54 #25
desvære :-/ og jeg er ude af døren om 10 minuter, men hvis du ikke selv har løst det i morgen kan jeg kikke på det

ok du får lige en hurtig en, men du må selv bakse med det
hvis vi antager at du gemmer filen med FileFormat:=xlCSV
så læser vi den ind igen og erstater alle kommaer med ascii 31

Sub ConvertFile(filespec)
    Dim fs, sString
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set sString  = fs.GetFile(filespec)
    sString = Replace(sString, Chr(44), Chr(31))
    fs.SaveFile(filespec)
End Sub
Avatar billede perpe Nybegynder
15. april 2008 - 09:45 #26
tak for det - jeg spør´ lidt dumt - skal jeg ikke angive filnavnet et sted i koden ?
Avatar billede Slettet bruger
15. april 2008 - 09:58 #27
jo det er filespec, lidt forvirende kan jeg godt se

så:
ConvertFile("C:\temp\tegn31.txt")
Avatar billede perpe Nybegynder
15. april 2008 - 10:13 #28
med følgende kode får jeg fejl, når den når til fs.savefile

Sub ConvertFile()
    Dim fs, sString
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set sString = fs.GetFile("C:\temp\tegn31.tx")
    sString = Replace(sString, Chr(44), Chr(31))
    fs.SaveFile ("C:\temp\tegn31.txt")
End Sub
Avatar billede Slettet bruger
15. april 2008 - 10:41 #29
klart ;-) jeg har givet dig et vbScript eksempel, forkert! du får lige en VBA

jeg tror også vi køre en linje ad gangen, så nu ser det lidt anderledes ud

Sub ConvertFile()
  fInput = FreeFile()
  fOutput = FreeFile()
  Open "C:\temp\tegn31.txt" For input As fInput
  Open "C:\temp\2tegn31.txt" For output As foutput
      While Not EOF(fInput)
        Line Input #fInput, sString
        sString = Replace(sString, Chr(44), Chr(31))
        Line Output #fOutput, sString
    Wend
  Close fInput
  Close fOutput
End Sub
Avatar billede perpe Nybegynder
15. april 2008 - 10:55 #30
hej  - jeg får syntax error på: Line Output #fOutput, sString

kan ikke lige se hvor det er galt !
Avatar billede Slettet bruger
15. april 2008 - 11:02 #31
erstat den med:
Write #fOutput, sString

så skulle den spille
Avatar billede perpe Nybegynder
15. april 2008 - 11:17 #32
sorry, but nu afviklingen af koden i linien: Open "C:\temp\2tegn31.txt" For output As foutput
Avatar billede Slettet bruger
15. april 2008 - 11:58 #33
ret koden til:

  fInput = FreeFile()
  Open "C:\temp\tegn31.txt" For input As fInput
  fOutput = FreeFile()
  Open "C:\temp\2tegn31.txt" For output As foutput

lidt underligt men sådan er microsoft nogen gange
Avatar billede perpe Nybegynder
15. april 2008 - 12:32 #34
yes - nu er den lige ved, at være der, nu har jeg kun det problem, at hver record starter og slutter med anførselstegn " - det skal de ikke, har du en løsning ?
Avatar billede Slettet bruger
15. april 2008 - 12:43 #35
dem kan du også filtrere fra ved sString = Replace(sString, Chr(34), "")
Avatar billede perpe Nybegynder
15. april 2008 - 12:51 #36
ja, men der er jo i outputfilen, at de er ! Er det fordi den gennemes som string ?
Avatar billede Slettet bruger
15. april 2008 - 13:04 #37
det lyder for underligt, de må også være i inputfilen, det er meget normalt med "" i en komasepareret fil og det er ikke pga String, men du skulle kunne fjerne dem med:
sString = Replace(sString, Chr(34), "")
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