在使用VBAclosures主要closures之前,需要依赖的辅助excel工作簿被保存并closures

我是VBA的新手,正在寻求一些帮助。 我有一个仪表板访问用户input他们的信息的第二个文件。 我想知道在closures已启动的原始仪表板之前是否有任何方法可以要求closures辅助工作簿。

例如:如果CCC_Error_Tracker.xlsm当前处于活动状态,则在FPA_Opportunities_v6.xlsmclosures时,需要closuresCCC_Error_Tracker.xlsm,然后才能closuresFPA_Opportunities_v6.xlsm。

我想要closures的文件位于“Supporting_Files \ CCC_Error_Tracker.xlsm”用户启动的主要仪表板位于:\\\ Opportunities_Dashboard \ FPA_Opportunities_v6.xlsm。

现在,我已经设置了它将检测的位置,因为只有团队负责人应该能够对此进行更改,因为我的FPA_Opportunities_v6.xlsm仪表板是只读​​的。 向用户提供的响应是:“授权的船长没有进行任何更改,如果已经对CCS_Error_Tracker进行了更改,并且提示您的更改已经保存,那么您就可以进行操作了,请closures该窗口以保存设置“。

如果可能,我宁愿不要混淆最终用户。 简单的解决办法是必须要求closures。 有什么想法吗? 我觉得这对其他用户也是有益的

Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim ws As Worksheet Sheets("START").Visible = xlSheetVisible For Each ws In ThisWorkbook.Worksheets If ws.Name <> "START" Then ws.Visible = xlVeryHidden End If Next ws CodeRetry: On Error GoTo Failed If Me.Saved = True And BackupReqd = False Then Exit Sub Dim sDateTime As String, sFileName As String With ThisWorkbook sDateTime = " (" & Format(Now, "yyyy-mm-dd hhmm") & ").xlsm" sFileName = Replace(.Name, ".xlsm", sDateTime) .SaveCopyAs Filename:="P:\WI\Teams\Programs\J&J CCC\CHC & Skincare\Care Specialist\Alicia's Team\FPA RESULTS\Supporting_Files\FPA_FILE_BACKUPS\Opportunities_Dashboard\" & sFileName GoTo Passed Failed: GoTo CodeRetry Exit Sub Passed: Application.DisplayAlerts = False If ThisWorkbook.ReadOnly = True Then GoTo Passed2 GoTo Passed3 Passed2: If IsWorkbookOpen("P:\WI\Teams\Programs\J&J CCC\CHC & Skincare\Care Specialist\Alicia's Team\FPA RESULTS\Supporting_Files\CCC_Error_Tracker.xlsm") Then MsgBox "Excel has detected that your `Team Error Tracker` is still open and not been saved. The opportunities Dashboard will be closing but please remember in order to save your data you must close CCC_Error_Tracker.", vbInformation End If GoTo End1 Passed3: ThisWorkbook.Save MsgBox "Your data has been saved and backed-up successfully! Your backup will be stored for 72 hours before discarded to save disk space. Email chrischm@altaresources.com if you have a suggestion." End1: End With End Sub Function IsWorkbookOpen(workbookName As String) Dim ret As Boolean ret = False On Error Resume Next For Each wb In Application.Workbooks If wb.Name = workbookName Then ret = True GoTo EarlyExit End If Next On Error GoTo 0 EarlyExit: IsWorkbookOpen = ret End Function 

让我知道是否还有其他的东西可以帮助别人。 我希望尽可能准确。 请提供任何提示,谢谢。

testing一本书是否closures的简单方法是testing它是否不再打开。

此函数将检查工作簿(由名称指定)是否已打开,并将返回一个布尔True或False值,您可以在代码逻辑中使用该值来检查工作簿是否仍处于打开状态。

例如:

 If IsWorkbookOpen("FPA_Opportunities_v6.xlsm") Then MsgBox "A message box to let the user know they need to save & close first..., etc.", vbInformation End If 

这是function:

 Function IsWorkbookOpen(workbookName as String) Dim ret as Boolean ret = False On Error Resume Next For each wb in Application.Workbooks If wb.Name = workbookName Then ret = True GoTo EarlyExit End If Next On Error GoTo 0 EarlyExit: IsWorkbookOpen = ret End Function 

确保在Sub 之外放置函数, End Sub之后立即好,或者你可以把它放在Sub ...之前,或者如果你愿意,可以放在不同的模块中。

您当前的代码只检查本地计算机上的当前实例,该文件可能在另一个实例中打开,或在另一台计算机上打开altogther

下面的代码(信用芯片皮尔逊 )testing,以查看文件是否在任何机器上打开。

input您的完整文件path来检查。

S:\Opportunities_Dashboard\FPA_Opportunities_v6.xlsm

testing文件

 Sub CheckWb() If IsFileOpen("C:\temp\checka.xlsm") Then MsgBox "File open somewhere .....", vbInformation End Sub 

检查function

 Private Function IsFileOpen(FileName As String) As Boolean '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' IsFileOpen ' By Chip Pearson www.cpearson.com/excel chip@cpearson.com ' This function determines whether a file is open by any program. Returns TRUE or FALSE '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim FileNum As Integer Dim ErrNum As Integer On Error Resume Next ' Turn error checking off. ''''''''''''''''''''''''''''''''''''''''''' ' If we were passed in an empty string, ' there is no file to test so return FALSE. ''''''''''''''''''''''''''''''''''''''''''' If FileName = vbNullString Then IsFileOpen = False Exit Function End If ''''''''''''''''''''''''''''''' ' If the file doesn't exist, ' it isn't open so get out now. ''''''''''''''''''''''''''''''' If Dir(FileName) = vbNullString Then IsFileOpen = False Exit Function End If '''''''''''''''''''''''''' ' Get a free file number. '''''''''''''''''''''''''' FileNum = FreeFile() ''''''''''''''''''''''''''' ' Attempt to open the file ' and lock it. ''''''''''''''''''''''''''' Err.Clear Open FileName For Input Lock Read As #FileNum '''''''''''''''''''''''''''''''''''''' ' Save the error number that occurred. '''''''''''''''''''''''''''''''''''''' ErrNum = Err.Number On Error GoTo 0 ' Turn error checking back on. Close #FileNum ' Close the file. '''''''''''''''''''''''''''''''''''' ' Check to see which error occurred. '''''''''''''''''''''''''''''''''''' Select Case ErrNum Case 0 ''''''''''''''''''''''''''''''''''''''''''' ' No error occurred. ' File is NOT already open by another user. ''''''''''''''''''''''''''''''''''''''''''' IsFileOpen = False Case 70 ''''''''''''''''''''''''''''''''''''''''''' ' Error number for "Permission Denied." ' File is already opened by another user. ''''''''''''''''''''''''''''''''''''''''''' IsFileOpen = True ''''''''''''''''''''''''''''''''''''''''''' ' Another error occurred. Assume the file ' cannot be accessed. ''''''''''''''''''''''''''''''''''''''''''' Case Else IsFileOpen = True End Select End Function