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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 22.01.2009, 19:18   #1
Rom1k06
Форумчанин
 
Регистрация: 30.07.2008
Сообщений: 125
По умолчанию Определение переменной

Добрый вечер!
Подскажтие ПЛЗ...решение задачи
У меня записано 3 в каждом из них выбирается файл для загрузки
Код везде одинаковый.

Set opWb = ThisWorkbook
Set opWs = opWb.Sheets("Сводная")
m2: FilesToOpen = Application.GetOpenFilename(FileFil ter:="Microsoft Excel Files (*.xls), *.xls", _
MultiSelect:=False, Title:="Выберете файл для обработки")
If TypeName(FilesToOpen) = "Boolean" Then

Select Case MsgBox("Вы не выбрали ни одного Файла! Продолжить?", vbYesNo _
Or vbExclamation Or vbDefaultButton1, Application.Name)
Case 6: GoTo m2
Case 7: Exit Sub
End Select
End If

Set oWbook = Workbooks.Open(FilesToOpen)
Set oWs = oWbook.Sheets(1)


Как мне объявить глобальную переменую FilesToOpen для того чтобы прописать этот код в отдельном модуле и потом просто вызывать его из разных модулей?
Rom1k06 вне форума
Старый 22.01.2009, 19:34   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

начните записывать новый макрос в строке "сохранить в:" вместо "Эта книга" выберите "Личная книга макросов". Можно на этом запись макроса остановить. Вы только что создали специфический файл эксель, который открывается при каждом запуске эксель. Копируйте туда ваш код, и пользуйтесь обявленными функциями из любой книги. Необходимо только учитывать, где находится код, там где это играет роль. И еще когда эксель будет закрывать спросит вас "сохранить изменения в personal-бла-бла-бла..." это и есть ваша личная книга макросов.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 22.01.2009, 19:59   #3
Rom1k06
Форумчанин
 
Регистрация: 30.07.2008
Сообщений: 125
По умолчанию

Не совсет так..
Считаю это не лгичным т.к. книги находится в общем доступе, и в ней работают как минимум 3 человека одновременно.
Мне необходимо из 3-х разных модулей этой книги открывать разные файлы для разного типа обработки.
структура токова
загрузить продажи 1: выбираем файл грузим1
загрузить продажи 2 :выбираем файл грузим2
загрузить продажи 3: выбираем файл грузим3
так вот я хочу из 3 частей кода ("выбираем файл") получился один отдельный макрос которы просто будет открывать файл, и присваивать имя переменной FileToOpen имя файло который он открыл. и я мог прочитать имя этого файла из любого модуля.
Rom1k06 вне форума
Старый 22.01.2009, 20:12   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Может, так:

Код:
Function Open_XL_File() As String
m2:     Filename = Application.GetOpenFilename(FileFilter:="Microsoft Excel Files (*.xls), *.xls", _
                                               MultiSelect:=False, Title:="Выберете файл для обработки")
    msg = "Вы не выбрали ни одного Файла! Продолжить?"

    If VarType(Filename) = vbBoolean Then
        Select Case MsgBox(msg, 52, Application.Name)
        Case 6: GoTo m2
        Case 7: Exit Function
        End Select
    End If

    Set oWbook = Workbooks.Open(Filename)
    Open_XL_File = oWbook.Name
End Function

Sub test()    ' пример использования
    file1 = Open_XL_File
    file2 = Open_XL_File
    file3 = Open_XL_File
    Debug.Print "Открыты файлы:  ", file1, file2, file3
End Sub
EducatedFool вне форума
Старый 22.01.2009, 20:36   #5
Rom1k06
Форумчанин
 
Регистрация: 30.07.2008
Сообщений: 125
По умолчанию

Извените за тупой вопрос,
а как мне вызвать эту функию с тот момент когда мне нужно?
Rom1k06 вне форума
Старый 22.01.2009, 20:46   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

1) Добавляете модуль в проект VBA
2) Вставляете в него код функции:
Код:
Public Function Open_XL_File(Optional ByVal title As String) As String
m2:     Filename = Application.GetOpenFilename(FileFilter:="Microsoft Excel Files (*.xls), *.xls", _
                                               MultiSelect:=False, title:=title)
    msg = "Вы не выбрали ни одного Файла! Продолжить?"

    If VarType(Filename) = vbBoolean Then
        Select Case MsgBox(msg, 52, Application.Name)
            Case 6: GoTo m2
            Case 7: Exit Function
        End Select
    End If

    Set oWbook = Workbooks.Open(Filename)
    Open_XL_File = oWbook.Name
End Function
3) В любой модуль (в том числе модуль листа или книги) пишем макрос с вызовом этой функции:

Код:
Sub test()    ' пример использования
    file1 = Open_XL_File("Выберите файл со списком продаж")
    file2 = Open_XL_File
    file3 = Open_XL_File("Выберите файл для обработки")
    'Debug.Print "Открыты файлы:  ", file1, file2, file3
    ' ... здесь пишете код
End Sub
Теперь в качестве параметра (необязательного) функция может принимать заголовок диалогового окна выбора файла.

Таким образом, код
file1 = Open_XL_File("Выберите файл со списком продаж")

вызывает диалоговое окно открытия файла (с заголовком "Выберите файл со списком продаж"), и открывает выбранный файл.

В переменную file1 записывается имя открытого файла (или пустая строка, если пользователь отказался от выбора файла)

Строку типа file1 = Open_XL_File Вы можете вставить в любое место любого макроса.

Можно чуть-чуть изменить функцию, чтобы она возвращала не имя открытого файла, а сам файл (объект типа Workbook) - чтобы сразу получать ссылку на открытый файл.

Последний раз редактировалось EducatedFool; 22.01.2009 в 20:58.
EducatedFool вне форума
Старый 22.01.2009, 21:02   #7
Rom1k06
Форумчанин
 
Регистрация: 30.07.2008
Сообщений: 125
По умолчанию

Спасибо с тем как вызвать я разодрался, но возникла еще одно проблемка
Я пишу
oWb = Open_XL_File
Set oWs = oWb.Sheets(1)

выдает ошибку
Далее у меня весь код содержит oWs, и oWb
Как мне определить их правильно?
Rom1k06 вне форума
Старый 22.01.2009, 21:06   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Я же писал:
Цитата:
В переменную file1 записывается имя открытого файла
Поэтому использовать данную функцию можно так:
Код:
oWb_NAME = Open_XL_File: If oWb_NAME = "" Then MsgBox "Пользователь отказался от открытия файла": Exit Sub
Set oWs = Workbooks(oWb_NAME).Worksheets(1)
Повторюсь:
Цитата:
Можно чуть-чуть изменить функцию, чтобы она возвращала не имя открытого файла, а сам файл (объект типа Workbook) - чтобы сразу получать ссылку на открытый файл.
Но всё равно придётся проверять возвращённый функцией результат - ведь пользователь может отказаться от открытия файла.
EducatedFool вне форума
Старый 22.01.2009, 21:57   #9
Rom1k06
Форумчанин
 
Регистрация: 30.07.2008
Сообщений: 125
По умолчанию

Большое все спасибо Вы мне очень помогли с решением модернизации кода...
Для меня это пока еще сложные задачи, но я стараюсь решать их сам..
Rom1k06 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение типа переменной Игорь007 Общие вопросы C/C++ 7 10.01.2009 13:01
Адрес переменной Pedro Общие вопросы Delphi 11 16.12.2008 13:03
Обнуление переменной [MI_nor] Общие вопросы C/C++ 3 05.11.2008 18:01
Изменение переменной yura-cat Помощь студентам 7 20.09.2008 17:42
Работа с файлами (создание, удаление, открытие, связываение с переменной, очищение памяти переменной) Arkuz Общие вопросы Delphi 12 25.09.2007 20:47