2017-03-08 8 views
0

Ich habe bereits ein Makro erstellt, das einzelne Dateien für mich erstellt. Mit diesen Dateien habe ich einen weiteren VBA-Job in Outlook erstellt, der die Kontaktinformationen zur E-Mail hinzufügt, die benötigte Datei findet und an eine E-Mail anfügt. Ich muss dies zu einer Liste von etwa 50 verschiedenen Unternehmen machen, denen ich diese Audits zusende. Derzeit muss ich einen bestimmten Parameter hinzufügen, um auszuwählen, welche Firma ich "V003" verwende, zum Beispiel, nachdem dieser Job ausgeführt wird, gehe ich zum nächsten "V004" und so weiter.VBA Übergabe Liste der Variablen

Ich bin auf der Suche nach einer Möglichkeit, VBA die Liste der 50 Firmencodes, in denen ich alle als Ordner in einem bestimmten Verzeichnispfad haben. Wenn ich also den Job starte, wird er im Verzeichnispfad auf den Ordner V003 verweisen und diesen als VendorID-Variable verwenden, die ich erstellt habe, dann zum Anfang zurückschleifen und den nächsten Ordnernamen V004 im Verzeichnispfad holen und bis dahin filtern kommt zum letzten.

Es sei denn, jemand anderes hat eine Idee, die mich nicht 50 Mal den VBA-Job kicken lässt und jede Variable weitergibt. (Zur Zeit ist das, was ich getan habe, da ich diese Arbeitsplätze geschaffen und es ist immer noch ein wenig zeitaufwendig)

Dim GlobalVarEmail As String 
Dim GlobalVarVendorName As String 
Dim GlobalVendorId As String 
Dim GlobalMonth As String 
Dim GlobalYear As String 
Dim GlobalAuditDate As String 

Sub SendFilesbyEmail() 
'the calling method of all sub methods. 
    GlobalVendorId = InputBox("What Vendor Letter are you trying to send out? (V Code: ex - V012)", "Vendor Code", "Type Here", 7500, 5000) 
    GlobalMonth = InputBox("What Month are you auditing for?(ex - Jan. Feb. Mar.)", "Month", "Type Here", 7500, 5000) 
    GlobalYear = InputBox("What year are you auditing for?(ex - 2016)", "Quarter", "Type Here", 7500, 5000) 
    GlobalAuditDate = InputBox("What is the audit date?(ex - 20160930)", "Quarter", "Type Here", 7500, 5000) 
Call openExcel(GlobalVendorId) 
Call SendAuditReport 
End Sub 
Public Function openExcel(UserReponse) As String 
'this function is used to retrieve the vendor contact e-mail 
Dim xlApp As Object 
Dim sourceWB As Workbook 
Dim sourceWS As Worksheet 

Set xlApp = CreateObject("Excel.Application") 

With xlApp 
.Visible = False 
.EnableEvents = True 
End With 

strFile = "G:\403(b)\User Folders\Chris W\SPARK Info\Contacts.xlsx" 

Set sourceWB = Workbooks.Open(strFile, , False, , , , , , , True) 
Set sourceWH = sourceWB.Worksheets("SPARK") 
sourceWB.Activate 
    Rows("1:1").Select 
    Selection.AutoFilter 
    ActiveSheet.Range("$A$1:$H$100").AutoFilter Field:=1, Criteria1:=UserReponse 
    Range("F1").Select 
    GlobalVarEmail = Selection.End(xlDown).Value 
    Range("B1").Select 
    GlobalVarVendorName = Selection.End(xlDown).Value 
ActiveWorkbook.Close SaveChanges:=False 

End Function 


Function SendAuditReport() 
'this function will create a e-mail, (subjectline & body), attach the needed audit letter, and insert the needed vendor contact e-mail. 
Dim Fname As String 
Dim sAttName As String 

Dim olApp As Outlook.Application 
Dim olMsg As Outlook.MailItem 
Dim olAtt As Outlook.Attachments 

Set olApp = Outlook.Application 
Set olMsg = olApp.CreateItem(0) ' email 
Set olAtt = olMsg.Attachments 

    ' send message 
With olMsg 
    .Subject = GlobalVarVendorName & " " & GlobalMonth & " " & GlobalYear & " SPARK Audit" 
    .To = GlobalVarEmail 
    .CC = "[email protected]" 
    .Attachments.Add "G:\403(b)\User Folders\Chris W\Spark Audit\" & GlobalAuditDate & "\00-Ran Reports\" & GlobalVendorId & "\SPARK Audit Report " & GlobalVarVendorName & ".xlsx" 
    'you can add attachments here just type .Attachments.Add "folder path" 
    .HTMLBody = "Hello, <br /><br /> Attached is the file 
    '.Send 
    .Display 
End With 

End Function 
+0

Arrays (Param), Sammlungen, Wörterbücher, Klassen usw. Wo werden die 50 Quellcodes usw. aufbewahrt? Sie schließen auch nie die Excel-Anwendung, so dass es 50 Mal öffnen würde, müssen Sie Excel bei der öffentlichen Deklaration halten oder 'getobject' als Überprüfung vor' createobject' verwenden, da es in Excel ist, können Sie einfach 'new excel.application verwenden ' –

+0

Die 50 Quellcodes werden im Verzeichnispfad außerhalb des .Attachment.add-Codes gespeichert. " G: \ 403 (b) \ Benutzerordner \ Chris W \ Spark Audit \ "& GlobalAuditDate &" \ 00-Ran Reports " Ah, ich habe nicht 50 mal darüber nachgedacht, also wie würdest du das am besten beheben? (Ich bin ziemlich neu in der Verwendung von Objekten, so dass ich nicht 100% ig sicher bin, wie Sie das implementieren, was Sie vorgeschlagen haben). – ChrisW

Antwort

0

Sie Ordnernamen als solche aufzählen kann:

Dim objFSO As Object 
Dim objFolder As Object 
Dim objSubFolder As Object 

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.GetFolder("C:\pathtoyourparentfolder") 

For Each objSubFolder In objFolder.subfolders 
    MsgBox objSubFolder.Name 
Next objSubFolder 

objSubFolder.Name wird die Name des Ordners und Sie können dies an GlobalVendorID übergeben.

+0

Vielen Dank Jacob K es funktionierte perfekt - Was ich die Objekte dabei am Ende wird hinzugefügt und gesetzt wie Sie dann vorgeschlagen, hinzugefügt, um die „For Each objSubFolder In objFolder.subfolders GlobalVendorId = objSubFolder.Name Anruf openExcel (GlobalVendorId) Anruf SendAuditReport Nächster objSubFolder " – ChrisW

Verwandte Themen