#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, кажется, отлично работает для меня! Еще раз спасибо