每次运行时,宏都会在两个单词之间添加一个空格

时间:2019-11-19 18:39:24

标签: excel vba

我是VBA菜鸟,并且已经在excel宏上工作了大约2周。到目前为止进展顺利。

今天,我完成了删除所需字符串前面的所有数据的代码,在该字符串的前面添加了一些文本(带有空格),并将其存储回该单元格中。

但是,每次我运行宏(例如,检查所做的更改是否在起作用)时,在单词之间都会添加一个新的空格。

这是删除名称前的所有内容并添加所需字符串的代码。我已经调用了InStr函数,并将该值存储在整数pos中。请注意,这是在特定范围内的循环。

If pos > 0 Then
    'Removes anything before the channel name
    cellValue.Offset(0, 2) = Right(cell, Len(cell) - InStr(cell, pos) - 2)

    'Add "DA" to the front of the channel name
    cellValue.Offset(0, 0) = "DA " & Right(cell, Len(cell) - InStr(cell, pos) - 2)

    'Aligns the text to the right
    cellValue.Offset(0, 2).HorizontalAlignment = xlRight
End If

没有添加其他“ DA”,并且我没有进行任何其他功能来在任何地方添加空格。如果将添加的“ DA”更改为“ DA”,则不会添加多余的空间。

我不希望在其他地方添加其他功能/子/内容来搜索并删除任何多余的空格。有任何想法吗?

编辑以添加:字符串是什么以及字符串前面的是未知的。它可以是数字,字符,空格,也可以是我想要的。例如,它可以是“ Q-Quincey”,“ BA Bob”,“ DA White”等。我认为在单元格中搜索我想要的字符串(Quincey,Bob,White)并根据需要更改单元格将是最好的方法。

你们所有人都帮助我提出的解决方案:  如果pos> 0然后     modString =右(单元格,Len(单元格)-InStr(单元格,位置)-2)     '删除频道名称之前的所有内容,并将其放在最后一列中     cellValue.Offset(0,2)= modString

'Aligns the last column text to the right
cellValue.Offset(0, 2).HorizontalAlignment = xlRight

cellValue.Offset(0, 2).Font.Size = 8

'Add "DA" to the front of the channel name in the rightmost column
If StartsWith(cell, "DA ") = True Then
cellValue.Replace cell, "DA" & modString
Else
cellValue.Replace cell, "DA " & modString
End If

如果结束

我不认为使用我的“ StartsWith”功能。我希望避免添加更多代码(因为我是新手,我认为我的代码很笨拙,并且试图简化它),但这仅是另外两行,因此解决方案有效!非常感谢大家。

3 个答案:

答案 0 :(得分:0)

也许这是您可以使用的东西:


样本数据:

enter image description here


示例代码:

Sub Test()

With Sheet1.Range("A1:A4")
    .Replace "*quincey", "AD Quincey"
End With

End Sub

结果:

enter image description here

答案 1 :(得分:0)

如果要通过循环进行操作,应删除代码中的一些冗余。例如,引用cell.offset(0,0)没有任何意义。

我将目标单元格设置为一个范围,然后简单地编辑该单元格,而无需将不需要的字符串放在另一个单元格中。

**编辑:

我会尝试类似的东西。**

nameiwant = "Quincy"
Set cell = Range("A1")
If InStr(cell, nameiwant) > 0 And Left(cell, 3) <> "DA " Then
    cell.Value = "DA " & nameiwant
End If

答案 2 :(得分:0)

在您的示例中,您似乎想用其他内容替换字符串中的第一个“单词”。如果总是这样,则以下使用正则表达式的函数可以做到这一点:

Option Explicit
Function replaceStart(str As String, replWith As String) As String
    Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
With RE
    .Global = False
    .MultiLine = True
    .Pattern = "^\S+\W(?=\w)"
    replaceStart = .Replace(str, replWith)
End With
End Function

Sub test()
    Debug.Print replaceStart("Q-Quincy", "DA ")
    Debug.Print replaceStart("BA Bob", "DA ")
    Debug.Print replaceStart("DA White", "DA ")
End Sub

debug.print将->

DA Quincy
DA Bob
DA White

正则表达式匹配所有内容,但不包括紧随非单词字符的第一个“单词”字符。这应该是字符串中的第二个单词。

“单词”字符是[A-Za-z0-9_]集中的任何字符

似乎可以处理您提供的示例。