VBA 输入框没有正确显示字符串?

Posted

技术标签:

【中文标题】VBA 输入框没有正确显示字符串?【英文标题】:VBA Inputbox not displaying string correctly? 【发布时间】:2020-03-01 02:58:06 【问题描述】:

我正在尝试使用 VBA InputBox 函数显示提示。在 InputBox 的文本中,我包含了一个文件名的字符串变量,但是,当我运行代码时,字符串(称为“tempkey”)没有正确显示——中间的一些字符串丢失了。

在将“tempkey”字符串内容传递到输入框之前,我已经进入调试器并验证了它们。字符串值在 InputBox 中显示不正确。

            tempkey = Left(GetFilenameFromPath(files(i)), Len(GetFilenameFromPath(files(i))) - Len("xxxxmap.xlsx"))

            If Not dict.Exists(tempkey) Then
                entry = InputBox("Please enter a short descriptor for: " & vbNewLine & tempkey & vbNewLine & vbNewLine & "i.e. L5P-LM Post Thermal Cycle")
                If entry <> "" Then
                    dict(tempkey) = entry
                Else
                    Exit Sub
                End If
            End If

字符串“tempkey”的长度约为 109 个字符,并且不包含空格。

下面是 InputBox 的样子:

如你所见,'seq' 之后和 'from' 之前的 'tempkey' 字符串中的所有内容都从 InputBox 中省略了。

这是我的调试器在显示 InputBox 之前的 'tempkey' 值的样子:

为什么字符串显示不正确?

【问题讨论】:

出于好奇,为什么 InputBox 行以above)_ 结尾,而监视窗口显示below)_。我认为这仍然是同一个问题,只是不同files(i) 没错,它们只是不同的文件。同样的问题。 看起来它没有在单词中间添加换行符(因为所有文本都用下划线连接,直到“从下/上”,它算作一个长词)。您可以在字符串中添加空格。如果这是不可能的,您可能最好使用自定义用户表单,您可以对其进行编辑以满足您的需求。 这是一个很长的镜头,但我想知道Application.InputBox是否有同样的问题。 我的猜测是,您的字符串看起来像一个单词,直到“from”之前的空格,并且控件不是换行而是截断,只有在到达空格时才换行(似乎表示新词)。 【参考方案1】:

InputBox 字符串限制为 255 个字符,所以我猜这就是问题所在。

您是否尝试过将 tempkey 拆分为两个单独的字符串?

Dim s1 As String
Dim s2 As String
s1 = Left(tempkey, Len(s) / 2)
s2 = Right(tempkey, Len(s) / 2)

entry = InputBox("Please enter a short descriptor for: " & vbNewLine & s1 & s2 & vbNewLine & vbNewLine & "i.e. L5P-LM Post Thermal Cycle")

【讨论】:

输入框本身可能限制为255个字符,但消息字符串是问题,小于255。 @Jeff 这似乎不是问题所在。 InputBox 中的内容少于 255 个字符。问题似乎是我的字符串包含一个很长的第一个“单词”,没有任何空格,而 InputBox 处理得不好;它会切断单词的剩余字符,这些字符不适合 InputBox 的固定宽度。

以上是关于VBA 输入框没有正确显示字符串?的主要内容,如果未能解决你的问题,请参考以下文章

Axure RP9 如何借助动态面板实现密码输入框字符显示/隐藏切换

VBA消息框(MsgBox)

VBA中msgbox的用法小结

VBA ListBox和ComboBox显示错误的字符

JS中验证检测用户输入的电子邮件是不是含有@

vba代码如何禁用表单的设计视图并仍然正确显示表单的内容?