[英]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.