Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2010, 19:17   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Работа с переменными Excel

При работе с формами я сохраняю значение в переменную ексель командой
Код:
    Names("п_Объект_АдресОбласть").Value = InОбласть.Value
Где InОбласть - это комбобокс.
Если "InОбласть.Value" имеет нулевое значение, то переменная "п_Объект_АдресОбласть" уничтожается.
Как сделать так что бы при нулевых значениях переменная Excel сохранялась, и так же имела нулевое значение?
С уважением, Алексей.

Последний раз редактировалось tae1980; 17.03.2010 в 19:54.
tae1980 вне форума Ответить с цитированием
Старый 17.03.2010, 20:09   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Я обычно записываю данные не в имена, а в пользовательские свойства книги:

Код:
'======================= запись и чтение свойств документа, определённых пользователем ======================

Sub SDoc(ByVal VarName As String, ByVal VarValue As Variant)    ' запись в документ (возможна ошибка с типом данных!)
    DDoc VarName
    ActiveWorkbook.CustomDocumentProperties.Add VarName, False, msoPropertyTypeString, CStr(VarValue)
End Sub

Sub SDocB(ByVal VarName As String, ByVal VarValue As Boolean)    ' запись в документ (возможна ошибка с типом данных!)
    DDoc VarName
    ActiveWorkbook.CustomDocumentProperties.Add VarName, False, msoPropertyTypeBoolean, CBool(VarValue)
End Sub

Sub DDoc(ByVal VarName As String)    ' удаление переменной из документа
    If ActiveWorkbook.CustomDocumentProperties.Count > 0 Then
        For Each cdp In ActiveWorkbook.CustomDocumentProperties
            If cdp.Name = VarName Then cdp.Delete
        Next
    End If
End Sub


Function GDoc(ByVal VarName As String) As String    'чтение из документа
    GDoc = ""
    If ActiveWorkbook.CustomDocumentProperties.Count > 0 Then
        For Each cdp In ActiveWorkbook.CustomDocumentProperties
            If cdp.Name = VarName Then GDoc = cdp.Value
        Next
    End If
End Function

Function GDocB(ByVal VarName As String) As Boolean   'чтение из документа
    GDocB = False
    If ActiveWorkbook.CustomDocumentProperties.Count > 0 Then
        For Each cdp In ActiveWorkbook.CustomDocumentProperties
            If cdp.Name = VarName Then GDocB = CBool(cdp.Value)
        Next
    End If
End Function

Код:
Sub ПримерИспользования()
    VarName = "ИмяПеременной"
    SDoc VarName, "значение"
End Sub
Код:

Sub LoadClientInfo()
    On Error Resume Next
    Me.TextBox__Адрес = GDoc("Адрес")
    Me.TextBox__КонтактноеЛицо = GDoc("КонтактноеЛицо")
    Me.SpinButton_discount = Val(GDoc("discount"))
End Sub

Последний раз редактировалось EducatedFool; 17.03.2010 в 20:12.
EducatedFool вне форума Ответить с цитированием
Старый 17.03.2010, 20:13   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Я обычно записываю данные не в имена, а в пользовательские свойства книги:
Не знал о таком... Присмотрюсь подробнее.
А можно ли из самого Excel получить доступ к ним в формулах?
Планируется что эти переменные будут активно использоваться в формулах, форма нужна только для задания их значения.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 17.03.2010, 20:15   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Планируется что эти переменные будут активно использоваться в формулах, форма нужна только для задания их значения.
Для этого пользовательские свойства книги не подходят.
Придётся использовать Names.
EducatedFool вне форума Ответить с цитированием
Старый 17.03.2010, 20:21   #5
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Я обычно записываю данные не в имена, а в пользовательские свойства книги:
Очень, очень интересно... Не скромный вопрос: почему процедура называется GDoc?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 17.03.2010, 20:23   #6
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Для этого пользовательские свойства книги не подходят.
Придётся использовать Names.
В таком случае начальный вопрос остается в силе.
Как занести пустое значение в переменную? В ручную это сделать без проблем, а вот из VBA не получается.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 18.03.2010, 09:25   #7
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Нашел решение. Вот код:
Код:
    If InОбласть.Value = "" Then
        Names.Add "п_Объект_АдресОбласть", "="""""
    Else
        Names("п_Объект_АдресОбласть").Value = InОбласть.Value
    End If 'Область
Конечно это не одна строчка, но работает. :))
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с формами dscoma Microsoft Office Word 5 18.08.2010 14:09
Работа с формами Claster Общие вопросы Delphi 11 01.02.2010 17:09
работа с формами Graggis1 Microsoft Office Access 4 17.08.2009 18:14
Работа с формами S_Yevgeniy Помощь студентам 8 04.08.2009 10:23
Работа с формами ruslans Общие вопросы Delphi 1 16.04.2009 15:06