我正在尝试在VBA Powerpoint中替换并保存一个整数。
我在一个名为projectId的子程序中有一个变量。此时,变量设置为617.在另一个子例程中,我正在运行一个用户输入方法,提示用户输入一个新的projectId并存储新的projectId以替换" 617"。唯一的问题是当我关闭PowerPoint并重新打开它时,projectId转到0。
对于此示例,是否有任何方法可以将代码projectId = 617
与projectId = 699
进行物理替换。
以下是我正在使用的代码,请注意 projId
是全球可靠的:
Dim projId As Integer
Sub ChangeProjID()
Dim strProjId As String
Dim intProjId As Integer
strProjId = InputBox("Enter the Project ID given by example:", "Project ID Input")
On Error GoTo NotValidID
intProjId = CInt(strProjId)
projId = intProjId
MsgBox " Your new project ID will be set to " & intProjId & " until changed again"
Exit Sub
NotValidID:
MsgBox " You must enter a valid integer"
End Sub
Public Sub CommentConnect(control As IRibbonControl)
Dim URL As String
projId = 617
URL = "example.com/prID="
ActivePresentation.FollowHyperlink (URL & projId)
End Sub
答案 0 :(得分:2)
如果CommentConnect()
在 ChangeProjID()
后被称为,则行projId = 617
将覆盖用户在ChangeProjID()
中输入的任何值。
我看到了几个解决这个问题的方法。
ChangeProjID()
的签名更改为:Function ChangeProjID() as Integer
CommentConnect to:
projId = ChangeProjID()
CommentConnect()
中的行更改为:If projId = 0 then
projId = 617 'use this value as a default
End If
对于选项1,完整的,已更改的代码如下所示:
Function ChangeProjID() As Integer
Dim strProjId As String
Dim intProjId As Integer
strProjId = InputBox("Enter the Project ID given by example:", "Project ID Input")
On Error GoTo NotValidID
intProjId = CInt(strProjId)
MsgBox " Your new project ID will be set to " & intProjId & " until changed again"
ChangeProjID = intProjId
Exit Sub
NotValidID:
MsgBox " You must enter a valid integer"
End Sub
Public Sub CommentConnect(control As IRibbonControl)
Dim URL As String
projId = ChangeProjID
URL = "example.com/prID="
ActivePresentation.FollowHyperlink (URL & projId)
End Sub
选项2的完整更改代码为:
Public Sub CommentConnect(control As IRibbonControl)
Dim URL As String
if projId = 0 then
projId = 617 'use project 617 as the default
End If
URL = "example.com/prID="
ActivePresentation.FollowHyperlink (URL & projId)
End Sub
请注意,无论你做什么,当你第一次打开PPTX时,projId
将默认为0
- 这是变量的性质,它们在应用程序启动时具有默认值,直到另外设置为止。
如果需要,可以创建某种机制,将projId
存储在非易失性存储器中(文本文件,注册表,隐藏(背景颜色=前景色)字段在第一张幻灯片上PPT等)。或者您可以对projId
进行某种初始化,以便在启动代码时始终将其设置为某个已知的非零值,但不将保留其最后一个设置值一个人。
答案 1 :(得分:2)
FreeMan有正确的想法......将值存储在非易失性存储器中。
幸运的是,PowerPoint有一个非常适合的功能:标签。
With ActivePresentation
.Tags.Add "ProjectID", Cstr(intProjID)
End With
intProjID的字符串版本现在是附加到表示对象的永久“标记”。要检索它:
MsgBox ActivePresentation.Tags("ProjectID")
每个演示文稿,幻灯片和形状都可以包含任意数量的标签。