VBA, Ошибка 400 — Удалить Зачеркнутый Текст

#excel #vba

Вопрос:

У меня есть следующий код Excel-vba, который удаляет весь зачеркнутый текст:

 Private Sub DelStrikethroughText()  'Deletes strikethrough text in all selected cells  Dim Cell As Range  For Each Cell In Selection  DelStrikethroughs Cell  Next Cell End Sub  Private Sub DelStrikethroughs(Cell As Range)  'deletes all strikethrough text in the Cell  Dim NewText As String  Dim iCh As Integer  For iCh = 1 To Len(Cell)  With Cell.Characters(iCh, 1)  If .Font.Strikethrough = False Then  NewText = NewText amp; .Text  End If  End With  Next iCh  Cell.Value = NewText  Cell.Characters.Font.Strikethrough = False End Sub  

Сам код отлично работает с небольшим набором ячеек, однако выбор более 10 или около того ячеек приводит к ошибке 400.

Мой код всегда завершается ошибкой в последней ячейке первой строки (так что это зависит от моего выбора). Таким образом, макрос прерывается, точно так же, как он должен измениться на строку 2. Курсор останавливается на этой строке NewText = NewText amp; .Text , Но в чем проблема?

Любая помощь будет признательна. Почему Excel выдает ошибку 400, что я должен исправить в своем коде?

Заранее спасибо за любую помощь.

Комментарии:

1. Вы искали ошибку 400? Вы прошли через свой код, чтобы понять, в чем заключается проблема?

2. Len(Cell)? Разве так не должно быть Len(Cell.Value) ?

3. @SJR Когда я перехожу, код работает просто отлично. И, насколько я знаю, ошибка 400-это просто общая ошибка типа «что-то не так», она показывает ошибку только тогда, когда обрабатывает приблизительно gt;10 ячеек

4. @Dominique К сожалению, изменение его на Len(Cell.Value) не решило проблему для меня

5. На какой строке вы получаете ошибку? Какое значение имеет ячейка, которая выдает ошибку?

Ответ №1:

Клетка.Персонажи.Текст не работает для ячеек, содержащих формулы, числа, даты и т.д. вместо этого вы можете использовать функцию Mid (), однако это может преобразовать существующие числа в текст:

 Private Sub DelStrikethroughText()  'Deletes strikethrough text in all selected cells  Dim Cell As Range  For Each Cell In Selection  If Cell.NumberFormat = "General" Then DelStrikethroughs Cell  Next Cell End Sub  Private Sub DelStrikethroughs(Cell As Range)  'deletes all strikethrough text in the Cell  Dim NewText As String  Dim iCh As Integer  For iCh = 1 To Len(Cell)  With Cell.Characters(iCh, 1)  If .Font.Strikethrough = False Then  NewText = NewText amp; Mid(Cell, iCh, 1)  End If  End With  Next iCh  Cell.Value = NewText  Cell.Characters.Font.Strikethrough = False End Sub  

Комментарии:

1. В моем случае фрагмент вашего кода не удаляет зачеркнутый текст, поэтому проблема может заключаться в следующем: Ячейка. Имеет ли тип данных?

2. Я внес некоторые изменения, форматы времени были преобразованы в число, сохраненное в виде текста, поэтому я добавил If Cell.NumberFormat = "General" заявление, также измененное . Текст . Символы(iCh, 1) Mid(Cell, iCh, 1) , чтобы избежать ошибки «число-не-текст». Кажется, теперь это работает

3. Большое вам спасибо, добавление Mid, кажется, отлично работает для меня! Еще раз спасибо