简体   繁体   English

打开随机的excel文件

[英]Opening random excel files

I am a rookie Excel VBA coder.我是新手 Excel VBA 编码员。 Wrote a subrouting which calls other subroutines in VBA.在 VBA 中编写了一个调用其他子程序的子路由。 For some reason excel opens other files from the recent files.出于某种原因,excel 会从最近的文件中打开其他文件。 I checked XLStart folder to see anything is there but to no avail.我检查了 XLStart 文件夹以查看是否有任何内容,但无济于事。 Could you help in rehashing the code below... I am not sure where the code is causing problem.你能帮忙重新整理下面的代码吗...我不确定代码在哪里引起了问题。

Public Sub RunAutoTasks()

    On Error GoTo ErrHandler

    'Initialize Variables
    Dim DailyResetTime As Integer
    Dim MakeBackup As Boolean
    Dim MakeNewSheets As Boolean
    Dim ResetDay As String
    
    Set sheetHome = ThisWorkbook.Worksheets("START")
    'Build Reset Time from Settings (Note: 12:00 AM will set this to 0 at the end)
    DailyResetTime = 0
    If sheetHome.Range("Setting_Daily_Reset_AMPM").Value = "PM" Then DailyResetTime = DailyResetTime + 1200
    If sheetHome.Range("Setting_Daily_Reset_Hour").Value < 12 Then DailyResetTime = DailyResetTime + (sheetHome.Range("Setting_Daily_Reset_Hour").Value * 100)
    DailyResetTime = DailyResetTime + sheetHome.Range("Setting_Daily_Reset_Minute").Value
    
    'Create New Worksheet if day/time criteria is met
    MakeNewSheets = False
    ResetDay = sheetHome.Range("Setting_Reset_When").Value
    
    Select Case ResetDay
    Case "Everyday"
        MakeNewSheets = True
    Case "Weekdays"
        If Weekday(Now) > 1 And Weekday(Now) < 7 Then MakeNewSheets = True
    Case "Monthly"
        
    Case Else
        If ResetDay = "Sunday" And Weekday(Now) = 1 Then MakeNewSheets = True
        If ResetDay = "Monday" And Weekday(Now) = 2 Then MakeNewSheets = True
        If ResetDay = "Tuesday" And Weekday(Now) = 3 Then MakeNewSheets = True
        If ResetDay = "Wednesday" And Weekday(Now) = 4 Then MakeNewSheets = True
        If ResetDay = "Thursday" And Weekday(Now) = 5 Then MakeNewSheets = True
        If ResetDay = "Friday" And Weekday(Now) = 6 Then MakeNewSheets = True
        If ResetDay = "Saturday" And Weekday(Now) = 7 Then MakeNewSheets = True
    End Select
    
    If ((Hour(Now) * 100) + Minute(Now)) < DailyResetTime Then MakeNewSheets = False

    If MakeNewSheets = True Then NewShiftSheet

    'Create New Backup if day/time criteria is met
    MakeBackup = False

    Select Case sheetHome.Range("Setting_Backup_When").Value
    Case "Everyday"
        If ((Hour(Now) * 100) + Minute(Now)) >= DailyResetTime Then MakeBackup = True
    Case "New Sheet"
        If MakeNewSheets = True Then MakeBackup = True
    Case Else
    End Select

    If MakeBackup = True Then NewBackup

    'Auto Save the Workbook locally
    If sheetHome.Range("Setting_Save_Interval").Value = 60 Then
        RunWhen = Now + TimeValue("1:00:00")
    Else
        RunWhen = Now + TimeValue("0:" & sheetHome.Range("Setting_Save_Interval").Value & ":00")
    End If
    
    Application.DisplayAlerts = False
    ThisWorkbook.Save
    Application.DisplayAlerts = True
    LogEvent "Event", "Workbook Saved"

    Application.OnTime RunWhen, "RunAutoTasks"
    sheetHome.Range("Last_AutoSave").Value = Now()

    Exit Sub
    
ErrHandler:
    LogEvent "Error", "Sub: RunAutoTasks | " & Err.Number & ": " & Err.Description
    On Error GoTo -1

End Sub

Is the .activate causing the problem from the below code? .activate 是否导致以下代码的问题?

Public Sub NewShiftSheet()

    On Error GoTo ErrHandler

    'Initialize Variables
    Dim sheetCopy As Worksheet
    Dim sheetExistsCopyFrom As Boolean
    Dim sheetExistsCopyTo As Boolean
    Dim sheetCopyFromCheck As String
    Dim sheetCopyToCheck As String
    Dim sheetNames As Integer
    Dim sheetPrepend As String

    'Get Todays Date
    Dim TodaysDate As String
    TodaysDate = Format(Now(), "mm-dd-yyyy")
    
    'Check for and Create up to 3 Worksheets
    i = 1
    j = 0
    Do While i < 4
    
        'Check if Sheet 1-3 is Declared for Copy
        If sheetHome.Range("Setting_Copy_Sheet" & i).Value <> "" Then
            sheetPrepend = Trim(sheetHome.Range("Setting_Copy_Prepend" & i).Value)
    
            'Check Today's Sheet Doesn't Already Exist
            sheetExistsCopyFrom = False
            sheetExistsCopyTo = False
            sheetCopyFromCheck = sheetHome.Range("Setting_Copy_Sheet" & i).Value
            sheetCopyToCheck = sheetPrepend & " " & TodaysDate
            
            For sheetNames = ThisWorkbook.Worksheets.Count To 1 Step -1
                If ThisWorkbook.Worksheets(sheetNames).Name = sheetCopyFromCheck Then
                    sheetExistsCopyFrom = True
                    'Exit For   'Commented out, because Copy From sheets should be listed first and identified before the CopyToCheck below
                End If
                
                If ThisWorkbook.Worksheets(sheetNames).Name = sheetCopyToCheck Then
                    sheetExistsCopyTo = True
                    Exit For
                End If
            Next
            
            If sheetExistsCopyFrom = True And sheetExistsCopyTo = False Then
                Set sheetCopy = ThisWorkbook.Worksheets(sheetHome.Range("Setting_Copy_Sheet" & i).Value)
                Application.DisplayAlerts = False
                sheetCopy.Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
                Application.DisplayAlerts = True
                
                ThisWorkbook.ActiveSheet.Name = sheetCopyToCheck
                curSheets(j) = sheetCopyToCheck
                If sheetHome.Range("Setting_Copy_Date" & i).Value <> "" Then ThisWorkbook.Worksheets(sheetCopyToCheck).Range(sheetHome.Range("Setting_Copy_Date" & i).Value).Value = Date
                ThisWorkbook.Worksheets(sheetCopyToCheck).Activate
                LogEvent "Event", "New Sheet Created (" & sheetCopyFromCheck & " -> " & sheetCopyToCheck & ")"
                'Reset Backup Status Note
                If sheetHome.Range("Setting_Backup_Save").Value = "On" Then sheetHome.Range("Backup_Status").Value = "Enabled"
                End If
        
            'Empty Variables (if necessary)
            sheetPrepend = ""
            End If

        i = i + 1
        j = j + 1
    Loop

    Exit Sub

If a user performs a SaveAs on the workbook while an OnTime event is pending and then closes it, the OnTime when it fires will re-open the copy of the workbook, not the original workbook.如果用户在OnTime事件挂起时对工作簿执行SaveAs然后将其关闭,则OnTime触发时将重新打开工作簿的副本,而不是原始工作簿。

It's quite likely you're seeing something like that in this case, since there's no code in your subs which would open any workbooks.在这种情况下,您很可能会看到类似的内容,因为您的子程序中没有可以打开任何工作簿的代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM