/ / Excel VBA. Pour chaque ligne de la plage, pour chaque cellule de la ligne, pour chaque caractère de la cellule - excel, vba, excel-vba

Excel VBA. Pour chaque ligne de la plage, pour chaque cellule de la ligne, pour chaque caractère de la cellule - excel, vba, excel-vba

J'ai créé une macro VBA simple à l'absurde.

Pour chaque ligne de la plage, puis pour chaque cellule de la ligne, puis pour chaque caractère de la cellule.

Mais il retourne une propriété ou une méthode non supportée.

Désormais, pour faire référence à chaque caractère d’une cellule dans Excel VBA, il doit être défini comme une plage. Alors, comment une cellule dans une rangée dans une plage n'est-elle pas un objet de plage?

Dans tous les exemples Excel, les cellules avec la propriété Caractères ont été référencées en valeurs absolues. Comme Worksheets("Sheet1").Range("A1")

Dois-je écrire un code de Worksheets("MySheet").Range("B1") ... Worksheets("MySheet").Range("B2") ... ... Worksheets("MySheet").Range("B250") Pour accéder aux caractères ou existe-t-il un moyen d'accéder à chaque caractère d'une cellule sans fonction Mid?

A propos, la fonction Mid perd la mise en forme mais je recherche des caractères soulignés.

Mon programme est comme ça

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

En conséquence, je reçois un message indiquant qu'une propriété ou une méthode n'est pas prise en charge.

Je vous remercie!

David

Réponses:

2 pour la réponse № 1

"Pourquoi est-ce que soudainement une partie d'un objet Range est soudainement pas une gamme?" Ce n’est pas le problème. L’erreur est Object doesn"t support this property or method. Cela signifie que (essentiellement) quoi que ce soit après la . est un objet, donc l'erreur vous dit que quelque chose est en place avec comment vous utilisez .Character.

J'ai fait quelques recherches rapides et cela fonctionne:

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

Je viens de regarder le Objet de caractères la documentation, et il y a la réponse de la façon d'utiliser .Characters. La question est de savoir comment .Characters est utilisé avec la gamme - pas de compétences sophistiquées ou des connaissances nécessaires. Utilisez simplement les messages d'erreur VB.


1 pour la réponse № 2

Deux choses que j'ai remarquées. 1. Les caractères ne sont pas une collection, donc Pour chacun, cela ne fonctionnera pas. 2. Font.Underline n’est pas booléen. Essayez quelque chose comme:

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

J'espère que cela pourra aider