mail mail

Сохранение значений в скрытых именах книги Excel

Данные функции могут быть полезны, если вы хотите спрятать некоторые значения в книге Excel

Функция SaveValue предназначена для создания (изменения существующих) имён в книге, а функция GetValue - для получения ранее сохранённых значений.

Sub SaveValue(ByRef WB As Workbook, ByVal Parameter As String, ByVal NewValue As String)
    ' создаёт в книге WB скрытое имя Parameter со значением NewValue
   Dim n As Name: On Error Resume Next: Err.Clear
    NewValue = "%%%" & NewValue & "%%%"
    WB.Names(Parameter).RefersTo = NewValue
    If Err Then WB.Names.Add Parameter, NewValue
    WB.Names(Parameter).Visible = False
End Sub

Function GetValue(ByRef WB As Workbook, ByVal Parameter As String) As String
    ' возвращает ранее сохранённое значение в скрытом свойстве книги
   On Error Resume Next
    GetValue = WB.Names(Parameter).RefersTo
    GetValue = Split(GetValue, "%%%")(1)
End Function

Ознакомьтесь также с макросом для просмотра всех имён в книге Excel
(чтобы потом посмотреть результат работы функции SaveValue)

Пример записи и чтения скрытых значений:

Sub ПримерИспользования()
    SaveValue ThisWorkbook, "test", "123qwe"
    Debug.Print GetValue(ThisWorkbook, "test")
End Sub

Использовать данный код можно, например, для программного снятия пароля с листа Excel при открытии книги:

Private Sub Workbook_Open()
    ActiveSheet.Unprotect GetValue(ThisWorkbook, "пароль")
End Sub

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

подскажите как обнаружить что в книге есть скрытые имена и определить их и их значения

Спасибо.

Ну а в чем проблема?
Сначала преобразовываем массив в текстовую строку, сохраняем в свойствах,
а когда данные понадобятся - извлекаем их, и преобразовываем обратно в массив

PS: Я бы сделал проще - сохранил массив на скрытом листе.
 Ну или записал бы в отдельный файл (текстовый или Excel), сохранив в скрытом имени лишь путь к этому файлу.

Я имел ввиду программно сформированный двумерный массив значений

А какой массив вы туда пытаетесь записать?
Диапазон ячеек? или программно сформированный массив?

Можно попробовать сцепить массив в одну строку функцией Join, а потом эту строку записать в скрытое имя.

А как записать массив значений в скрытое имя?

Макрос принимает в качестве параметра книгу, в которую нужно записать свойство.

ThisWorkbook - книга, из которой запускается макрос

ActiveWorkbook - активная в момент запуска макроса книга

Workbooks("Имя.Расширение") - заданная пользователем книга (должна быть отрыта до запуска макроса)

Пример (книга test.xls должна быть открыта):

Sub ПримерИспользованияДляДругогоФайла()
    SaveValue Workbooks("test.xls"), "Свойство", "Значение"
End Sub

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

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
10 + 2 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.