14. december 2006 - 21:42
Der er
3 kommentarer
Makro i Excel / Outlook
Jeg har brug for at lave en makro i Excel der gør følgende:
1.: Gem mit exeldokument i en sti - Det har jeg løst sådan her !
Sub Makro1()
'
' Makro1 Makro
' Makro indspillet 14-12-2006 af Jacob Skjødt Møller
'
'
ChDir "c:\"
ActiveWorkbook.SaveAs Filename:="c:\" & Range("C6").Value & ".xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
End Sub
2. Overfører excel-filen til Outlook, hvor den vedhæfter den en ny mail, der åbnes automatisk.
3. Adr. felt udfyldes automatisk
4. Emnefelt udfyldes automatisk med filnavn
5. Posten afsendes i Outlook
Hvis det kan lade sig gøre vil det være helt kanon !
Den forkromede løsning vil så være at den enkelte excel-fil hedder noget unikt - fx. at der kobles fortløbende nr. ind i filnavnet. Så jeg kan gennem excel-filerne fortløbende, men stadig overføre den aktuelle fil med makroen
15. december 2006 - 10:45
#1
Har oprettet filen basis.xls i en mappe - koden ligger i VBA/Ark1
I samme mappe er der oprettet en undermappemed navnet xlsArkiv - her gemmes de filer, som tilpasses på grundlag af "basis" og efterfølgende sendes via Outlook.
Filerne lagres i xlsArkiv under det valgte filnavn fra C6 - indledende med et løbenr, der beregnes på basis af antallet af filer i xlsArkiv. Derfor må disse filer ikke slettes - eller princippet skal laves om - hvilket også kan lade sig gøre - f.eks. via en tekstfil, der indeholder løbenr.
Kode ser således ud:
Dim xSti, filNr, filNavn
Const gemMappe = "xlsArkiv\" 'mappe til filer, der sendes - ligger i samme mappe som basis.xls
Sub KlarTilOutLook()
findSti
filNr = findNæsteFilnr
gemFilen
sendFilen "Modtager@mail.dk", filNavn, ActiveWorkbook.FullName 'modtager@mail.dk skal erstattes af ........
Rem Luk filen
ActiveWorkbook.Close
End Sub
Private Sub findSti()
xSti = ActiveWorkbook.Path
If Right(xSti, 1) <> "\" Then
xSti = xSti + "\"
End If
End Sub
Private Function findNæsteFilnr() 'tæller antal filer i mappen
Dim fs, f, f1, fc, s, antalFiler
antalFiler = 0
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(xSti + gemMappe)
Set fc = f.Files
For Each f1 In fc
antalFiler = antalFiler + 1
Next
findNæsteFilnr = antalFiler + 1
End Function
Private Sub gemFilen()
Dim xFilnr
xFilnr = fireTegn(CStr(filNr)) 'udvid filnr til 4 tegn
filNavn = Range("C6").Value
ActiveWorkbook.SaveAs Filename:=xSti + gemMappe + "Fil_" + xFilnr + "_" & filNavn + ".xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
End Sub
Private Function fireTegn(nr)
While Len(nr) < 4
nr = "0" + nr
Wend
fireTegn = nr
End Function
Public Sub sendFilen(modtager, emne, vedhft)
Dim mailApp, Namespace, nyMail, att
Set mailApp = CreateObject("Outlook.Application")
Set Namespace = mailApp.GetNamespace("MAPI")
Set nyMail = mailApp.CreateItem(olMailItem)
Set nymod = nyMail.Recipients
nymod.Add modtager
Set att = nyMail.Attachments
att.Add vedhft
nyMail.Subject = emne
nyMail.Display 'visning af mail
nyMail.Send 'send mailen
End Sub