2016-04-22 3 views
0

Я пишу довольно длинный макрос в Excel VBA. Я хочу использовать именованные диапазоны вместо указания в макросе. Этот макрос предназначен для долгосрочного использования. Что произойдет, если диапазон сдвинется другим пользователем? Как я могу настроить свой код, чтобы мои именованные диапазоны могли размещаться для изменения позиций?Работа с изменением именных диапазонов Excel VBA

ответ

2

Я (лично) ненавижу именованные диапазоны. Особенно, когда вы копируете или вставляете листы/диапазоны из одного файла в другой, вы всегда получаете мертвые ссылки или копируете по именованным диапазонам, которые больше не работают или переименованы (поскольку они уже существовали в этом файле).

Мое решение это один из двух следующих:

(1) Я посвящаю определенную часть (или даже модуль) в VBA, чтобы объявить свои диапазоны в глобальных переменных. Это очень похоже на Dim всех переменных в начале каждого под.

'********************************************************* 
'** Declaring all ranges and where to find which data 
'********************************************************* 

Dim rngNamedRangeName As Range 

Sub SetupAllGlobalVariables() 

Set rngNamedRangeName = ThisWorkbook.Worksheets(1).Range("A1:C10") 

End Sub 

'********************************************************* 
'** After that all your normal subs follow and whenever 
'** necessary you can call the above to get your ranges 
'********************************************************* 

Sub ExampleCodeToFormatYourRanges() 

Call SetupAllGlobalVariables 

With rngNamedRangeName 
    .Interior.ColorIndex = 36 
End With 

End Sub 

(2) Тем не менее, мой предпочтительный второй раствор должен иметь отдельный very hidden лист, где я ссылаться/ссылки все диапазоны (которые важны для меня) снова. Итак, в основном, у меня в этом отдельном листе все «важные» данные снова. Это будут ваши именованные диапазоны. Но никто не может трогать этот лист (вот почему его очень скрыт). Если какой-либо из ваших диапазонов изменяется или изменяется, тогда легко снова связать диапазоны на этом скрытом листе с другими листами. Тем не менее, на скрытом листе все данные все еще находятся в одном месте и позволяют вам жестко закодировать все диапазоны в вашем VBA (взяты только из скрытого листа).

Даже программисты, не являющиеся разработчиками VBA, обычно могут исправить такие вещи вторым методом. С помощью первого метода вам, вероятно, всегда понадобится кто-то с навыками VBA, чтобы исправить это.

Примечание. Вышеупомянутое не является единственным решением и не может быть лучшим решением. Но я могу сказать, что это оказалось полезным решением даже для крупных корпораций.

+0

Благодарим за отзыв. Но ваше второе решение может пожертвовать удобством для нескольких пользователей и переносимость макроса и электронной таблицы. Когда у вас есть скрытая электронная таблица, она в конечном итоге выйдет из памяти. – Dombey

+0

В какой-то момент вы должны сообщить VBA, где найти данные, и пока вы не поместите его на структурированный сервер баз данных (SQL), вам нужно где-то жестко закодировать ссылки. Итак, теперь у вас есть три варианта, и вы можете их оценить и поэкспериментировать с ними столько, сколько пожелаете. Я (лично) сделал это в течение длительного времени и пришел к вышеупомянутым выводам. Тем не менее, различные установки/параметры могут привести к разным выводам. Итак, получайте удовольствие, пробовав их все и сравнивая их. Возможно, кто-то может даже добавить другое практическое решение. – Ralph

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