Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
如何在Microsoft Excel VBA中的合并单元格中修改(更改为粗体)特定的文本字符串?_Vba_Excel - Fatal编程技术网

如何在Microsoft Excel VBA中的合并单元格中修改(更改为粗体)特定的文本字符串?

如何在Microsoft Excel VBA中的合并单元格中修改(更改为粗体)特定的文本字符串?,vba,excel,Vba,Excel,我可以通过以下输入成功修改单个或一组正常单元格: .Range("C" & i) _ .Characters(WorksheetFunction.Find("NOTE:", Range("C" & i).Value, 1), 100) _ .Font.Bold = True 它沿着C列的长度向下延伸,并在“NOTE:”之后加粗(特别是超过100个字符,包括找到的文本字符串) 问题是-如果C列中有任何合并的单元格,它将忽略它。我已经运行了一些快速测试-它可以识别单元格中有文本,我

我可以通过以下输入成功修改单个或一组正常单元格:

.Range("C" & i) _
.Characters(WorksheetFunction.Find("NOTE:", Range("C" & i).Value, 1), 100) _
.Font.Bold = True
它沿着C列的长度向下延伸,并在“NOTE:”之后加粗(特别是超过100个字符,包括找到的文本字符串)


问题是-如果C列中有任何合并的单元格,它将忽略它。我已经运行了一些快速测试-它可以识别单元格中有文本,我可以将合并单元格的内容打印到单个单元格中,稍后可以找到文本字符串,但找不到“注意:由于合并单元格本身的某些原因,从我所知,它适用于以C列中的单元格开头的合并单元格,但当合并单元格在C列之前开始时会中断。我可以使用
If
语句使其工作,以确定
范围(“C”&I)
中的值是否为空,然后选择合并单元格的第一个单元格并执行格式化

下面是我开始工作的代码。我的数据集仅用于单元格
C1:C20

Sub test()

Dim i As Integer
Dim rng As Range

With ThisWorkbook.ActiveSheet
On Error Resume Next

For i = 1 To 20

If .Range("C" & i).Value = "" Then

    If Range("A" & i).Value <> "" Then

        Set rng = Range("A" & i)

    Else

        Set rng = .Rows(i).SpecialCells(xlCellTypeBlanks)(1).Offset(0, 1)

    End If

rng.Characters(WorksheetFunction.Find("NOTE:", rng.Value, 1), 100).Font.Bold = True

Else

    .Range("C" & i).Characters(WorksheetFunction.Find("NOTE:", Range("C" & i).Value, 1), 100).Font.Bold = True

End If

Next i

End With

End Sub
子测试()
作为整数的Dim i
变暗rng As范围
使用ThisWorkbook.ActiveSheet
出错时继续下一步
对于i=1到20
如果.Range(“C”&i).Value=”“,则
如果范围(“A”&i).Value为“”,则
设置rng=范围(“A”和“i”)
其他的
设置rng=.Rows(i).特殊单元格(xlCellTypeBlanks)(1).偏移量(0,1)
如果结束
rng.Characters(工作表function.Find(“注意:”,rng.Value,1),100)。Font.Bold=True
其他的
.Range(“C”&i).字符(工作表函数.Find(“注意:”,Range(“C”&i).值,1),100)。Font.Bold=True
如果结束
接下来我
以
端接头
Before(用于表示合并单元格开始和结束位置的边框):

之后:

只需从合并区域中选取第一个(左上)单元格,然后继续代码:

With .Range("C" & i).MergeArea.Cells(1, 1)
    lngFound = InStr(1, .Value2, "NOTE:", vbTextCompare)
    If lngFound > 0 Then
        .Characters(lngFound, 100).Font.Bold = True
    End If
End With

这真是太棒了!我只是想弄清楚你现在做了什么,为什么它会起作用。。。非常感谢!我没有使用
.Range(“C”&i)
而是使用了
.Range(“C”&i).MergeArea.Cells(1,1)
。剩下的我只是为了表现而改变。上面的变化仅仅是(写出来的):如果
.Range(“C”&i)
是a的一部分,那么给我整个区域,我只想要
.Cells(1,1)
左上角的单元格。你可能会感兴趣。