Vba 函数更改所有单元格中的文本
我想扫描X列和任何文本长度大于11的单元格-我想弹出一个消息框,要求用户修改它。一旦用户点击OK按钮,我就想替换X列中的所有值。这是我的语法,但不是迭代每个单元格。一旦我输入了一个新的重命名值,宏将继续询问我,但它似乎不会在X列的下一列迭代单元格 我必须改变什么才能使这个宏功能如我所愿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
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
。这样您就不需要选择
或替换
。