【问题标题】:Function To Alter Text In All Cells更改所有单元格中的文本的函数
【发布时间】:2017-02-06 20:46:45
【问题描述】:

我想扫描 X 列和任何文本长度大于 11 的单元格 - 我想弹出一个消息框,要求用户更改它。一旦用户点击确定按钮,我就想替换列 X 中的所有这些值。这是我拥有的语法,但它不是迭代每个单元格。一旦我输入一个新的重命名值,宏将继续询问我,但它似乎不会在 X 列下方迭代单元格。

我必须改变什么才能获得我想要的这个宏功能?

Function ShortenText()
Dim c As Range
Dim lRow As Long
Dim NewValue As String

    lRow = Cells(Rows.Count, 24).End(xlUp).Row

    For Each c In Range("X1:X" & lRow)
        Cells(c.Row, 2) = Len(c)
        If Len(c) > 11 Then
            NewValue = Trim(InputBox("What would you like to rename the value")
            Selection.Replace What:=c.Value, Replacement:=NewValue, LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
      End If
    Next c

End Function

【问题讨论】:

  • 您正在对Selection 执行Replace,但您的代码从未在Selects 任何范围内。如果您想将 X 列中与当前正在处理的单元格中具有相同值的所有内容更改为用户指定的相同新值,则可能将 Selection.Replace 更改为 Range("X1:X" & lRow).Replace 可能会执行您想要的操作。但是,如果您希望用户将每个单元格更改为不同的值(例如,将“长字符串”的一次出现更改为“x”,将“长字符串”的另一次出现更改为“y”),那么您可能只想说c.Value = NewValue而不是做一个Range.Replace

标签: vba excel excel-2013 worksheet-function


【解决方案1】:

我已经尝试过您的代码。只做一点修改:

Function ShortenText()
Dim c As Range
Dim lRow As Long
Dim NewValue As String

    lRow = Cells(Rows.Count, 24).End(xlUp).Row

    For Each c In Range("X1:X" & lRow)
        Cells(c.Row, 2) = Len(c)
        If Len(c) > 11 Then
            NewValue = Trim(InputBox("What would you like to rename the value"))
            c.Select
            Selection.Replace What:=c.Value, Replacement:=NewValue, LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
      End If
    Next c

End Function

添加“c.Select”并关闭Trim功能“)”。

【讨论】:

  • 如果您只对单个单元格执行Replace,您还不如直接说c.Value = NewValue。那么您就不需要SelectReplace
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多