【问题标题】:loop deleting the last character循环删除最后一个字符
【发布时间】:2014-09-16 11:17:52
【问题描述】:

在 VBA 中,我试图遍历一个范围并删除每个单元格文本的最后一个字符。

我理解删除单元格中文本最后一个字符的代码如下: myString = Left(myString, Len(myString) - 1)

但是,我试图让它在 for 循环中工作,我只是得到所需的错误消息对象。它可能很明显我错过了。

这是我的 For 循环代码:

Dim rngh As Range, cellh As Range
Dim myString As String
Set rngh = Range("H1:H500")
For Each cellh In rngh
    myString = cellh.Text
    myString = Left(myString, Len(myString) - 1)
Next cellh

谢谢。

【问题讨论】:

  • 什么是rngh?是Rng吗?
  • rngh 是我要经过的分配范围的变量名。
  • 所以我的想法是选择范围内的单元格。选择该单元格中的文本。然后删除最后一个字符。
  • 调试时您在哪一行收到错误?我猜这是因为 LEFT 函数正在一些空单元格上使用。

标签: vba loops excel for-loop


【解决方案1】:

我不会使用 .Text 或一次循环一个单元格,因为它会更慢 - 使用数组:

Dim vData
Dim n                     As Long
vData = Range("H1:H500").Value
For n = 1 To UBound(vData, 1)
    If Len(vData(n, 1)) <> 0 Then vData(n, 1) = Left$(vData(n, 1), Len(vData(n, 1)) - 1)
Next n
Range("H1:H500").Value = vData

例如。

【讨论】:

  • 完美运行,谢谢!将来我会更频繁地使用数组!
【解决方案2】:

试试下面的代码

Private Sub Workbook_Open()
    Dim rngh As Range, cellh As Range
    Dim myString As String
    Set rngh = Range("H1:H500")
    For Each cellh In rngh
        If Not IsEmpty(cellh) Then
            myString = cellh.Text
            myString = Left(myString, Len(myString) - 1)
            cellh.Value = myString
        End If
    Next cellh

【讨论】:

    【解决方案3】:

    你在设置的行中有一个错误。我觉得应该是

    Set rngh = Range("H1:H500")

    但是当你尝试缩短空字符串时会有例外。您必须检查是否可以这样做.. 类似

    myString = cellh.Text
    If Len(myString) > 0 Then
        myString = Left(myString, Len(myString) - 1)
    End If
    

    【讨论】:

    • 很好看,虽然还是打不开,但只是一个错字:(
    • 对不起,忘记添加空字符串检查.. :)
    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 2013-02-17
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多