我想在工作簿中有4个标签
我对vba生锈了。
我发现了类似的问题,但似乎无法让他们解决问题。
答案 0 :(得分:1)
一个不优雅但有效的解决方案就是检查每个选项卡上每个条目的每个范围 - 这不是很好但是它会起作用。我已经给你下面的组件拼凑在一起,这是一个学习经验!
如果它们不是很大,它将足够快超过4个标签,但您可以通过仅检查相关范围来改进解决方案,例如只是标题行而不是整个表格。
这里有几个不同的组件:
循环显示标签:
Dim TempWs as Worksheet
For Each TempWs in ThisWorkbook.Worksheets
[ Code ]
Next TempWs
在每个标签中检查“ClaimName” - 这取代上面的“[Code]”:
Dim TempRng as Range
For Each TempRng in TempWs.UsedRange
If TempRng.Value = "ClaimName" Then
[More code]
End If
Next TempRng
替换文字 - 这取代上面的“[更多代码]”
Dim TempRng2 as Range
For Each TempRng2 in TempWs.UsedRange
If TempRng2.Value = "Claim1Score" Then
TempRng2.Value = "Claim 1"
End If
Next TempRng2
Exit For 'To abandon checking for 'ClaimName' as this is no longer required
你需要一个超出“[更多代码]”for循环的循环,然后在[更多代码] For循环内部,你使用下面的代码来构造输入和输出。因此,对于您处理的索赔数量,您可以参数化数字,然后在您进行替换后退出。例如。
Dim i As Integer
For i = 1 to 10
If...... = "Claim" & i & "Score"
= "Claim " & i
End If
Next i
答案 1 :(得分:1)
此字符串上的代码非常有用。我最终做了以下事情:
'find "ClaimName" and replace values to match template format
Dim sh2 As Worksheet, R As Range
For Each sh2 In b1.Sheets
Set R = sh2.Cells.Find("ClaimName", , xlValues, xlWhole)
If R Is Nothing Then
GoTo Nx
Else
sh2.Range(R, sh2.Cells(sh2.Rows.Count, R.Column).End(xlUp)).Replace "Score", "", xlPart
sh2.Range(R, sh2.Cells(sh2.Rows.Count, R.Column).End(xlUp)).Replace "Claim", "Claim ", xlPart
End If
Nx:
Next sh2
如果有什么东西可以让它更优雅,请告诉我。
答案 2 :(得分:0)
如果你没有很多单元格(代码中的范围A1:Z1),你可以遍历它们:
Sub replaceClaim()
For Each ws In ActiveWorkbook.Worksheets
For Each cel In ws.Range("A1:Z1")
If cel.Text Like "Claim#Score" Then
cel.Value = "Claim " + Mid(cel.Text, 6, 1)
ElseIf cel.Text Like "Claim##Score" Then
cel.Value = "Claim " + Mid(cel.Text, 6, 2)
End If
Next cel
Next ws
End Sub
适用于“Claim0Score”至“Claim99Score”。否则你必须修改: - )