vba - 如何防止共享点文件签入在关闭前触发工作簿?
问题描述
我的 sub Workbook_BeforeClose 运行了两次,因为在我的 Sub CloseWBFromSharePointFolder 中,我要么签入我的文件,要么丢弃它,要么取消并且什么都不做(参见下面的代码)。签入和丢弃文件都会触发 Workbook_BeforeClose 再次运行。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
CloseWBFromSharePointFolder
End Sub
CloseWBFromSharePointFolder 中触发 Workbook_BeforeClose 的两个片段
报到
ActiveWorkbook.CheckIn SaveChanges:=True, Comments:="Checked-In by " & Application.Username
丢弃
Application.ActiveWorkbook.CheckIn False
任何帮助,将不胜感激。
Ps 我还尝试使用公共变量来跟踪它是否再次运行。这不起作用,因为公共变量已重置。我找到的解释是因为 Workbook_BeforeClose 调用了 CloseWBFromSharePointFolder,然后触发了 Workbook_BeforeClose。这将重置所有内容并且公共变量变为空
PS2了解更多详情。
CloseWBFromSharePoint 文件夹代码
Sub CloseWBFromSharePointFolder()
Dim myForm1 As UserForm1
Set myForm1 = UserForm1
myForm1.Caption = "Choose before closing:"
myForm1.Show
End Sub
UserForm1 代码
Dim Buttons() As New BtnClass
Private Sub UserForm_Initialize()
Dim ButtonCount As Integer
Dim ctl As Control
' Create the Button objects
ButtonCount = 0
For Each ctl In UserForm1.Controls
If TypeName(ctl) = "CommandButton" Then
'Skip the OKButton
If ctl.Name <> "OKButton" Then
ButtonCount = ButtonCount + 1
ReDim Preserve Buttons(1 To ButtonCount)
Set Buttons(ButtonCount).ButtonGroup = ctl
End If
End If
Next ctl
Me.CommandButton1.Caption = "Check in"
Me.CommandButton2.Caption = "Discard check-out"
Me.CommandButton3.Caption = "Keep checked-out"
Me.CommandButton4.Caption = "Cancel"
End Sub
BtnClass 代码
Public WithEvents ButtonGroup As MsForms.CommandButton
Private Sub ButtonGroup_Click()
If UserForm1.Visible = True Then
Select Case ButtonGroup.Name
Case "CommandButton1" 'check in
CheckIn
Case "CommandButton2" 'Discard check-out
Discard
Case "CommandButton3" 'Keep checked-out
KeepCheckedOut
Case Else ' Cancel
'Do Nothing
End Select
Unload UserForm1
ElseIf UserForm2.Visible = True Then
Select Case ButtonGroup.Name
Case "CommandButton1" 'check out
CheckOut
Case "CommandButton2" 'Read only
'Do Nothing
Case Else ' Cancel
'Do Nothing
End Select
Unload UserForm2
End If
End Sub
Sub CheckIn()
If ActiveWorkbook.CanCheckIn = True Then
'Check In, Save and Close
ActiveWorkbook.CheckIn SaveChanges:=True, Comments:="Checked-In by " & Application.Username
MsgBox ("File sucessfully checked in")
Else
MsgBox ("File could not be checked in!")
End If
End Sub
解决方案
推荐阅读
- java - 在同一行中存储多个值的数据类型
- javascript - vuejs - 在同一个文件中同步变量
- java - 如何从java中的私钥中提取模数和私有指数?
- php - 通过 laravel Mysql 使用 Distinct 和 group
- django - Django Rest Framework:在 ModelViewSet 中覆盖 perform_create 的正确方法?
- python - 如何使用数据框中的 matplotlib 绘制这种类型的直方图
- php - 获取帖子元显示没有结果
- python - Python列表到JSON的问题
- android - RecyclerView 适配器无法工作
- excel - VBA清除单元格旁边的行内容