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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.05.2008, 12:51   #1
nikolai_P
Форумчанин Подтвердите свой е-майл
 
Регистрация: 28.04.2008
Сообщений: 116
По умолчанию Как правильно использовать переменные в процедурах

У меня есть макрос на открытие файла
Код:
Private Sub Workbook_Open()
...
tablica (L, F)
...
End Sub
Я хочу чтобы в моей программе каждое действие было отдельной процедурой, мне так проще. Н-р, создание таблицы (1), заполнение таблицы (2), проверка на повторения (3). Подскажите пожалуйста как правильно писать процедуры? Мой Вариант выдает ошибки.
Код:
Private Sub tablica (L,F)
End Sub
Смысл в том, что вторая процедура должна использовать значения (L, F) из первой!

Всем успехов!
nikolai_P вне форума
Старый 13.05.2008, 13:09   #2
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию несколько путей

1 переменные объявить в вызывающей процедуре и передавать как параметр.

2 объявить в модуле...

3 сохранить на диске, потом считывать

а) в реестре (savesettings/getsettings)

b) в файле
1) текстовом
2) бинарном
3) эксель-книге
........
4 хранить в именах книги
.....
n поставить в зависимость от условий вызова(время, дата, окружающие переменные, курс доллара...)
slan вне форума
Старый 13.05.2008, 13:53   #3
nikolai_P
Форумчанин Подтвердите свой е-майл
 
Регистрация: 28.04.2008
Сообщений: 116
По умолчанию

Суть в том, что если я использую одну переменную, то у меня все работает, а с двумя не получается! Если я пишу так:
Код:
Private Sub Workbook_Open()   
...   
tablica (L)   
...   
End Sub   

Private Sub tablica (L)   
...
End Sub
то все работает, а если как приведено выше (tablica(L,F)) - то нет! Почему? Если можно, то опишите ответ попроше. Я новичок в программировании.
nikolai_P вне форума
Старый 13.05.2008, 14:08   #4
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию выложите пример

тогда посмотрим, телепатия - энергоемкий процесс
slan вне форума
Старый 13.05.2008, 14:23   #5
nikolai_P
Форумчанин Подтвердите свой е-майл
 
Регистрация: 28.04.2008
Сообщений: 116
По умолчанию Вот пример!

Вот примерПроцеДУРА.rar
nikolai_P вне форума
Старый 13.05.2008, 15:29   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Может так попробовать?
процедура tablica ждет один параметр, один надо и передавать...

Код:
Private Sub Workbook_Open()      
...
L = 1   
tablica (L)   
L = 2   
tablica (L)
tablica (3)
...      
End Sub      
  
Private Sub tablica (L)      
...   
End Sub
есть подозрение, что вариант tablica (3) тоже пройдет.
удачи
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 13.05.2008, 15:29   #7
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
По умолчанию

А где же неработающий пример? Что прикажете править?
дмидми вне форума
Старый 13.05.2008, 15:36   #8
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию вот вам пример, но только пример- сами доделывайте

как-то так
Вложения
Тип файла: rar ПроцеДУРА.rar (15.1 Кб, 12 просмотров)
slan вне форума
Старый 13.05.2008, 15:57   #9
nikolai_P
Форумчанин Подтвердите свой е-майл
 
Регистрация: 28.04.2008
Сообщений: 116
По умолчанию Почему не работает?

Код:
Private Sub Workbook_Open()
'Рисуем таличку
L = 1   'Номер листа
F = 1   'Размер шрифта шапки
tablica(L, F)
    
End Sub

Private Sub tablica(L As Long, C As Long)
sheets(L).Cells(1, 1).Font.Size = F
End Sub
ЧТО НЕ ТАК?
nikolai_P вне форума
Старый 13.05.2008, 16:07   #10
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
Восклицание Первые впечатления

"Муха - источник заразы" (с)
...от ПроцеДУРА.xls
Цитата:
'C = 1
Sheets(L).Columns(C).ColumnWidth = 4
Sheets(L).Cells(8, C).Value = "№"
Sheets(L).Cells(8, C).Font.Size = Font_size
Sheets(L).Cells(8, C).Font.Bold = True
Sheets(L).Range("A8:A9").Merge
Что бросается в глаза:
- Модуль не начат инструкцией Option Explicit - значит, появление ошибок неизбежно, как крах империализма.
- Sheets вместо Worksheets. Для листов диаграмм всё это работать не будет.
- Мешанина в способах адресации - и Cells(8, C), и Range("A8:A9") - тоже всегда ведёт к ошибкам. Правильно сформировать адрес "B8:B9" для C=2 можно, но это никому не нужный "геморрой". Вместо Range("A8:A9") здесь можно, например, Cells(8, C).Resize(2,1)
- Для каждой Cells(8, C) должны передаваться свои ширина и значение - следовательно, процедуре не хватает еще пары параметров, например сWidth as Variant, сHdr As String.

Последний раз редактировалось дмидми; 13.05.2008 в 16:09.
дмидми вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MySQL - рекурсия в хранимых процедурах Банзай SQL, базы данных 0 12.08.2008 19:04
переменные FoxPro Vasya Свободное общение 0 27.01.2008 00:29
Нужен совет! Как правильно использовать TextBox? Archi Общие вопросы .NET 3 29.12.2007 20:18
Материал о процедурах Jondeer Помощь студентам 18 04.12.2007 21:22
Переменные из БД Кронос БД в Delphi 2 06.06.2007 11:26