Witam
Czy możliwe jest, aby adres katalogu eksportu był hiperłączem w formularzu użytkownika makra VBA.
Chcę użyć makra eksportu PDF DXF STEP ZIP, ... i że na końcu operacji, oprócz komunikatu "operacja zakończona pomyślnie", chcę mieć albo hiperłącze do tego katalogu, albo przycisk umożliwiający dostęp do niego.
Ostatecznym rozwiązaniem byłoby nawet posiadanie przycisku "Wyślij e-mailem", który otwierałby nową wiadomość z predefiniowanym tematem i treścią oraz dołączał do niej wyeksportowany dokument. To dla moich próśb, które pojawiają się dość często. Dziękuję za pomoc.
To może dać ci wskazówkę, zastępując Internet Explorera Eksploratorem Windows:
https://forum.solidworks.com/thread/207477
Udało się.

Skończyło się na tym, że zrobiłem UserForm, a makro zamienia pole tekstowe na nazwę pliku lub adres katalogu. Użyłem ustawień _Click formularza użytkownika, aby otworzyć w stylu hiperłącza (dokonałem zmiany w formatowaniu myszy przez styl "główny") po najechaniu kursorem na pole tekstowe i umieściłem przycisk, aby uzyskać dostęp do katalogu:
Private Sub LabelFileExport_Click()
On Error GoTo OuvertureFichierErreur
Dim MonApplication As Object
Dim MonFichier As String
Set MonApplication = CreateObject("Shell.Application")
MonFichier = vDestinationPath & "\" & sRefName & ".zip"
MonApplication.Open (MonFichier)
Set MonApplication = Nothing
Exit Sub
OuvertureFichierErreur:
Set MonApplication = Nothing
MsgBox "Erreur lors de l'ouverture de fichier..."
End Sub
Private Sub CommandButtonOpenPath_Click()
Shell Environ("WINDIR") & "\explorer.exe " & vDestinationPath, vbNormalFocus
End Sub
Na wysłanie maila z załącznikiem znalazłem odpowiedź w kawałkach na kilku forach i wygląda ona tak:
Private Sub CommandButtonSendMail_Click()
On Error GoTo EnvoyerEmailErreur
'définition des variables
Dim oOutlook As Outlook.Application
Dim oMailItem As Outlook.MailItem
Dim Body As Variant
Dim sTmp As String, SigString As String
Dim Signature As String
Dim strbody As String
PieceJointe = vDestinationPath & "\" & sRefName & ".zip"
'préparer Outlook
PreparerOutlook oOutlook
Set oMailItem = oOutlook.CreateItem(0)
strbody = "<font size=3>" _
& "Bonjour,<br>" _
& "Pouvez-vous s'il vous plaît me faire votre meilleure offre de prix et délais pour la fourniture de l'élément en plan ci-joint.<br>" _
& "Cordialement,"
'création de l'email
With oMailItem
.Display '<- affiche l'email (si vous ne voulez pas l'afficher, mettez cette ligne en commentaire)
.Subject = "Demande de prix - " & sRefName
.HTMLBody = strbody & .HTMLBody
If PieceJointe <> "" Then .Attachments.Add PieceJointe
'.Save '<- sauvegarde l'email avant l'envoi (pour ne pas le sauvegarder, mettez cette ligne en commentaire)
'.Send '<- envoie l'email (si vous voulez seulement préparer l'email et l'envoyer manuellement, mettez cette ligne en commentaire)
End With
'nettoyage...
If (Not (oMailItem Is Nothing)) Then Set oMailItem = Nothing
If (Not (oOutlook Is Nothing)) Then Set oOutlook = Nothing
Exit Sub
EnvoyerEmailErreur:
If (Not (oMailItem Is Nothing)) Then Set oMailItem = Nothing
If (Not (oOutlook Is Nothing)) Then Set oOutlook = Nothing
MsgBox "Le mail n'a pas pu être envoyé...", vbCritical, "Erreur"
End Sub
Private Sub PreparerOutlook(ByRef oOutlook As Object)
'Ce code vérifie si Outlook est prêt à envoyer des emails... Et s'il ne l'est pas, il le prépare.
On Error Resume Next
'vérification si Outlook est ouvert
Set oOutlook = GetObject(, "Outlook.Application")
If (Err.Number <> 0) Then 'si Outlook n'est pas ouvert, une instance est ouverte
Err.Clear
Set oOutlook = CreateObject("Outlook.Application")
If (Err.Number <> 0) Then
MsgBox "Une erreur est survenue lors de l'ouverture de Outlook..."
Exit Sub
Else
End If
Else 'si Outlook est ouvert, l'instance existante est utilisée
End If
End Sub