Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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 Formula - Fatal编程技术网

Vba 连接公式中的粗体文本

Vba 连接公式中的粗体文本,vba,excel,excel-formula,Vba,Excel,Excel Formula,我想能够使一个或两个具体的词在我的句子中粗体时,使用连接公式。下面是一个例子 第一句话是使用连接公式。第二句是手工输入并格式化的。有没有一种方法可以在连接公式中设置此格式,而不必每次手动设置 请注意,这只是一个示例,我可能需要使用它在不同的句子中创建一个由三个连续单词组成的粗体字符串。如果有一个通用的规则,我可以继续工作,那将是伟大的 我有点精通公式,但从未使用过VBA。但是,我怀疑这个问题的解决方案可能只能使用VBA。如果需要VBA解决方案,请考虑周到,因为我需要一些时间和精力来启动和理解

我想能够使一个或两个具体的词在我的句子中粗体时,使用连接公式。下面是一个例子

第一句话是使用连接公式。第二句是手工输入并格式化的。有没有一种方法可以在连接公式中设置此格式,而不必每次手动设置

请注意,这只是一个示例,我可能需要使用它在不同的句子中创建一个由三个连续单词组成的粗体字符串。如果有一个通用的规则,我可以继续工作,那将是伟大的

我有点精通公式,但从未使用过VBA。但是,我怀疑这个问题的解决方案可能只能使用VBA。如果需要VBA解决方案,请考虑周到,因为我需要一些时间和精力来启动和理解

谢谢你的时间和帮助

编辑:


如何进一步扩展最后一部分,使第四个和第六个字符串加粗?

如果单元格中包含公式,则无法格式化单元格文本中的单个字符。
Excel不支持这一点


变通办法 唯一的解决方法是将单元格文本写成常量文本(使用VBA),而不是公式(如果满足您的要求)

然后,您可以使用以下格式设置单个字符的格式:

Range("A1").Characters(Start:=1, Length:=10).Font.Bold = True
因此,要部分格式化字符串,可以调整以下示例

Public Sub ExampleConcatenate()
    Dim str1 As String, str2 As String, str3 As String
    str1 = "First string "
    str2 = "Second string "
    str3 = "Third string"
    
    Range("A1").Value = str1 & str2 & str3 'concatenate strings
    
    'format bold starts 1 character after str1 and is as long as str2
    Range("A1").Characters(Start:=Len(str1) + 1, Length:=Len(str2)).Font.Bold = True
End Sub

对于更多的子字符串,使用数组会更容易

Public Sub ExampleConcatenate()
    
    Dim SubStrings As Variant
    SubStrings = Array("First string ", _
                       "Second string ", _
                       "Third string ", _
                       "Fourth string ", _
                       "Fifth string ", _
                       "Sixth string")

    Range("A1").Value = Join(SubStrings, "")

    'Note array counting starts with 0 not 1 so "First string" is SubStrings(0)
    
    'format bold starts 1 character after str1 and is as long as str2
    Range("A1").Characters(Start:=Len(SubStrings(0)) + 1, Length:=Len(SubStrings(1))).Font.Bold = True
    'format sub string 4
    Range("A1").Characters(Start:=Len(SubStrings(0)) + Len(SubStrings(1)) + Len(SubStrings(2)) + 1, Length:=Len(SubStrings(3))).Font.Bold = True
    'format sub string 6
    Range("A1").Characters(Start:=Len(SubStrings(0)) + Len(SubStrings(1)) + Len(SubStrings(2)) + Len(SubStrings(3)) + Len(SubStrings(4)) + 1, Length:=Len(SubStrings(5))).Font.Bold = True

End Sub

谢谢你的回答。另一个更紧迫的项目已经出现,需要我立即关注,但当我回到这项工作,我会尝试这个解决方案:)嗨,那里-我终于回到这个。我使用了您提供的代码,并将其部分扩展为6个字符串。然而,我正在为最后一点挣扎。请你帮个忙好吗?请不要在注释中添加代码。它不可读,在VBA中换行很重要。改为编辑你的原始问题并添加到那里。抱歉-我已经更新了原始问题。谢谢大家!@请看我的编辑。对于更多的子字符串,更容易使用数组。要获得子字符串的起点,需要添加它们的长度。
Public Sub ExampleConcatenate()
    
    Dim SubStrings As Variant
    SubStrings = Array("First string ", _
                       "Second string ", _
                       "Third string ", _
                       "Fourth string ", _
                       "Fifth string ", _
                       "Sixth string")

    Range("A1").Value = Join(SubStrings, "")

    'Note array counting starts with 0 not 1 so "First string" is SubStrings(0)
    
    'format bold starts 1 character after str1 and is as long as str2
    Range("A1").Characters(Start:=Len(SubStrings(0)) + 1, Length:=Len(SubStrings(1))).Font.Bold = True
    'format sub string 4
    Range("A1").Characters(Start:=Len(SubStrings(0)) + Len(SubStrings(1)) + Len(SubStrings(2)) + 1, Length:=Len(SubStrings(3))).Font.Bold = True
    'format sub string 6
    Range("A1").Characters(Start:=Len(SubStrings(0)) + Len(SubStrings(1)) + Len(SubStrings(2)) + Len(SubStrings(3)) + Len(SubStrings(4)) + 1, Length:=Len(SubStrings(5))).Font.Bold = True

End Sub