Excel VBA Цикл по ячейкам и замена их значений - PullRequest
1 голос
/ 10 ноября 2010

Я пытаюсь создать макрос, который циклически перебирает столбец ячеек и заменяет двухбуквенный код страны в этой ячейке названием этой страны. Однако при попытке запуска макроса появляется ошибка «Не найден объект».

Sub ChangeCountryText()
'
' ChangeCountryText Macro
' Changes country codes
'
    For counter = 2 To 20
        Set curCell = ActiveSheet.Cells(counter, 1)
        Select Case curCell.Text
            Case "JP"
                curCell.Text = "Japan"
            Case "FR"
                curCell.Text = "France"
            Case "IT"
                curCell.Text = "Italy"
            Case "US"
                curCell.Text = "United States"
            Case "NL"
                curCell.Text = "Netherlands"
            Case "CH"
                curCell.Text = "Switzerland"
            Case "CA"
                curCell.Text = "Canada"
            Case "CN"
                curCell.Text = "China"
            Case "IN"
                curCell.Text = "India"
            Case "SG"
                curCell.Text = "Singapore"
        End Select
    Next counter

End Sub

Ответы [ 3 ]

6 голосов
/ 10 ноября 2010

Свойство Text доступно только для чтения - его нельзя установить. Присвойте свойству Value значение, и оно должно работать (например, curCell.Value = "Japan")

2 голосов
/ 10 ноября 2010

Уверен, у вас есть веская причина для использования макроса для этого, но вы можете захотеть взглянуть на функции рабочего листа LOOKUP или VLOOKUP как способ сделать что-то подобное без написания макроса.

0 голосов
/ 10 ноября 2010

Вы должны быть в состоянии войти в отладчик, щелкнув слева от текста вашего макроса в редакторе и поместив красную точку на линии

For counter = 2 To 20

Затем вы можете проходить по макросу, пока не получитек ошибке.

В качестве альтернативы вы можете добавить обработку ошибок к вашему макросу

On Error Goto Failed

вверху и перед концом sub add

Failed: 
'handle error here

"Объект не найден"скорее всего из вызова curCell.Text (curCell имеет значение null, ничего или недопустимо, поэтому вызов .Text для него не удался) или из вызова ActiveSheet.Cells (не уверен, что это может произойти)

...