我在哪里可以保存用户输入的设置?

时间:2018-02-22 18:34:54

标签: vba ms-project

VBA。

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

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

enter image description here

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

此文本框值是否可以保存在MS Project文件中?
或者我应该将其保存在单独的文件中? 这怎么做得最好?

3 个答案:

答案 0 :(得分:2)

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

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所述。它们不与文件一起存储,也不会在其他计算机上显示。

答案 1 :(得分:0)

项目的任务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"

答案 2 :(得分:0)

继Rachel的答案以及对Jerred S.的回应注释,很容易克服CustomDocumentProperties的255 char限制并在那里存储 War and Peace 。编写函数 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”
  • chars 511到765将存储为CustomDocumentProperty “myCDP#〜#-3”
  • 字符766到1000将存储为CustomDocumentProperty “myCDP#〜#-4”

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