替换vba powerpoint中的变量

时间:2015-06-10 13:57:50

标签: vba excel-vba variables powerpoint-vba excel

我正在尝试在VBA Powerpoint中替换并保存一个整数。

我在一个名为projectId的子程序中有一个变量。此时,变量设置为617.在另一个子例程中,我正在运行一个用户输入方法,提示用户输入一个新的projectId并存储新的projectId以替换" 617"。唯一的问题是当我关闭PowerPoint并重新打开它时,projectId转到0。

对于此示例,是否有任何方法可以将代码projectId = 617projectId = 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

2 个答案:

答案 0 :(得分:2)

如果CommentConnect()ChangeProjID()后被称为,则行projId = 617将覆盖用户在ChangeProjID()中输入的任何值。

我看到了几个解决这个问题的方法。

  1. ChangeProjID()的签名更改为:Function ChangeProjID() as Integer
    然后更改CommentConnect to:
    projId = ChangeProjID()
  2. 中的行
  3. CommentConnect()中的行更改为:
    If projId = 0 then
    projId = 617 'use this value as a default
    End If
  4. 对于选项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")

每个演示文稿,幻灯片和形状都可以包含任意数量的标签。