/ / Excel VBA. Para cada linha no intervalo, para cada célula na linha, para cada caractere na célula - excel, vba, excel-vba

Excel VBA. Para cada linha no intervalo, para cada célula na linha, para cada caractere na célula - excel, vba, excel-vba

Eu criei uma macro VBA simples ao absurdo.

Para cada linha no intervalo, depois para cada célula na linha e depois para cada caractere na célula.

Mas ele retorna propriedade ou método não suportado.

Agora, para se referir a cada caractere em uma célula no Excel VBA, ele deve ser definido como um intervalo. Então, como uma célula em uma linha de um intervalo não é um objeto de intervalo?

Em todos os exemplos do Excel, as células com propriedade Caracteres foram mencionadas em valores absolutos. Gostar Worksheets("Sheet1").Range("A1")

Eu tenho que escrever um código de Worksheets("MySheet").Range("B1") ... Worksheets("MySheet").Range("B2") ... ... Worksheets("MySheet").Range("B250") Para acessar caracteres ou existe uma maneira de acessar cada caractere em uma célula sem a função Mid?

A propósito, a função Mid perde a formatação, mas estou procurando caracteres sublinhados.

Meu programa é assim

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

Como resultado, recebo a mensagem de que uma propriedade ou método não é suportado.

Obrigado!

David

Respostas:

2 para resposta № 1

"Por que de repente uma parte de um objeto de alcance repentinamente não é um alcance?" Esse não é o problema. O erro é Object doesn"t support this property or method. Isso significa que (basicamente) qualquer coisa após o . é um objeto, então o erro está dizendo que alguma coisa está de acordo com como você está usando .Character.

Eu fiz algumas pesquisas rápidas e isso funciona:

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

Eu apenas olhei para o Objeto de caracteres documentação e há a resposta de como usar .Characters. A questão é como .Characters é usado com a linha - não são necessárias habilidades ou conhecimentos sofisticados. Basta usar as mensagens de erro do VB.


1 para resposta № 2

Eu notei duas coisas. 1. Caracteres não são uma coleção; portanto, For Each não funcionará. 2. Font.Underline não é booleano. Tente algo como:

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

espero que ajude