如果您喜欢冒险,这里有一个可以让您感到愉悦的解决方案。从标准代码模块开始。默认情况下,它将被称为Module1。将以下两个过程放在该模块中。模块叫什么无关紧要,但一定不要使用ThisWorkbook 代码模块,也不要使用任何以工作表命名的代码模块。
函数“SavedDataFileName”是您声明要存储要记住的数据的位置的地方。您可以使用任何您喜欢的位置。该代码指定了一个类似C:\Users\[Your Name] 的位置。您也可以更改文件名。关键是所有这些都存储在一个地方,当文件被读取和写入时,它会被检索到。
Option Explicit
Function SavedDataFileName() As String
' create this as a function to be called by various parts of your code
' so that you don't have to repeat it in many places in case of future change
SavedDataFileName = Environ("USERPROFILE") & "\SavedPath.txt"
End Function
下一个函数读取刚刚指定的文本文件。实际上,这是我准备好的代码。因此,它具有读取许多数据的能力。您只想阅读一个 - 路径。它会这样做。
Function TextFile(Ffn As String, _
MaxLines As Integer) As String()
' 17 Oct 2016
Dim Fun() As String ' Function return
Dim i As Integer
Dim Fid As Integer ' File ID
If Len(Dir(Ffn)) Then
ReDim Fun(MaxLines) ' arbitrary maximum
Fid = FreeFile()
Open Ffn For Input As #Fid
While Not EOF(Fid)
Line Input #Fid, Fun(i)
Fun(i) = Trim(Fun(i))
i = i + 1
Wend
Close #Fid
ReDim Preserve Fun(i - 1)
End If
TextFile = Fun
End Function
现在请转到您希望保留数据的表单的代码表。以下所有程序都必须在该表格上。不要将它们安装在其他任何地方。它们只有在安装在该特定代码表上时才能工作。
第一个过程在表单初始化时运行,这意味着它第一次创建时 - 在启动时。
Option Explicit
Private Sub UserForm_Initialize()
' 13 May 2017
Dim SavedData() As String
On Error GoTo EndRetrieval
SavedData = TextFile(SavedDataFileName, 10)
TextBox1.Text = SavedData(0)
' you can pre-load more controls in your form here
EndRetrieval:
End Sub
在此子文件中打开文本文件并从中导入数据。预计最多有 10 个数据。您可以将此数字设置得更高或更低。设置得越高,临时使用的内存空间就越多。您只需要 1 个数据项。这将具有索引号 0(零),并将其分配给 TextBox1。当然,你可以改变它。如果遇到错误,将不执行任何操作,文本框保持空白。
下一个过程将在您退出 TextBox1 时运行。当然,您可以更改其名称以引用另一个文本框。其目的是确保文本框包含有效的路径名。如果用户输入了无效的名称,他会被告知。
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
' 13 May 2017
Dim Ffn As String ' Full file name
Ffn = Trim(TextBox1.Text)
On Error Resume Next
' For testing MsgMe is a sub containing a MsgBox.
' MsgMe Dir(Ffn & "\", vbDirectory) & ", " & Len(Dir(Ffn & "\", vbDirectory))
Cancel = (Len(Ffn) = 0) Or (Len(Dir(Ffn & "\", vbDirectory)) = 0)
If Not Cancel Then Cancel = CBool(Err.Number) ' in case Dir(Ffn) caused an error
If Cancel Then
MsgBox "The path you entered isn't valid." & vbCr & _
"Please enter a valid path."
Else
TextBox1.Text = Ffn ' removed leading/trailing blanks
End If
End Sub
最后的过程在表单关闭时运行。它将 TextBox1 的当前设置写入文本文件,下次加载表单时将从该文件中检索。
Private Sub UserForm_Terminate()
' 12 May 2017
Open SavedDataFileName For Output As #1
Print #1, TextBox1.Text
' you can write more data to be remembered here
Close #1
End Sub
此过程仅将一行写入文本文件。如果要保存更多项目,只需将更多值打印到文件中。请注意未检查保存的数据的质量。这是在输入之后完成的。如果用户设法将错误路径偷偷带入文本框,则该错误路径将在第二天早上再次困扰他。