Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 函数更改所有单元格中的文本_Vba_Excel_Excel 2013_Worksheet Function - Fatal编程技术网

Vba 函数更改所有单元格中的文本

Vba 函数更改所有单元格中的文本,vba,excel,excel-2013,worksheet-function,Vba,Excel,Excel 2013,Worksheet Function,我想扫描X列和任何文本长度大于11的单元格-我想弹出一个消息框,要求用户修改它。一旦用户点击OK按钮,我就想替换X列中的所有值。这是我的语法,但不是迭代每个单元格。一旦我输入了一个新的重命名值,宏将继续询问我,但它似乎不会在X列的下一列迭代单元格 我必须改变什么才能使这个宏功能如我所愿 Function ShortenText() Dim c As Range Dim lRow As Long Dim NewValue As String lRow = Cells(Rows.Count

我想扫描X列和任何文本长度大于11的单元格-我想弹出一个消息框,要求用户修改它。一旦用户点击OK按钮,我就想替换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

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

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”并关闭修剪功能“)”

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

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.选择”并关闭微调功能“)”

您正在对
选择执行
替换
,但您的代码从不
选择任何范围。可能更改
选择。将
替换为
范围(“X1:X”&lRow)。如果要将X列中与当前正在处理的单元格中具有相同值的所有内容更改为用户指定的相同新值,则替换
可以执行所需操作。但是,如果您希望用户将每个单元格更改为不同的值(例如,一次出现的“长字符串”更改为“x”,另一次出现的“长字符串”更改为“y”),那么您可能只想说
c.value=NewValue
,而不是执行
范围.Replace
。您正在对
选择执行
Replace
,但是您的代码从不选择任何范围。可能更改
选择。将
替换为
范围(“X1:X”&lRow)。如果要将X列中与当前正在处理的单元格中具有相同值的所有内容更改为用户指定的相同新值,则替换
可以执行所需操作。但是,如果您希望用户将每个单元格更改为不同的值(例如,一次出现的“长字符串”更改为“x”,另一次出现的“长字符串”更改为“y”),那么您可能只想说
c.value=NewValue
,而不是执行
范围.替换
。如果您只在单个单元格上执行
替换
,你不妨说
c.Value=NewValue
。然后,您不需要选择
替换
。如果您只在单个单元格上执行
替换
,您也可以说
c.Value=NewValue
。这样您就不需要
选择
替换