Outlook Not Running Visual Basic After Restart

2020-04-10 23:49发布

So I have created a visual basic script in outlook that creates a random signature by pulling from Git.

The script works correctly but whenever I restart my machine the script doesn't run at all.

I fixed the issue by going to

"File"->"Options"->"Trust Center"->"Trust Center Settings..."->"Macro Settings"->"Enable all macros"

This let the VBA code work whenever I opened and closed Outlook but is there a better way to have the code work whenever I reopen Outlook or restart my machine.

I have tried to use

Private Sub Application_Startup() 

    MsgBox "Hi"

End Sub

While that code did work when I first put it in, whenever I restarted outlook it said it couldn't run because "Macros were disabled"

Here is my code for the random signature, anyway to have this work whenever I restart outlook or my machine? Or is the macro setting I edited the correct way to go?

Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

' Validate that the item sent is an email.
    If Item.Class <> olMail Then Exit Sub

'These first variables is to find the file the .bat file created within the AppData folder
'Set enviro to %APPDATA%
    Dim enviro As String
    enviro = CStr(Environ("APPDATA"))
'Create a new variable that sets the file path for the RepoDir.txt
    RepoPath = enviro & "\RepoDir.txt"

'Create a new variable to grab the line of text in RepoDir.txt
    Dim RepoFilePath As String
    Dim strFirstLine As String

'The new variable calls the RepoPath Variable, opens it and reads the first line of the file and copies it into a variable
    RepoFilePath = RepoPath
    Open RepoFilePath For Input As #1
    Line Input #1, strFirstLine
    Close #1

'The script runs a Shell command that opens the command line, cds to the Repo path within the str variable, does a git pull, and outputs the error level to a file in the temp directory
    Shell ("cmd /c cd " & strFirstLine & " & git pull RandomSig & echo %ERRORLEVEL% > %TEMP%\gitPull.txt 2>&1")

'These second set of variables is to find the file the Shell command created within the TEMP folder
'Set enviro to %TEMP%
    Dim Gitenviro As String
    Gitenviro = CStr(Environ("TEMP"))
'Create a new variable that sets the file path for the RepoDir.txt
    PullResult = Gitenviro & "\gitPull.txt"

'Create a new variable to grab the line of text in RepoDir.txt
    Dim GitFilePath As String
    Dim GitFirstLine As String

'The new variable calls the PullResult Variable, opens it and reads the first line of the file and copies it into a variable
    GitFilePath = PullResult
    Open GitFilePath For Input As #2
    Line Input #2, GitFirstLine
    Close #2
    'MsgBox (GitFirstLine)

'The variable is checked to see if it does not equal 0, and if it doesn't the message is cancelled
    If GitFirstLine <> 0 Then
        MsgBox "There was an error when attempting to do the Git Pull, cancelling message"
        Cancel = True
    End If

    Const SearchString = "%Random_Line%"
    Dim QuotesFile As String

    QuotesFile = strFirstLine & "quotes.txt"


    If InStr(Item.Body, SearchString) Then
        If FileOrDirExists(QuotesFile) = False Then
            MsgBox ("Quotes file wasn't found! Canceling message")
            Cancel = True
        Else
            Dim lines() As String
            Dim numLines As Integer
            numLines = 0

        ' Open the file for reading
            Open QuotesFile For Input As #1

        ' Go over each line in the file and save it in the array + count it
            Do Until EOF(1)
                ReDim Preserve lines(numLines + 1)
                Line Input #1, lines(numLines)
                numLines = numLines + 1
            Loop

            Close #1

        ' Get the random line number
            Dim randLine As Integer
            randLine = Int(numLines * Rnd()) + 1

        ' Insert the random quote
            Item.HTMLBody = Replace(Item.HTMLBody, SearchString, lines(randLine))
            Item.HTMLBody = Replace(Item.HTMLBody, "%Random_Num%", randLine)
        End If
    End If
    End Sub

    Function FileOrDirExists(PathName As String)
    Dim iTemp As Integer

    On Error Resume Next
    iTemp = GetAttr(PathName)

    Select Case Err.Number
    Case Is = 0
        FileOrDirExists = True
    Case Else
        FileOrDirExists = False
    End Select

    On Error GoTo 0
End Function

1条回答
家丑人穷心不美
2楼-- · 2020-04-11 00:19

It’s highly recommended to leave your macro security setting to only allow self-sign certificate Macros,

Do not use the Low option or run all

Create a self-signing certificate

  1. Go to Start > All Programs > Microsoft Office > Microsoft Office Tools, and then click Digital Certificate for VBA Projects.

  2. In the Your certificate's name box, type in name for the certificate.

  3. Click OK. then SelfCert Success message will appears, click OK.

enter image description here

  1. Go to Developer tab > click Visual Basic. or ALT+F11

  2. In Visual Basic Editor, go to Tools > Digital Signature.

  3. Digital Signature dialog appears and click on Choose and you’ll get a screen to select a certificate. Now you can choose the certificate you just created.


Edit

locating SelfCert.exe

Go to Start menu and typing VBA should bring up the SelfCert.exe.

enter image description here

Alternative method of locating SelfCert.exe

if you Can’t find it in the Start Menu? then By default you can find SelfCert.exe in the following location

Windows 32-bit

C:\Program Files\Microsoft Office\Office <version number>

Windows 64-bit with Office 32-bit

C:\Program Files (x86)\Microsoft Office\Office <version number>

Windows 64-bit with Office 64-bit

C:\Program Files\Microsoft Office\Office <version number>

Office 365 (Subscription based or Click-to-Run version of Office 2013)

C:\Program Files\Microsoft Office 15\root\office15

If SelfCert.exe is not installed

Then run Office setup and choose Add or Remove Features.

With older versions of Office you’ll need to choose Custom installation and then Advanced customization.

Expand the Office Shared Features section and select Digital Certificate for VBA Projects to run from your computer.

Simply run SelfCert.exe after locating it.

查看更多
登录 后发表回答