使用文本文件为 Access 表单中的字段提供默认值

Posted

技术标签:

【中文标题】使用文本文件为 Access 表单中的字段提供默认值【英文标题】:Use text file to provide the default value for a field in Access form 【发布时间】:2014-04-14 16:57:56 【问题描述】:

我在 Microsoft Access 中有一个弹出窗口,其中包含需要用户填写的文本框字段,例如:

First Name:
Last Name:

现在我正在尝试创建一个按钮,单击该按钮会查看 C:\mytextfile.txt 并自动填充这些字段。

在文本文件中它看起来像这样:

##$@#%#$543%#$%#$$#%LAST NAME:BOB#$#@$@#$@#$@#FIRST NAME:DERRICK$#%$#%$#%#$%$#%$#

所以基本上我在寻找 3 件事:

    访问文本文件 解析数据 将其填充到文本框中。 (在点击“保存”按钮之前,数据不需要进入表格”)

更新: 这是我目前写的,我不知道为什么它不起作用。

Private Sub LoadText_Click()

    Dim myFile As String myFile = "C:\myFile.txt"
    Me.NameofTextbox = Mid(myFile, 7, 3)

End Sub

【问题讨论】:

您在哪一部分遇到了问题? 主要是2和3,我是新手。我不需要完整的代码答案,只是关于如何获得的建议就足够了。 那么对于#2,您可以使用regex,或者如果这很复杂,您可以使用内置的字符串函数。填充文本框应该很容易Me.txtfoo = strSomestring。您可能需要更新您的问题以缩小范围。 您需要研究如何读取文件。您在代码中所做的只是设置一个等于C:\myFile.txt 的字符串,因此Mid(myFile, 7, 3) 将返回le.。您实际上并没有阅读文件的内容。 “需要详细的规范答案来解决所有问题。”嗯?你有几个不同的问题,都是你自己造成的。有人会为你写这篇文章(赏金有什么用?),但需要更多信息。 【参考方案1】:

此处是您提供的文件示例以及表单上名为 txtboxLastNametxtboxFirstName 的控件

Dim mFields() As String ' array with fields' names in file
Dim mControls() As String ' corresponding controls' names
Dim mStopChars() As String ' Characters that put after values

Dim tmpstr As String
Dim content As String

Dim i As Long
Dim fStart  As Long
Dim valStart As Long
Dim valEnd As Long
Dim FieldValue As String
Dim j As Long
Dim tmp As Long

' prepare maps

' here : included in field name for common case
mFields = Split("LAST NAME:,FIRST NAME:", ",") 
mControls = Split("txtboxLastName,txtboxFirstName", ",")
mStopChars = Split("#,$,@,%", ",")

' read file into string
Open "c:\mytextfile.txt" For Input As #1

Do While Not EOF(1)
    Input #1, tmpstr
    content = content & tmpstr
Loop

Close #1

' cycle through fields and put their values into controls
For i = LBound(mFields) To UBound(mFields)
    fStart = InStr(1, content, mFields(i))
    If fStart > 0 Then
        valStart = fStart + Len(mFields(i))  'value start at this pos
        'cycle through possible stop chars to locate end of current value
        valEnd = Len(content)
        For j = LBound(mStopChars) To UBound(mStopChars)
            tmp = InStr(valStart, content, mStopChars(j))
            If tmp > 0 Then
                If tmp <= valEnd Then
                    valEnd = tmp - 1
                End If
            End If
        Next j
        ' cut value
        FieldValue = Mid(content, valStart, valEnd - valStart + 1)
        ' assign to control
        Me.Controls(mControls(i)).Value = FieldValue
    End If
Next i

【讨论】:

我会试一试,但“As #1”通常用于在使用 Microsoft Excel 时,在网格上表示 #1,我使用的是 Microsoft Access。 它是一个文件号。顺便说一句,Excel 也使用 VBA。 +1 ...我只是希望下次我被要求处理 Redis Protocolus 的情况时记得回来查看。

以上是关于使用文本文件为 Access 表单中的字段提供默认值的主要内容,如果未能解决你的问题,请参考以下文章

如果用户从表中删除记录,则刷新 Access 表单文本框

更新 Access 表单中的事件处理

如何在 MS-Access 的表单上显示 Web 浏览器控件中的表格字段内容?

Access 2010 中有限长度文本字段的富文本输入

将 Access 97 文本字段的默认值设置为空字符串

将 VBA 用于 MS Access 2000 文本框的控制源