gpt4 book ai didi

Excel 宏,运行一次且永不重复,通过 XLAM 分发

转载 作者:行者123 更新时间:2023-12-04 20:28:10 25 4
gpt4 key购买 nike

我正在尝试创建一个 XLAM,每次我进行修订时都可以分发它,这将打开一个 MsgBox在第一次运行时,但以后再也不会。我不希望最终用户必须保存或任何东西,因为我的最终用户倾向于打开 Excel 纯粹是为了使用简单的功能,例如创建序列运行以复制到剪贴板,然后关闭工作簿而不保存。

我找到了这个 --> http://www.vbaexpress.com/kb/getarticle.php?kb_id=511

但它需要保存工作簿,这是一个问题,因为我的用户通常不保存工作簿。我尝试添加 ActiveWorkbook.Save到不起作用的代码。我也试过把它放到ThisWorkBook它没有用,但我怀疑代码正在查看 Modules不是 ThisWorkBook .

有人有什么建议吗?我知道如何编写 MsgBox 的代码在开始时自动运行,但我不知道从哪里开始让它只运行一次。

我正在寻找仅代码选项,上述 URL 中列出的选项都没有吸引我,例如编辑工作簿、创建注册表编辑器或创建本地文件。

更新:

我有一个想法,我可以让宏删除 file.xlam即使它被加载到 Excel 中?某种“强制删除”

最佳答案

更新:
我今天刚刚对此表示赞同,并且实际上用我最近获得的一些知识以不同的方式处理了这个问题。
VBA 实际上有一个内置的保存/读取/更新 Windows Reg 功能,在一个受限文件夹中。我已经通过调用 shell 让它在其他地方读/写/更新,但如果可能的话,我更喜欢内置方法。
我用过这个https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/savesetting-statement保存一个说明“reset”= TRUE 的 reg 键,我的宏做的第一件事就是检查这个,如果它不存在,创建它并执行 XYZ。下一次运行它会找到 key 并继续前进。只是另一种方法..

我确信有许多不同的方法可以实现这一目标,并且每种方法都有其优点,具体取决于用例场景。在我的情况下,我最终做的是拥有一个 XLAM 文件,该文件将以下详细信息(用户名/日期/修订号)写入服务器上的中央“update_log.txt”文件,然后每次启动都会检查当前修订号和 update_log .txt 以确认用户已收到 MsgBox .如果没有,请显示它。
当我需要发送新消息时,我用新的 MsgBox 更新“Revision.XLAM”描述更新并增加更新版本号。
代码如下所示:
主副:

'''''PUBLICVARS'''''
Public blnFound As Boolean
Public UpdateRev As Variant
'''''ENDPUBVARS'''''
Public Sub UpdateMsg()

Call UpdateLogCheck ' Check and/or create Update_Log.txt
blnFound = False ' Always start false
UpdateRev = "Updated:1" & (Environ$("Username")) 'Increment with each Update
Call SearchTextFile(UpdateRev)

If Not blnFound = "True" Then
Call Update_Msg
Call IncrementUpdateLog(UpdateRev)
End If
End Sub
创建更新日志模块:
Public Sub UpdateLogCheck()
Dim UpdateFile As Variant
UpdateFile = "\\server\update_log.txt"
Set fs = CreateObject("Scripting.FileSystemObject")
If Dir(UpdateFile, vbDirectory) = vbNullString Then
Set a = fs.CreateTextFile(UpdateFile, False)
End If
End Sub
搜索更新日志模块:
Public Sub SearchTextFile(strSearch)
strFileName = "\\server\update_log.txt"
' Const strSearch = "Updated:1"
Dim strLine As String
Dim f As Integer
Dim lngLine As Long
f = FreeFile
Open strFileName For Input As #f
Do While Not EOF(f)
lngLine = lngLine + 1
Line Input #f, strLine
If InStr(1, strLine, strSearch, vbBinaryCompare) > 0 Then
blnFound = True
Exit Do
End If
Loop
Close #f
End Sub
UpdateMsg 模块:
Public Sub Update_Msg()

Dim line1 As Variant
Dim line2 As Variant
Dim line3 As Variant
Dim line4 As Variant
Dim line5 As Variant
Dim line6 As Variant
Dim line7 As Variant
Dim line8 As Variant
Dim line9 As Variant

line1 = "This is the 'New Revision' Message, it should only appear once when there is a new revision"
line2 = "This Revision focused on this new delivery system for Revision Updates"


MsgBox line1 & vbCrLf & vbCrLf & _
line2 & vbCrLf & vbCrLf & _
line3 & vbCrLf & vbCrLf & _
line4 & vbCrLf & vbCrLf & _
line5 & vbCrLf & vbCrLf & _
line6 & vbCrLf & vbCrLf & _
line7 & vbCrLf & vbCrLf & _
line8 & vbCrLf & vbCrLf & _
line9 & vbCrLf & vbCrLf

End Sub
增加/更新日志文件:
Public Sub IncrementUpdateLog(UpdateRev)

Dim UpdateFile As Variant
UpdateFile = "\\server\update_log.txt"
Open UpdateFile For Append As #1
Write #1, UpdateRev
Close #1

End Sub

关于Excel 宏,运行一次且永不重复,通过 XLAM 分发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55391672/

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