gpt4 book ai didi

vba - 为什么 Application.Clean() 会删除可打印字符?

转载 作者:行者123 更新时间:2023-12-01 23:08:05 26 4
gpt4 key购买 nike

赏金问题:

虽然有一个答案提供了合理的解释,但我想确定字符串是否被截断,因为 Clean()WorksheetFunction以及该问题背后的原因。做WorksheetFunctionsVBA 调用时可以说,将字符串传递到“单元格”中,该单元格在 null Chr(0) 处截断?

原始问题:

为什么TestItApplication.Clean方法删除 Chr(0) 之后的所有字符即使它们是可打印的? TestIt2null Chr(0) 进行替换后正确返回 8 个字符.

编辑:
值得注意的是,某些版本的 Excel 会要求您编写 Application.WorksheetFunction.Clean()
测试此错误。

代码

Sub TestIt()
Dim TryIt As String

TryIt = "Test" & Chr(0) & "asdf"
MsgBox Len(TryIt) 'Prints 9
TryIt = Application.Clean(TryIt)
MsgBox Len(TryIt) 'Prints 4

End Sub

Sub TestIt2()
Dim TryIt As String

TryIt = "Test" & Chr(0) & "asdf"
MsgBox Len(TryIt) 'Prints 9
TryIt = Replace(TryIt, Chr(0), "")
MsgBox Len(TryIt) 'Prints 8

End Sub

最佳答案

@Gserg 在上面的评论中是正确的

Visual Basic 无法处理以 NULL 字符终止的字符串。事实上,所有 DLL 都以这种方式终止字符串。 Chr(0) 被视为字符串的终止字符。

这是检查它的最佳方法。

Sub TestIt()
Dim TryIt As String

TryIt = "Test" & Chr(0) & "asdf"

Debug.Print Len(TryIt)
Debug.Print TryIt

ThisWorkbook.Sheets(1).Range("A1").Value = TryIt
End Sub

这将在单元格A1中写入“Test”

最好的方法就是像你正在做的那样去处理它。使用.Replace。另一种替代(更长)的方法是使用 INSTR

关于vba - 为什么 Application.Clean() 会删除可打印字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27641324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com