2014-09-16 5 views
-1

В VBA я пытаюсь выполнить цикл и удалить последний символ текста каждой ячейки.цикл, удаляющий последний символ

Я понимаю код для удаления последнего символа текста в ячейке следующим образом: туЗЬптда = Left (туЗЬптд, Len (туЗЬптд) - 1)

Однако я пытаюсь получить эту работу в цикл for, и я просто получаю объект сообщения об ошибке. Вероятно, что-то очевидное, что мне не хватает.

Вот мой код с петлей для:

Dim rngh As Range, cellh As Range 
Dim myString As String 
Set rngh = Range("H1:H500") 
For Each cellh In rngh 
    myString = cellh.Text 
    myString = Left(myString, Len(myString) - 1) 
Next cellh 

Спасибо.

+0

Что такое 'rngh'? Это «Rng»? –

+0

rngh - это имя переменной для выделенного диапазона, который я хочу пройти. – Lancealott92

+0

Итак, я думаю, что это ячейка в диапазоне. выберите текст в этой ячейке. Затем удалите последний символ. – Lancealott92

ответ

2

Я бы не использовать .text или петлю на одну ячейку, в то время как он будет медленнее - использование массива:

Dim vData 
Dim n      As Long 
vData = Range("H1:H500").Value 
For n = 1 To UBound(vData, 1) 
    If Len(vData(n, 1)) <> 0 Then vData(n, 1) = Left$(vData(n, 1), Len(vData(n, 1)) - 1) 
Next n 
Range("H1:H500").Value = vData 

например.

+0

Отлично работает! Я буду чаще использовать массивы в будущем! – Lancealott92

0

У вас есть ошибка в заданной строке. Я думаю, что это должно быть

Set rngh = Range("H1:H500")

Но будет исключением, когда вы пытаетесь сократить пустые строки. Вы должны проверить, если это возможно, чтобы сделать это .. что-то вроде

myString = cellh.Text 
If Len(myString) > 0 Then 
    myString = Left(myString, Len(myString) - 1) 
End If 
+0

Хорошо заметили, это была просто опечатка, хотя она все еще не работает :( – Lancealott92

+0

Прошу прощения, забыл добавить чек на пустые строки .. :) –

0

Попробуйте следующий код

Private Sub Workbook_Open() 
    Dim rngh As Range, cellh As Range 
    Dim myString As String 
    Set rngh = Range("H1:H500") 
    For Each cellh In rngh 
     If Not IsEmpty(cellh) Then 
      myString = cellh.Text 
      myString = Left(myString, Len(myString) - 1) 
      cellh.Value = myString 
     End If 
    Next cellh 
Смежные вопросы