Excel VBA。对于范围中的每一行,对于行中的每个单元格,对于单元格中的每个字符

时间:2015-08-06 18:41:48

标签: excel vba excel-vba

我创建了一个简单到荒谬的VBA宏。

对于范围中的每一行,然后是行中的每个单元格,然后是单元格中的每个字符。

但它返回不支持的属性或方法。

现在,要在Excel VBA中引用单元格中的每个字符,必须将其定义为范围。那么范围内的一个单元格不是一个范围对象呢?

在所有Excel示例中,具有Characters属性的单元格以绝对值引用。与Worksheets("Sheet1").Range("A1")

一样

我是否必须编写代码 Worksheets("MySheet").Range("B1") ... Worksheets("MySheet").Range("B2") ... ... Worksheets("MySheet").Range("B250") 要访问字符,还是有办法访问没有Mid函数的单元格中的每个字符?

顺便说一下,Mid函数会丢失格式,但我正在寻找带下划线的字符。

我的程序是这样的

Sub Celltest()
    For Each rw In Sheets("Joblist").Range("B1:D250").Rows
        For Each cel In rw.Cells
            For Each char In cel.Characters
                If char.Font.Underline = True Then MsgBox char
            Next
        Next
    Next
End Sub

因此,我收到不支持属性或方法的消息。

谢谢!

大卫

2 个答案:

答案 0 :(得分:2)

&#34;为什么突然间范围物体的一部分突然不在范围内?&#34;那不是问题。错误是Object doesn't support this property or method。这意味着(基本上).之后的任何内容都是一个对象,因此错误告诉您某些内容与您使用.Character的方式有关。< / p>

我做了一些快速搜索,这有效:

Sub Celltest2()
Dim rw As Range, cel As Range
Dim i As Integer
Dim char    
    For Each rw In Sheets("Joblist").Range("B1:D250").Rows
        For Each cel In rw.Cells
            For i = 1 To Len(cel)
                'Debug.Print cel.Characters(i, 1).Text
                If cel.Characters(i, 1).Font.Underline = 2 Then
                    MsgBox (cel.Characters(i, 1).Text)
                End If
            Next i
        Next
    Next
End Sub

我只是查找了Characters Object文档,并提供了如何使用.Characters的答案。问题是.Characters如何与范围一起使用 - 没有必要的复杂技能或知识。只需使用VB错误消息。

答案 1 :(得分:1)

我发现了两件事。 1.字符不是一个集合,因此For Each不起作用。 2. Font.Underline不是布尔值。尝试类似:

Sub Celltest()
    Dim rw As Excel.Range
    Dim cel As Excel.Range
    Dim char As Excel.Characters
    Dim I As Long
    For Each rw In Sheets("Joblist").Range("B1:D250").Rows
        For Each cel In rw.Cells
            For I = 1 To cel.Characters.Count
                Set char = cel.Characters(I, 1)
                If char.Font.Underline <> xlUnderlineStyleNone Then MsgBox char.Text
            Next I
        Next
    Next
    Set rw = Nothing
    Set cel = Nothing
    Set char = Nothing
End Sub

希望有所帮助