【问题标题】:InputBox not allowing certain ASCII control charactersInputBox 不允许某些 ASCII 控制字符
【发布时间】:2020-02-13 05:17:41
【问题描述】:

目前正在使用这个嵌入了 ASCII 控制章程的字符串。

[)><RS>06<GS>17V0B100<GS>1PRID-001-A1<GS>S99999<RS><EOT>

下面正确过滤掉记录分隔符

i = InputBox("Test") 'i = [)><RS>06<GS>17V0B100<GS>1PRID-001-A1<GS>S99999<RS><EOT>
i = Split(i, Chr(30)) 
'i(1) = 0617V0B1001PRID-001-A1S99999

但组分隔符没有。为什么下面不拆分?

i = InputBox("Test") 'i = [)><RS>06<GS>17V0B100<GS>1PRID-001-A1<GS>S99999<RS><EOT>
i = Split(i, Chr(29)) 
'i(0) = [)>0617V0B1001PRID-001-A1S99999

【问题讨论】:

  • @braX chr(29) 似乎被输入框过滤掉了,而 chr(30) 没有。
  • 如果Split 无关紧要,那听起来应该是你的问题。
  • 不仅仅是输入框的问题。输入框用于我的示例。
  • 那么您可能想澄清您的问题。我认为您不会得到目前解释的任何答案。
  • 如果您不使用 InputBox,那么问题/疑问是什么?

标签: vba inputbox


【解决方案1】:

忽略输入框,这工作正常:

Dim s As String, arr

s = "[)><RS>06<GS>17V0B100<GS>1PRID-001-A1<GS>S99999<RS><EOT>"

s = Replace(s, "<RS>", Chr(30))
s = Replace(s, "<GS>", Chr(29))

Debug.Print s                         '[)>0617V0B1001PRID-001-A1S99999<EOT>

Debug.Print Split(s, Chr(30))(1)      '0617V0B1001PRID-001-A1S99999

Debug.Print Split(s, Chr(29))(0)      '[)>06
Debug.Print Split(s, Chr(29))(1)      '17V0B100

【讨论】:

【解决方案2】:

感谢 Tim 引导我找到正确答案。下面用于将关键事件转换为文本。

Private Sub Text0_KeyPress(KeyAscii As Integer)
Dim i As Integer
i = Me.Text0.SelStart
Select Case KeyAscii
    Case 4
        Me.Text0.Text = Me.Text0.Text + "<EOT>"
        Me.Text0.SelStart = i + 5
    Case 29
        Me.Text0.Text = Me.Text0.Text + "<GS>"
        Me.Text0.SelStart = i + 4
    Case 30
        Me.Text0.Text = Me.Text0.Text + "<RS>"
        Me.Text0.SelStart = i + 4
End Select
End Sub

【讨论】:

  • i+4 最后两个?
  • 任何超过 4 的作品。无法选择文本框中的内容?
  • 为什么不VBA.InputBox
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 2010-12-09
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多