【问题标题】:Where can I save the settings entered by the user?我在哪里可以保存用户输入的设置?
【发布时间】:2018-03-07 22:06:12
【问题描述】:

VBA。

第 1 步
MS Project 文件已打开;
用户启动宏;
表格已打开;
用户输入路径;
用户点击“保存”;
用户关闭表单;
用户关闭 MS Project 文件。

第 2 步
用户打开 MS Project 文件;
用户赢得宏;
表格已打开;
表单显示用户为“Stage 1”注册的路径;

问题
当用户第二次打开表单(第 2 步)时,如何在表单中显示保存在(第 1 步)中的路径?
换句话说,在表单关闭后(第1步),文本框的值被保留了吗?

这个文本框值可以保存在 MS Project 文件中吗?
还是应该将其保存在单独的文件中?
如何做到最好?

【问题讨论】:

  • 看看方法 SaveSetting 和 GetSetting

标签: vba ms-project


【解决方案1】:

添加自定义文件属性以将信息存储在MS 项目文件中。例如:

Sub StorePath(newPath As String)
    Dim test As String
    test = GetPath()
    If Len(test) = 0 Then
        ActiveProject.CustomDocumentProperties.Add Name:="UserPath", LinkToContent:=False, Type:=msoPropertyTypeString, Value:=newPath
    Else
        ActiveProject.CustomDocumentProperties("UserPath") = newPath
    End If
End Sub

Function GetPath() As String
    On Error Resume Next
    GetPath = ActiveProject.CustomDocumentProperties("UserPath")
End Function

信息将存储在文件本身中,不同的文件可以有不同的路径存储,如果在另一台计算机上打开,路径仍然可用。

要在用户的计算机上保存单个值,无论打开哪个文件,请使用 SaveSettingGetSetting,正如 Sam 在上面的 cmets 中提到的那样。这些不与文件一起存储,并且在其他计算机上不可见。

【讨论】:

    【解决方案2】:

    项目的任务 0(项目摘要任务)很少使用,因此它的注释字段可以成为存储长数据的好地方。与 ActiveProject.CustomDocumentProperties 不同,任务 0 的注释不受 255 个字符的限制。

    访问任务 0 的笔记有点棘手。在任何其他任务上,您都会使用

    ActiveProject.Tasks(someTaskID).Notes = "really long strings"
    'where someTaskID is an integer variable
    

    但任务 0 的笔记被访问

    ActiveProject.Comments = "really long strings"
    

    【讨论】:

      【解决方案3】:

      进一步对 Rachel 的回答和对 Jerred S 的回应。评论,很容易克服 CustomDocumentProperties 的 255 个字符限制并将 War and Peace 存储在其中。编写一个函数,例如 function storeMyCDPstring(CDPNames as string, CDPVal as string)。它需要将 CDPVal 切成不超过 255 个字符的数据包,并将它们存储为索引的 CustomDocumentProperties。例如,您想在名为 "MyCDP" 的 CustomDocumentProperty 中存储一个 1000 个字符的字符串。您采用任意命名约定 - CDP 将由“#~#-n”索引:

      • 字符 1 到 255 将存储为 CustomDocumentProperty "myCDP#~#-1",
      • 字符 256 到 510 将存储为 CustomDocumentProperty "myCDP#~#-2",
      • 字符 511 到 765 将存储为 CustomDocumentProperty "myCDP#~#-3",
      • 字符 766 到 1000 将存储为 CustomDocumentProperty "myCDP#~#-4"

      您需要编写一个函数,例如 function getMyCDPstring(CDPNames as string),它必须检索、连接并返回所有子字符串。您还需要一个托管的 delMyCDP 函数来删除所有数据包。

      【讨论】:

        猜你喜欢
        • 2013-07-10
        • 2016-12-20
        • 2017-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多