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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2011, 22:30   #1
Severny
Форумчанин
 
Регистрация: 07.10.2010
Сообщений: 144
По умолчанию Переменная из листов в форму

Добрый всем день!
Подскажие пожалуйста как быть в следующей ситуации? Есть листы. Есть одна форма которая вызывается из этих листов. В форму заносится значение переменной которое берется из разных ячеек на каждом листе. То есть на Листе1 когда вызывается форма она берет значение ячейки А1, на Листе 2 когда вызывается таже форма берется значение АА50. В форме я использую ActiveSheet.... А как на листах объявить переменные и присвоить им нужное значение?
Severny вне форума Ответить с цитированием
Старый 12.09.2011, 23:02   #2
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

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

Например
Код:
Sub m()
    Select Case ActiveSheet.Index
    Case 1
      MsgBox "1"
    Case 2
      MsgBox "2"
    Case 3
      MsgBox "3"
    End Select
    
End Sub
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 12.09.2011, 23:58   #3
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

> В форме я использую ActiveSheet

Если листов немного, можно при активации формы выполнять примерно такой код:
Код:
Dim MyVar 'переменная в модуле формы

Private Sub UserForm_Initialize()
Select Case ActiveSheet.Name
Case "Лист1": MyVar = [A1]
Case "Лист2": MyVar = [AA50]
'и т.д.
End Select
End Sub
Если листов много, составьте таблицу Имя листа - Адрес ячейки на отдельном скрытом листе и используйте ВПР. Например, если таблица находится в столбцах А, В листа "список":
Код:
MyVar = evaluate(application.VLOOKUP(activesheet.name,[список!A1:B99],2,0))
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 13.09.2011, 09:16   #4
Severny
Форумчанин
 
Регистрация: 07.10.2010
Сообщений: 144
По умолчанию

Watcher_1, Казанский Листы время от времени добавляются. При том на некоторых используется форма, на некоторых нет. Получается что прийдется каждый раз переписывать код формы. Я предполагал просто в лист с которого будет вызываться форма бросать небольшой код в котором просто пропишу ту ячейку с которого будет подтягиваться значение в форму, когда ее запусаешь с этого листа.

ActiveSheet.Name это имя что я могу менять?
Severny вне форума Ответить с цитированием
Старый 13.09.2011, 09:23   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Может быть использовать Find?
Искать на листе кодовое слово, далее оффсетом брать значение рядом.
Тогда нет проблем с добавлением листов - главное обозначить, где лежат нужные данные.
Причём если кодовое слово не нашлось, то форму можно не показывать вовсе.
Т.е. при вызове формы сперва ищем код, если нашли - передаём в public переменную нужное значение, открываем форму.
Если не нашлось - вызов игнорируем или пишем типа "Ошибка, данных нет."
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 13.09.2011 в 09:28.
Hugo121 вне форума Ответить с цитированием
Старый 13.09.2011, 09:58   #6
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

> Получается что прийдется каждый раз переписывать код формы.
В моем втором варианте - нет. Просто добавить строку в список.

Можно и "небольшой код". В обычном модуле
Код:
Public MyVar
В коде листа1
Код:
MyVar = [A1]
UserForm1.Show
В коде листа2
Код:
MyVar = [AA50]
UserForm1.Show
В коде формы
Код:
Private Sub UserForm_initialize()
Label1 = MyVar 'например
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 13.09.2011, 10:35   #7
Severny
Форумчанин
 
Регистрация: 07.10.2010
Сообщений: 144
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Может быть использовать Find?
Интересная идея, но не будет ли долго искать то самое слово по всему листу?
Severny вне форума Ответить с цитированием
Старый 13.09.2011, 10:38   #8
Severny
Форумчанин
 
Регистрация: 07.10.2010
Сообщений: 144
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Код:
MyVar = [A1]
UserForm1.Show
Код:
MyVar = [AA50]
UserForm1.Show
"Облечь" в любую процедуру?:
Код:
Private Sub ..... ()
MyVar = [A1]
UserForm1.Show
End Sub
Severny вне форума Ответить с цитированием
Старый 13.09.2011, 10:43   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Цитата:
Сообщение от Severny Посмотреть сообщение
Интересная идея, но не будет ли долго искать то самое слово по всему листу?
- моргнуть не успеете
Главное - придумать уникальное слово...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 13.09.2011, 10:57   #10
Severny
Форумчанин
 
Регистрация: 07.10.2010
Сообщений: 144
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
- моргнуть не успеете
Главное - придумать уникальное слово...
Переменная подтягивается в процедуру на событие изменения в одном из 2-х ТекстБоксов? Не медленно ли мне прийтеся моргать?
За уникальное слово можно взять фразу в шапке колонки в котором сидит мое значение. А можно небольшой примерчик с Find?
Severny вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать форму в ручную и освободить из памяти предыдущую форму, на С++Builder 2009? AndreyK Общие вопросы C/C++ 1 18.01.2012 20:54
Переменная в C# bead C# (си шарп) 8 01.05.2011 12:32
Одну и ту же форму использовать как MDI-child форму и как модальную форму? PrimaryPro Общие вопросы Delphi 2 10.03.2010 20:52
c# ссылочная переменная hizahazahub Общие вопросы .NET 1 16.04.2009 20:53
Как изменить стандартную форму на форму любой сложности QwErEn Общие вопросы Delphi 9 08.06.2007 11:44