【问题标题】:Access VBA Richtext in tables and forms在表格和表单中访问 VBA Richtext
【发布时间】:2020-07-13 19:39:03
【问题描述】:

我将以下内容剪切并粘贴到表单上的文本框中: 纠正措施:您如何改进完美?

然后我按下“更新数据库”按钮,去掉“纠正措施:”字样,并将剩余的文本放在一个表格中。

在表格中,条目如下所示:如何提高完美?

当我将信息发布回表单时,操作系统(或其他东西)会在其下方插入一个空白行。

不需要很长时间重复上述步骤,直到文本框由于添加到文本中的空白行而变得无法接受。

我怎样才能摆脱这个正在插入的空白行?除了此处显示的内容外,我没有看到任何额外的字符。

这个问题与我在 2016 年 9 月 30 日发布的“ACCESS TABLES 中的 CRLF”问题有关。

2017 年 2 月 27 日 今天早上我用下面的代码查看了字符串的最后几个字符:

theFld.Value = Trim(tempNom)
'temporary
tempCt = Len(tempNom)
While tempCt > 0
    Debug.Print Asc(tempNom)
    tempNom = right(tempNom, Len(tempNom) - 1)
    tempCt = Len(tempNom)
    If tempCt < 15 Then Stop
Wend
'temporary

无论有没有 TRIM 功能,调试器都没有显示意外字符,但它仍在插入 CRLF!有趣的是,调试器在 debug.print 输出的末尾添加了一个空行,但子例程没有显示任何字符。

【问题讨论】:

  • 如果您没有以某种方式输入这些字符(涉及任何 VBA 代码?),那么在您的表单上,查看文本框属性“输入键行为”......它设置为什么?
  • 要查找具有 CR 或 LF 的记录,请运行类似于以下的查询(更改表名和字段名!):SELECT FldB, InStr(1,[FLDB],Chr(13) ) AS CR, InStr(1,[FLDB],Chr(10)) AS LF FROM Table1 WHERE (((InStr(1,[FLDB],Chr(13)))>0)) OR (((InStr(1) ,[FLDB],Chr(10)))>0));
  • 键行为设置为“默认”。感谢您的输入

标签: ms-access vba


【解决方案1】:

我怀疑这与您选择要剪切的文本的方式以及从何处剪切有关。如果您从 Word 文档的中间选择一行文本,您可能会注意到所选内容中该行末尾的空格。这实际上是“新行”字符。因此,当您粘贴到 Access 中时,您也会得到新行。默认情况下,您在表格视图中看不到这一点,因为表格视图通常设置为单行高度,但如果您在表格中编辑此条目,您可以超出文本的末尾并向下移动到下一行。如果您使用 shift-F2 调出缩放框进行编辑,这一点最为明显。

有几种方法可以解决这个问题:

1 选择要剪切的文本时要小心。如果您单击并拖动鼠标远远超出要复制的内容的末尾,您可能会发现当您展开选择时 Word 会自动选择整个单词。一旦您超过了您希望选择结束的位置,如果您开始缓慢地移回该结束位置,Word 将开始一次取消选择一个字符,而不是整个单词。确保只选择所需内容的最后一个字母,并且不要在文本后包含“空格”(新行)。

2 或者,以您一贯的方式选择文本,但是当您粘贴时,您可能会注意到插入点最终位于插入文本之后的行上。只需按退格键即可删除这一新行。

3 如果这是其他用户正在做的事情,并且您不能“教育”他们如何剪切/粘贴而不包括文本末尾的新行,那么您将不得不去除尾随'更新数据库'按钮后面的代码中的新行。我永远不记得 CR 和 LF 字符的方向,但它会像

Dim strCA As String
If Right(txtCorrectiveAction, 2) = Chr(10) & Chr(13) Then  'might need to swap the 10 and 13 around
    strCA = Left(txtCorrectiveAction, Len(txtCorrectiveAction) - 2)
Else
    strCA = txtCorrectiveAction
End If

然后在您的insertupdate 语句中使用strCA。

【讨论】:

    【解决方案2】:

    除了 Skippy 所说的之外,您可能在字符串中嵌入了 CR 或 LF(即您复制了多行)。以下代码只是一个示例,展示了如何找到它们发生的位置,以及两种删除方法。注意删除的区别......第一个只从字符串的末尾删除,第二个删除所有,无论在字符串中遇到什么。

    ' Sample code to find and replace CR, LF's
    Dim tempNom As String
    Dim tempCt  As Integer
    Dim i       As Integer
    Dim char    As String
    
    tempNom = "Now is the time..." & vbCrLf  ' FOR TESTING. REMOVE WHEN LIVE!
    
    ' To find any CR or LF in string
    For i = 1 To Len(tempNom)
        char = Mid(tempNom, i, 1)
        If Asc(char) = 13 Or Asc(char) = 10 Then
            Debug.Print "In position " & i & " of string: Found Asc(" & Asc(char) & ")"
        End If
    Next i
    
    ' To remove either CR or LF from right of string
    Do
        If right(tempNom, 1) = vbCr Or right(tempNom, 1) = vbLf Then
            tempNom = left(tempNom, Len(tempNom) - 1)
        Else
            Exit Do
        End If
    Loop
    
    ' Replace all CR or LF anywhere in string
    tempNom = "Now is the time..." & vbCrLf    ' FOR TESTING. REMOVE WHEN LIVE!
    tempNom = Replace(tempNom, vbCr, "")
    tempNom = Replace(tempNom, vbLf, "")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      相关资源
      最近更新 更多