gpt4 book ai didi

vba - BeforeClose 不会关闭我的 Excel-Sheet VBA

转载 作者:行者123 更新时间:2023-12-02 19:21:19 27 4
gpt4 key购买 nike

所以我一直在尝试整理一个小的 Excel 工作表,其中有一个登录条目。因此,每当关闭工作表时,都会添加名称、日期和时间。

所以基本上我运行了三个宏,我只会提到两个。主宏将询问我是否要关闭工作表,我必须回答"is"或“否”。这很好用。如果我按"is",主宏将调用子宏,这将要求我输入一个字符串。如果此输入框为空或条目被取消,我希望主子停止运行并取消关闭过程。这似乎不起作用。对我来说,代码中的错误似乎很清楚,但我不知道如何防止它并找到更好的解决方案。如果您能帮我想出一个解决方案,我将非常感激。

这行代码似乎是问题所在:

If Cancel_Button_LOG = False Then Cancel = True

这里我将添加两个宏的压缩版本

Public Sub Add_Entry_to_Log() 
Dim i As Integer
Dim response As Variant

Cancel_Button_LOG = True
response = InputBox("Please enter your Name", "Name")
If response <> "" Then
Else
Cancel_Button_LOG = False
MsgBox "Please enter your name", vbExclamation + vbOKOnly, "Name"
End If
Worksheets("Log").Protect "secret"
ThisWorkbook.Save
End Sub

现在我想使用 Cancel_Button_log 变量来取消主子:

    Dim answer As Variant 
answer = MsgBox("Are your sure you want to close the workbook?", vbYesNo) Cancel = False
Select Case answer
Case Is = vbYes
Worksheets("Log").Unprotect "secret"
Call Test
Call Add_Entry_to_Log
If Cancel_Button_LOG = False Then Cancel = True
Worksheets("Log").Protect "secret"
Case Is = vbNo
Cancel = True
End Select

ThisWorkbook.Save

End Sub

最佳答案

我认为你正在以最复杂的方式来做这件事。如果我正确理解您的要求 - 您可以将 ThisWorkbook 模块中的所有代码替换为如下内容:

Const WB_LOG As String = "Log" '// name of sheet that the log is in

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If MsgBox("Do you really want to close the workbook?", vbYesNo) = vbYes Then
With Sheets(WB_LOG)
.Range("A" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(1, 2).Value = Array(Environ$("USERNAME"), Now)
End With

ThisWorkbook.Save

Else
Cancel = True
End If
End Sub

Private Sub Workbook_Open()
With Sheets(WB_LOG)
.Protect Password:="secret", UserInterfaceOnly:=True
.Range("A1:B1").Value = Array("USERNAME", "TIMESTAMP")
End With
End Sub

这将不需要用户手动插入他们的姓名(假设他们的系统用户名就足够了*),并且也不需要每次都取消保护工作表,因为我使用了UserInterfaceOnly选项。

<小时/>

* 如果用户希望这样做并且知道如何操作,则诸如 %USERNAME% 之类的环境变量可以被伪造 - 然而,如果有人在文本框中输入自己的名字,则更容易伪造。 .

关于vba - BeforeClose 不会关闭我的 Excel-Sheet VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42922070/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com