2010-10-07 10 views
2

Je souhaite enregistrer un fichier Excel en tant que fichier .pdf dans un emplacement spécifique, puis envoyer le fichier dans un courrier électronique. J'utilise Office 2000: |Enregistrer un fichier Excel en tant que PDF dans un chemin spécifique

Ceci est mon code à ce jour:

Application.ActivePrinter = "PDF995 on Ne00:" 
ActiveSheet.PageSetup.PrintArea = Range("A68").Value 
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _ 
    "PDF995 on Ne00:", Collate:=True 
     Set WB = ActiveWorkbook 
     Set oApp = CreateObject("Outlook.Application") 
     Set omail = oApp.Createitem(0) 
     With omail 
      .To = Range("B61").Value 
      .Subject = "Approved" 
      .Body 
      .Display 
      Rows("81:134").Select 
      Selection.EntireRow.Hidden = True 
     End With 

je peux facilement enregistrer le fichier et l'envoyer, mais je ne peux pas l'enregistrer à un endroit précis.

Je dois être capable de spécifier un chemin comme "C: \ path \ file.pdf".

+0

je serais vraiment heureux, si quelqu'un « là-bas » pourrait me aider avec celui-ci. – Anders

Répondre

0

Si vous avez le fichier enregistré sur un emplacement fixe, mais vous ne pouvez pas choisir où, en dernier recours, vous pouvez toujours utiliser MoveFile de FSO pour le déplacer à votre emplacement spécifié

par exemple. Si le fichier est toujours enregistré en tant que « C: \ temp \ file1.pdf », et que vous voulez sur le bureau

'Initialise first' 
set fso = CreateObject("Scripting.FileSystemObject") 
... 
'After procedure' 
desired_destination = "c:\windows\desktop\" 
target_file = "C:\temp\file1.pdf" 

fso.MoveFile target_file, desired_destination 

Si vous voulez vérifier un conflit de fichier existant (je crois que le mouvement de FSO ne permet pas pour l'écrasement), utilisez CopyFile avec la surécriture activée, puis supprimez le fichier source si nécessaire.

Si vous souhaitez utiliser une boîte de dialogue de fichier pour choisir la destination, vous pouvez utiliser l'objet UserAccounts.CommonDialog (bien que cela ne soit pas le cas). pas travailler avec Vista) ou SAFRCFileDlg.FileOpen (à peu près ne fonctionne que sur XP) ou emprunter une boîte invite IE. (Malheureusement, les options ne sont pas tout ce grand avec VBS à ma connaissance)

Voyez-les ici: http://www.robvanderwoude.com/vbstech_ui_fileopen.php

+0

Bonjour NSN, Nous vous remercions de votre intérêt. Je voudrais décrire mon problème un peu plus, mais je le trouve vraiment difficile. Le fichier est nommé quelque chose de nouveau à chaque fois. Il n'y a pas besoin de boîte de dialogue de fichier. Il doit être aussi automatique que possible - pas d'entrées manuelles :) – Anders

0

Il est un peu compliqué, comme vous devez définir les clés de Registre. En supposant que vous avez une version complète d'Adobe Acrobat qui a installé les clés de Registre initiales:

D'abord, vous avez le registre l'accès aux fonctions, que vous avez mis dans un module non-feuille:

Private Const HKEY_CURRENT_USER As Long = &H80000001 
Private Const HKCU = HKEY_CURRENT_USER 
Private Const KEY_SET_VALUE = &H2& 
Private Const REG_SZ = 1 

Private Declare Function RegOpenKeyEx Lib "advapi32" _ 
    Alias "RegOpenKeyExA" (_ 
    ByVal hKey As Long, _ 
    ByVal lpSubKey As String, _ 
    ByVal ulOptions As Long, _ 
    ByVal samDesired As Long, _ 
    phkResult As Long) As Long 

Private Declare Function RegSetValueExA Lib "ADVAPI32.DLL" _ 
    (ByVal hKey As Long, _ 
    ByVal sValueName As String, _ 
    ByVal dwReserved As Long, _ 
    ByVal dwType As Long, _ 
    ByVal sValue As String, _ 
    ByVal dwSize As Long) As Long 

Private Declare Function RegCloseKey Lib "ADVAPI32.DLL" (_ 
    ByVal hKey As Long) As Long 

Ensuite, , vous utilisez le code suivant pour définir la clé de Registre qui indique à Adobe où enregistrer le fichier. Notez qu'il doit être défini chaque fois que vous imprimez.

Dim RegResult As Long, Result As Long 

RegResult = RegOpenKeyEx(HKCU, "Software\Adobe\Acrobat Distiller\PrinterJobControl", _ 
         0&, KEY_SET_VALUE, Result) 
RegResult = RegSetValueExA(Result, "C:\Windows\splwow64.exe", 0&, REG_SZ, _ 
          FileName, Len(FileName)) 
RegResult = RegCloseKey(Result) 

également note, le "C: \ Windows \ Splwow64.exe" est ce que je avais besoin pour mon Excel 2010 32 bits, et il peut être différent pour vous. Pour le déterminer (qui ne changera pas), imprimez d'abord manuellement en PDF, puis allez à la clé de registre et voyez quelle application est utilisée dans la clé HKCU \ Software \ Adobe \ Acrobat Distiller \ PrinterJobControl LastPDFPortFolder. Ensuite, utilisez le nom du chemin complet de l'application pour cet exécutable.

0

Essayez ceci:

sName = "C:\path\file.pdf" 

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sName 
Questions connexes