2016-09-05 4 views
0

У меня есть код, который должен преобразовать текст в правильный случай, но он не работает. я начинаю пометив клетки, которые я хочу переделанный, а затем запустить этот макрос:Правильный выбор случая в Excel

Sub ProperCase() 

Dim rng As Range, cell As Range 

Set rng = Selection 

For Each cell In rng 

Next cell 

cell.Value = WorksheetFunction.Proper(cell.Value) 

End Sub 

Но Excel дает мне runtimer ошибку 91

переменной объекта или переменная блока не установлен

+3

Строка 'Next cell' должна быть после' cell.Value = ... '. В противном случае вы ничего не делаете в цикле. – raemaerne

+0

Конечно, спасибо! – Heresh

+0

Можно ли сделать исключения для некоторых слов? – Heresh

ответ

2

Ваш код перезапишет формулу - сообщите ей, чтобы игнорировать формулу.
Вместо того, чтобы использовать WorksheetFunction.Proper использование StrConv(value, conversion_type).

Sub ProperCase() 

    Dim rng As Range 

    'Use special cells so as not to overwrite formula. 
    For Each rng In Selection.SpecialCells(xlCellTypeConstants, xlTextValues).Cells 
     Select Case StrConv(rng.Value, vbLowerCase) 
      'Ensure all exception words are lower case. 
      Case "bob", "word2", "dave", "some other words" 
       rng.Value = StrConv(rng.Value, vbLowerCase) 
      Case Else 
       'StrConv is the VBA version of Proper. 
       rng.Value = StrConv(rng.Value, vbProperCase) 
     End Select 
    Next rng 

End Sub 

Edit: Добавлено SELECT...CASE исключить слова в соответствии с комментарием.

+0

Это отличное элегантное решение, есть ли способ вместо того, чтобы просто ничего не делать для выбора, чтобы заставить его вместо нижнего регистра? – Heresh

+0

Просто замените комментарий '' Do nothing' на 'rng.Value = StrConv (rng.Value, vbLowerCase)' - https://msdn.microsoft.com/en-us/library/aa263373(v=vs.60) .aspx –

+0

Не работает он говорит: Остальное без оператора if. – Heresh

0

cell.value должны прийти до вы итерации в следующую ячейку:

Sub ProperCase() 

    Dim rng As Range, cell As Range 

    Set rng = Selection 

    For Each cell In rng 
     cell.Value = WorksheetFunction.Proper(cell.Value) 
    Next cell 


End Sub 
Смежные вопросы