2015-03-17 4 views
2

У меня проблема, которая кажется простой, но я не могу понять, в чем проблема с моим кодом.VBA: задать имя диапазона с переменной String

Dim x As Long, y As Long, z As Long 
Dim ContractName As String 
Dim RangeToName As Range 

y = Cells(1, 1).End(xlToRight).Column 

    For x = 1 To y 
     ContractName = Cells(1, x) 
     z = Cells(Rows.count, x).End(xlUp).Row 
     Set RangeToName = Range(Cells(2, x), Cells(z, x)) 
     RangeToName.Name = ContractName 
    Next x 
End Sub 

Я пытаюсь назвать диапазоны, основанные на тексте в ячейке «ContractName», которая изменится для каждого x.

Но строка «RangeToName.Name = ContractName» дает мне ошибку 450 во время выполнения.

Однако, если я добавляю какой-либо другой текст в этой строке, например, «RangeToName.Name =» test «& ContractName« все работает, и мои диапазоны называются полной строкой текста, включая текст в ячейке «ContractName». ..

Что мне не хватает?

Приветствия

+0

Вы пробовали 'ContractName = Cells (1, x) .Value' или' ContractName = Cells (1, x) .Text'? – RubberDuck

+0

Что вы пытаетесь сделать? – pnuts

+1

@RubberDuck Привет, да, оба дают мне такую ​​же ошибку 450. – vlad88667

ответ

3

Имя должно начинаться с буквы или символа подчеркивания, не может содержать пробелы, и не должны быть такими же, как зарезервированное ключевое слово в Excel.

Например:

Имя не может начинаться с цифры.

Имя не может быть «Это тест»

Имя не может быть «A1»

«KL2000» не может использоваться в качестве имени, так как было бы в конфликт с ссылкой на ячейку KL2000, но «_KL2000» будет полезен.

Вы всегда должны пытаться выполнить то, что вы пытаетесь сделать с VBA непосредственно в приложении Excel. Если вы сделали это с именем типа «KL2000», вы получили бы содержательное сообщение об ошибке.

+0

Благодарим вас за помощь, я должен был сделать больше исследований! – vlad88667

+0

Хорошая информация по этому вопросу в [Имена Excel - Именованные диапазоны] (http://www.contextures.com/xlNames01.html). – Jeeped

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