当我手动运行代码时有效,但在Workbook_Open事件运行时则无效

时间:2019-08-04 04:33:11

标签: excel vba

我有一个文件,当它打开Workbook_Open事件时,它将运行下面的代码。除了一行代码,其他所有内容似乎都正常运行。状态为wb.Close savechanges:= False的代码行未执行所需的操作。

如果我立即从Visual Basic编辑器中自己触发此事件,它将运行,然后此行代码起作用。

如果我将文件保存在硬盘上,这似乎不是问题。仅当我将文件保存在OneDrive上时,它才会执行此操作。我不是从Excel在线运行此程序。我正在Excel应用程序中运行它,并从OneDrive打开文件。

Private Sub Workbook_Open()

    Dim wb As Workbook: Set wb = ThisWorkbook

    Application.ScreenUpdating = False

    'Pull User_Name
        Range("U_Nm").Value = Application.UserName

    'Pull Serial Number from Computer
        Dim fsObj   As Object
        Dim drv     As Object
        Set fsObj = CreateObject("Scripting.FileSystemObject")
        Set drv = fsObj.Drives("C")

        Range("SN").Value = Left(Hex(drv.SerialNumber), 4) _
             & "-" & Right(Hex(drv.SerialNumber), 4)

    Range("Current_Date").Value = Date

    'Sheets("Security").Visible = xlSheetVeryHidden
    Sheets("Security").Visible = True


    '**********CHECK CURRENT VALUES FIRST...IF PASSES THEN PASS...IF IT DOESN'T PASS THEN UPDATE...IF NO INTERNET CONNECTION REQUEST THEY CONNECT TO INTERNET TO CONNECT**********

    If Range("Full_Validation").Value <> "Valid" Then

        'you must be connected to the internet to proceed

        Sheets("Security").Range("Licensing").ListObject.QueryTable.Refresh BackgroundQuery:=False
        ActiveSheet.Calculate

        If Range("User_Validation").Value <> "Valid" Then

            Set objShell = CreateObject("Wscript.Shell")

            intMessage = MsgBox("You need to register with Doug & Mark!" & vbCr _
            & vbCr _
            & "Click 'Yes' below to submit your registration information.  You will be notified when your registration is complete." & vbCr _
            & vbCr _
            & "The information below will be required to complete the registration form." & vbCr _
            & vbCr _
            & "User Name:  " & Application.UserName & vbCr _
            & "Computer:  " & Range("SN").Value & vbCr _
            & "Excel Version:  " & Application.Version & " running on " & Application.OperatingSystem, vbYesNo, "Invalid User!")

            If intMessage = vbYes Then
                objShell.Run ("https://forms.gle/xjB7yA2ehHfU6xoV6")
            Else
                'Wscript.Quit
            End If

            MsgBox "The information below is required to complete the registration form." & vbCr _
            & vbCr _
            & "User Name:  " & Application.UserName & vbCr _
            & "Computer:  " & Range("SN").Value & vbCr _
            & "Excel Version:  " & Application.Version & " running on " & Application.OperatingSystem, vbInformation, "Invalid User!"

            wb.Close savechanges:=False

        ElseIf Range("SN_Validation").Value <> "Valid" Then

           Set objShell = CreateObject("Wscript.Shell")

           intMessage = MsgBox("You need to register with Doug & Mark!" & vbCr _
            & vbCr _
            & "Click 'Yes' below to submit your registration information.  You will be notified when your registration is complete." & vbCr _
            & vbCr _
            & "The information below will be required to complete the registration form." & vbCr _
            & vbCr _
            & "User Name:  " & Application.UserName & vbCr _
            & "Computer:  " & Range("SN").Value & vbCr _
            & "Excel Version:  " & Application.Version & " running on " & Application.OperatingSystem & "!", vbYesNo, "Invalid License!")

            If intMessage = vbYes Then
                objShell.Run ("https://forms.gle/xjB7yA2ehHfU6xoV6")
            Else
                'Wscript.Quit
            End If

            MsgBox "The information below is required to complete the registration form." & vbCr _
            & vbCr _
            & "User Name:  " & Application.UserName & vbCr _
            & "Computer:  " & Range("SN").Value & vbCr _
            & "Excel Version:  " & Application.Version & " running on " & Application.OperatingSystem & "!", vbInformation, "Invalid User!"

            wb.Close savechanges:=False

        ElseIf Range("Expiry_Validation").Value <> "Valid" Then

            Set objShell = CreateObject("Wscript.Shell")

            intMessage = MsgBox("Your Investment Calculator subscription has Expired!" & vbCr _
                & vbCr _
                & "You will need to renew your subscription to the Investment Calculator." & vbCr _
                & vbCr _
                & "Click 'Yes' to renew your subscription now.", _
                vbYesNo, "Subscription Renewal")

            If intMessage = vbYes Then
                objShell.Run ("https://www.sltrib.com/sports/byu-cougars/")
            Else
                'Wscript.Quit
            End If

            wb.Close savechanges:=False

        End If

        'Sheets("Security").VeryHidden = True
        Application.ScreenUpdating = True

    End If

    If Range("Expiry_Date").Value - 5 <= Date Then

        Set objShell = CreateObject("Wscript.Shell")

        If Range("Expiry_Date").Value - Date = 0 Then

            intMessage = MsgBox("Your Investment Calculator subscription will expire Today!" & vbCr _
                & vbCr _
                & "You will need to renew your subscription to the Investment Calculator." & vbCr _
                & vbCr _
                & "Click 'Yes' to renew your subscription now.", _
                vbYesNo, "Subscription Renewal")

        ElseIf Range("Expiry_Date").Value - Date = 1 Then

            intMessage = MsgBox("Your Investment Calculator subscription will expire in " & Range("Expiry_Date").Value - Date & " day!" & vbCr _
                    & vbCr _
                    & "You will need to renew your subscription to the Investment Calculator." & vbCr _
                    & vbCr _
                    & "Click 'Yes' to renew your subscription now.", _
                    vbYesNo, "Subscription Renewal")

        ElseIf Range("Expiry_Date").Value - Date > 0 Then

            intMessage = MsgBox("Your Investment Calculator subscription will expire in " & Range("Expiry_Date").Value - Date & " days!" & vbCr _
                & vbCr _
                & "You will need to renew your subscription to the Investment Calculator." & vbCr _
                & vbCr _
                & "Click 'Yes' to renew your subscription now.", _
                vbYesNo, "Subscription Renewal")

        End If

        If intMessage = vbYes Then
            objShell.Run ("https://www.sltrib.com/sports/byu-cougars/")
        End If

    End If

    If Range("Full_Validation").Value = "Invalid" Then
        ThisWorkbook.Close savechanges:=False
    End If


    Application.ScreenUpdating = True

    'Range("U_Nm").ClearContents
    'Range("SN").ClearContents

End Sub

我期望与运行此行代码时文件将关闭的行为相同。当我将其放在硬盘驱动器上时,它可以工作;如果手动触发事件,它也可以运行。但是,如果它在OneDrive上并通过Workbook_Open事件自动运行,则无法使用。

0 个答案:

没有答案