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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2012, 14:35   #1
tibhar940
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 79
Вопрос Выполнение инпутбокса вне макросов

Подскажите пожалуйста. Нужно значение введённое в инпутбокс использовать для нескольких макросов. Выношу инпутбокс за макросы, но компилятор ругается :"Invalid outside procedure".

Код:
Dim a As Variant
Dim b As Variant
a = inputbox("", "", "")
b = inputbox("", "", "")
sub ssub()
Range("a1") = a
Range("b1") = b
end sub

sub ssub2()
Range("a2") = a
end sub

Последний раз редактировалось tibhar940; 20.09.2012 в 14:52.
tibhar940 вне форума Ответить с цитированием
Старый 20.09.2012, 14:52   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

можно как во вложении,через Property
Вложения
Тип файла: rar ssub.rar (10.7 Кб, 12 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 20.09.2012, 15:23   #3
tibhar940
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 79
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
можно как во вложении,через Property
Спасибо, но я не совсем понял принцип действия:
Код:
Private A_ As Variant
Private B_ As Variant
Public Property Get a() As Variant
a = A_
End Property
Public Property Let a(ByVal vNewValue As Variant)
 A_ = vNewValue
End Property
Public Property Get b() As Variant
b = B_
End Property
Public Property Let b(ByVal vNewValue As Variant)
 B_ = vNewValue
End Property
tibhar940 вне форума Ответить с цитированием
Старый 20.09.2012, 15:40   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

doober, похоже, ты чего-то перемудрил.
Я 3 минуты втыкал в код, и понять не мог, что к чему, зачем всё это, и как всё это работает )


Так же ведь намного проще:
Код:
Sub ssub1()
    Range("a1") = a
    Range("b1") = b
End Sub

Sub ssub2()
    Range("a2") = a
End Sub


Function a()
    a = InputBox("", "", "")
End Function

Function b()
    b = InputBox("", "", "")
End Function
EducatedFool вне форума Ответить с цитированием
Старый 20.09.2012, 16:07   #5
tibhar940
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 79
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
doober, похоже, ты чего-то перемудрил.
Я 3 минуты втыкал в код, и понять не мог, что к чему, зачем всё это, и как всё это работает )


Так же ведь намного проще:
Код:
Sub ssub1()
    Range("a1") = a
    Range("b1") = b
End Sub

Sub ssub2()
    Range("a2") = a
End Sub


Function a()
    a = InputBox("", "", "")
End Function

Function b()
    b = InputBox("", "", "")
End Function
Спасибо. А теперь еще один вопрос, который возник после того как я прикрутил это к другому макросу))
Код:
Function a()
a = InputBox("", "", "")
End Function
Function b()
b = InputBox("", "", "")
End Function

Sub Format()
'On Error Resume Next
Set Fso = CreateObject("Scripting.FileSystemObject")
Set folder = Fso.GetFolder("C:\test")
For Each File In folder.Files
With Workbooks.Open(File.Path).Worksheets(1)
If a <> "" Then
.Range("A1").Replace "1", a, xlPart
End If
If b <> "" Then
.Range("b1").Replace "2", b, xlPart
End If
.Parent.Close -1
End With
Next
End Sub
Как сделать так, чтобы Значение в инпутбокс я записывал только один раз? А то здесь он почему-то выводит инпутбокс 8 раз)) ЧЯДНТ?

Последний раз редактировалось tibhar940; 20.09.2012 в 16:18.
tibhar940 вне форума Ответить с цитированием
Старый 20.09.2012, 16:43   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
ЧЯДНТ?
вы выполняете запрос внутри цикла.
сколько файлов - столько и запросов

вынесите запрос за пределы цикла:

Код:
Sub Format()
'On Error Resume Next

replace1 = a
replace2 = b
Set Fso = CreateObject("Scripting.FileSystemObject")
Set folder = Fso.GetFolder("C:\test")
For Each File In folder.Files
With Workbooks.Open(File.Path).Worksheets(1)
If a <> "" Then
.Range("A1").Replace "1", replace1, xlPart
End If
If b <> "" Then
.Range("b1").Replace "2", replace2, xlPart
End If
.Parent.Close -1
End With
Next
End Sub
Только тогда какой смысл выносить инпутбоксы из кода???
EducatedFool вне форума Ответить с цитированием
Старый 20.09.2012, 16:48   #7
tibhar940
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 79
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
вы выполняете запрос внутри цикла.
сколько файлов - столько и запросов

вынесите запрос за пределы цикла:

Код:
Sub Format()
'On Error Resume Next

replace1 = a
replace2 = b
Set Fso = CreateObject("Scripting.FileSystemObject")
Set folder = Fso.GetFolder("C:\test")
For Each File In folder.Files
With Workbooks.Open(File.Path).Worksheets(1)
If a <> "" Then
.Range("A1").Replace "1", replace1, xlPart
End If
If b <> "" Then
.Range("b1").Replace "2", replace2, xlPart
End If
.Parent.Close -1
End With
Next
End Sub
Только тогда какой смысл выносить инпутбоксы из кода???
Потому что есть еще десяток макросов, где необходимо применить выбранное в инпутбоксе.... (Извиняюсь, что не уточнил этого.) - должно быть так, ввожу в инпутбокс, запускается несколько макросов (format1,2 и т.д.) и подцепляет данные из инпутбокса.

Последний раз редактировалось tibhar940; 20.09.2012 в 17:05.
tibhar940 вне форума Ответить с цитированием
Старый 20.09.2012, 16:54   #8
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
doober, похоже, ты чего-то перемудрил.
Я 3 минуты втыкал в код, и понять не мог, что к чему, зачем всё это, и как всё это работает )
[/CODE]

Я сам не понял,но ведь работает.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 20.09.2012, 17:20   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

а и b объявляйте публичными.
Есть отдельный макрос с инпутбоксами, из него можно вызывать другие макросы.
Или в других до использования переменных можно проверить их значения - и если они не заданы, то вызвать макрос с инпутбоксами.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 20.09.2012, 17:41   #10
tibhar940
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 79
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
а и b объявляйте публичными.
Есть отдельный макрос с инпутбоксами, из него можно вызывать другие макросы.
Или в других до использования переменных можно проверить их значения - и если они не заданы, то вызвать макрос с инпутбоксами.
Спасибо! всё работает отлично. Хоть и без примера кода, но я сразу всё понял и сделал. Вы меня в очередной раз направляете в нужное русло.

Последний раз редактировалось tibhar940; 20.09.2012 в 17:59.
tibhar940 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление SWF из вне. fufel Помощь студентам 1 01.03.2011 13:08
Сервер на вне из сети Horus92 Операционные системы общие вопросы 12 23.10.2010 19:28
Нужна база вне ПК Sanctus БД в Delphi 5 28.09.2010 13:21
Автоматический запуск макросов с листа на котором указан перечень макросов с параметрами и без Neoli Microsoft Office Excel 2 09.03.2009 14:31
Как ускорить выполнение макросов tat-besidovska Microsoft Office Excel 1 22.01.2008 12:12