/ / Excel VBA. Dla każdego rzędu w zakresie, dla każdej komórki w rzędzie, dla każdego znaku w komórce - excel, vba, excel-vba

Excel VBA. Dla każdego rzędu w zakresie, dla każdej komórki w rzędzie, dla każdego znaku w komórce - excel, vba, excel-vba

Stworzyłem makro VBA proste do absurdu.

Dla każdego wiersza w zakresie, a następnie dla każdej komórki w wierszu, a następnie dla każdego znaku w komórce.

Zwraca jednak nieobsługiwaną właściwość lub metodę.

Teraz, aby odnieść się do każdego znaku w komórce w Excel VBA, należy go zdefiniować jako zakres. Jak więc nie ma komórki w wierszu w zakresie nie będącym obiektem zakresu?

We wszystkich przykładach Excel komórki z właściwością Znaki zostały określone w wartościach bezwzględnych. Lubić Worksheets("Sheet1").Range("A1")

Czy muszę napisać kod Worksheets("MySheet").Range("B1") ... Worksheets("MySheet").Range("B2") ... ... Worksheets("MySheet").Range("B250") Aby uzyskać dostęp do znaków lub czy istnieje sposób na dostęp do każdego znaku w komórce bez funkcji Mid?

Przy okazji, funkcja Mid traci formatowanie, ale szukam podkreślonych znaków.

Mój program jest taki

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

W rezultacie otrzymuję wiadomość, że właściwość lub metoda nie jest obsługiwana.

Dziękuję Ci!

David

Odpowiedzi:

2 dla odpowiedzi № 1

„Dlaczego nagle część obiektu zasięgu nagle nie jest zakresem?” To nie problem. Błąd jest Object doesn"t support this property or method. Oznacza to, że (w zasadzie) wszystko po . jest obiektem, więc błąd ci to mówi coś zależy od tego, jak używasz .Character.

Szukałem szybko, a to działa:

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

Po prostu sprawdziłem Obiekt znaków dokumentacja, a jest odpowiedź na pytanie, jak korzystać .Characters. Problem polega na tym, jak .Characters jest używany z zakresem - nie wymaga zaawansowanych umiejętności ani wiedzy. Po prostu użyj komunikatów o błędach VB.


1 dla odpowiedzi nr 2

Dwie rzeczy, które zauważyłem. 1. Znaki nie są kolekcją, więc For Each wygrało pracę. 2. Font.Underline nie jest Boolean. Spróbuj czegoś takiego:

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

Nadzieja, która pomaga