17. august 2011 - 13:14Der er
10 kommentarer og 1 løsning
Excel VBA kopier X antal ark fra 2 filer
Hej Eksperten
Jeg står med et VBA problem. Jeg bruger excel version 2007.
Jeg skal have en kode til følgende: Der er X antal ark i 2 "master" filer. Herfra skal der kopieres et fast defineret antal ark (benævnt med specifik ark navn). De kopierede ark skal gemmes i et nyt excel ark som gemmes automatisk udfra et hvad felt A2 indeholder samt måneden (skrevet i felt R2.
Der skal total set oprettes ca. 20 nye ark, hvorved det virker smartest at efter overførsel af ark fra de 2 masterfiler, så lukkes den nye projektmappe.
Slutteligt, og evt i en seperat makro skal et outlook vindue åbnes hvor de nye filer er vedhæftede og filens navn er mailens overskrift. Derudover skal "til" feltet være udfyldt med en specifik mail adresse.
Indtil videre har jeg prøvet med følgende kode, men der får jeg kun 1 ark overført, og mail funktionen åbner kun mailen og vedhæfter filen, men mangler at angive mail adressen. Tror dog ikke den virker når der først kommer flere ark til?
Sub kopier()
' kopier Makro
Application.Calculation = xlManual ' Deaktiverer beregningsfunktion i hele excel.
Windows("150811 K-data.xlsm").Activate Sheets("BHN").Copy 'Kopiere data ark i ny fil.
FilNavn = Range("A2").Value Mdr = Range("R2").Value ActiveWorkbook.SaveAs Filename:="H:\My Documents\" & "TPM " & FilNavn & Mdr & ".xlsm", _ FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False 'Gemmer filen med det angivne navn og format på angivne placering
Sheets("BHN").Select 'vælger data ark
Application.Dialogs(xlDialogSendMail).Show
End Sub
Forestiller mig det er en halv kompleks operation, hvorved jeg har sat et høj point tal på. På forhånd tak :)
"Slutteligt, og evt i en seperat makro skal et outlook vindue åbnes hvor de nye filer er vedhæftede"
Er der ikke kun tale om en ny fil?
-
Hvis du opbygger en illustrativ model af masterfiler og "ny fil" så skal jeg prøve at udarbejde koden. Denne vil jeg så placere i en "systemfil", der automatisk åbner de to masterfiler - kopiere ark til en ny fil - lukker masterfilerne - kalder outlook og sender den nye fil.
Du er altså velkommen til at sende en model - @-adresse under min profil.
Jo der er kun tale om 1 ny fil. Det var en uklar formulering, da jeg mente at det evt. kunne skrive som et separat VBA modul i samme projektmappe.
Smart forslag med at have en "systemfil" hvorfra filudsplitning kunne foregå fra. Masterfilerne består af en række ark. Typisk er 1 ark med data og et ark 2 med data og grafer. Ark 2 har en del referencer til ark 1. For at sikre at alt kommer med, vil det derfor være smartest at kopiere hele arket over som det er i masterfilerne.
Masterfilerne hedder: K-data.xlsm F-data.xlsm
Den nye fil skal hedde: " & "TPM " & FilNavn & Mdr & ".xlsm hvor: FilNavn = Range("A2").Value Mdr = Range("R2").Value
De "nye" filer med ark fra de 2 masterark kan se ud som følger: eksempel 1:
Værdierne herfra er placeret i det første ark som skal kopieres fra masterfilerne. F.eks. ift. tidligere eksempel så står værdierne heri i arkene BHN og BBB
Rem Reference til Microsoft Outlook xx. Object Library er sat Rem ========================================================= Const masterSti = "C:\Users\peter\Desktop\Zany_945248\" 'Tilpasses Const resultatSti = "C:\Users\peter\Desktop\Zany_945248\ResultatFiler\" '-- " --
Dim Kdata As Workbook, Fdata As Workbook Const KmasterNavn = "K-data.xlsm" Const FmasterNavn = "F-data.xlsm"
Const resultatDummyNavn = "Resultat.xlsm" Dim ResultatObj As Workbook, resultatFilNavn As String
Const modtagerMail = "xx@xxx-it.dk" 'Tilpasses Private Sub CommandButton1_Click() 'Ok-knap On Error GoTo fejl With ResultatObj kopierFraMaster Kdata, Me.Lb_KarkNavne kopierFraMaster Fdata, Me.Lb_FarkNavne
If .Sheets.Count > 1 Then Application.DisplayAlerts = False .Sheets("xxx").Delete
.SaveAs Filename:=resultatSti & resultatFilNavn End If End With
Rem overfør resultatfilnavn til arket ThisWorkbook.ActiveSheet.Range("A1") = resultatSti ThisWorkbook.ActiveSheet.Range("A2") = resultatFilNavn
lukAlleObjekter
Exit Sub
fejl: MsgBox "Fejl erkendt" Stop Resume Next 'til test
lukAlleObjekter End Sub Private Sub userform_terminate() lukAlleObjekter End Sub Private Sub lukAlleObjekter() lukObjekt Kdata lukObjekt Fdata lukObjekt ResultatObj
Unload UserForm1 End Sub Private Sub kopierFraMaster(mobj As Workbook, listeObj As Object) Dim f As Byte, antalArk As Byte For f = 0 To listeObj.ListCount - 1
antalArk = ResultatObj.Sheets.Count
If listeObj.Selected(f) = True Then arknavn = listeObj.List(f)
mobj.Sheets(arknavn).Copy after:=ResultatObj.Sheets(antalArk) End If Next f End Sub Private Sub UserForm_activate() Application.Cursor = xlDefault visDataFraMaster End Sub Private Sub visDataFraMaster() Application.ScreenUpdating = False
Rem opret resultatfil resultatFilNavn = "TPM " & Me.Lab_Kfilnavn & " " & Me.Lab_Kmåned Set ResultatObj = Workbooks.Open(masterSti + resultatDummyNavn)
Me.CommandButton1.Enabled = True End Sub Private Sub fraMaster(mobj As Workbook, masterfilNavn As String, filNavnObj As Object, månedObj As Object, listeObj As Object) Dim ark As Worksheet
Rem Vis arknavne, der ikke er rent numeriske listeObj.Clear
For Each ark In mobj.Sheets If IsNumeric(ark.Name) = False Then listeObj.AddItem ark.Name End If Next ark Exit Sub
lukFilObj: MsgBox "Fejl erkendt" Resume Next
lukObjekt mobj Stop End Sub Private Sub lukObjekt(mobj As Workbook) On Error Resume Next Application.Cursor = xlDefault
mobj.Close savechanges:=False Set mobj = Nothing End Sub Public Sub emailSendes() SendResultatFil modtagerMail, ThisWorkbook.ActiveSheet.Range("A2"), ThisWorkbook.ActiveSheet.Range("A1") End Sub Public Sub SendResultatFil(modtager, emne, ResultatFilSti) Dim mailApp, Namespace, indbakke, nyMail, nyAtt Set mailApp = CreateObject("Outlook.Application")
Set nyMail = mailApp.CreateItem(olMailItem) Set nymod = nyMail.Recipients nymod.Add modtager nyMail.Subject = emne
Set nyAtt = nyMail.Attachments nyAtt.Add ResultatFilSti & emne + ".xlsm"
nyMail.Display nyMail.send End Sub
Synes godt om
Ny brugerNybegynder
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.