2015-03-25 12 views
2

Я заметил, что моя книга имеет два разных имени для каждого компонента в VBE. В чем разница между name1 и name2? Кого я должен называть, поэтому я буду уверен, что мой макрос будет работать?Имена рабочих листов в VBE

enter image description here

+0

возможно дубликат [Excel имен вкладки листов и базовые имена визуальных листов] (http://stackoverflow.com/questions/2649844/excel-tab-sheet-names- vs-visual-basic-sheet-names) –

+0

Связано также: http://stackoverflow.com/questions/27169070/identifying-a-worksheet-other-than-by-its-name и еще несколько: http://stackoverflow.com/search?q=sheet+name+codename –

ответ

5

Control это кодовое название листа, в то время как Plan 1 это имя вкладки листа. Последние могут быть легко изменены пользователем, так что безопаснее использовать позывной, если можно - например, имея в виду:

control.range("A1:A10") 

, а не:

sheets("Plan 1").Range("A1:A10") 

Обратите внимание, что вы не можете использовать листовые кодовые имена для обозначения листов в книгах, отличных от тех, которые содержат код, если вы не установили ссылку на проект этой книги или не используете a function that loops through each sheet in the other workbook testing the codename property of each.

+0

Хороший крик о дальнейшей информации о ссылках в том же проекте. –

2

«План1» - это имя вкладки, которое отображается на вкладке внизу рабочего листа.

«Управление» - это кодовое имя, которое может использоваться в VBA для непосредственного ссылки на этот конкретный объект.

Sheets("Plan1").Cells(1, 1).Value и Control.Cells(1, 1).Value будут выдавать одинаковый выход.

0

Каждый документ типа vbComponent в VBE имеет Name и CodeName:

  • Name это имя, которое отображается на вкладке листа в Excel UI.
  • CodeName - это имя, на которое объект листа может быть указан в вашем VBA.

Пример:

Sub Names() 

    Debug.Print Control.Name    'Prints "Plan 1" 
    Debug.Print Control.CodeName   'Prints "Control" 

    'This approach uses the sheet name in a call to `Sheets`, 
    ' which will break if a user changes the name of the sheet 
    'The sheets collection returns an object, so you don't get 
    ' Intellisense, or compile-time error checking 
    Debug.Print Sheets("Plan 1").Name  'Prints "Plan 1" 
    Debug.Print Sheets("Plan 1").CodeName 'Prints "Control" 

End Sub