Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056

из нескольких процедур сделать одну функцию с запсуком с параметрами

18.02.2014, 18:44. Показов 733. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здрасте еще раз
Делаю экспорт из базы в .xlsx формат. Чтобы экспорт прошел успешно необходим на компьютере наличие экселя 2007 (или выше), иначе в ошибку рухнет. В итоге я узнаю есть ли эксель на компьютере каждый раз при экспорте. Код двухкилометровый получается, путаться начинаю, комменты не помогают.
Хотелось бы вот этот весь свернутый код ниже запихнуть в функцию, каждый раз при экспорте запускать функцию с нужными параметрами, то есть примерно так хотелось бы:
Visual Basic
1
2
3
Private Sub Кнопка1_Click()
  call Export ("Таблицу_2_экспортируем", "Это_ПОЛНЫЙ_путь_для_файла.xlsx", "Лист1_Имя_Листа")
End Sub
Согласитесь, когда мне нужно 10 разных таблиц экспортнуть, то проще будет в одну строку запуск функции с параметрами прописать, чем каждый раз такой громадный код.
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Private Sub Кнопка10_Click()
Dim xls As Object
Dim VERSIYA As String
 
On Error GoTo ErrHandler
 
Set xls = CreateObject("Excel.Application")
VERSIYA = xls.Application.Version
Select Case VERSIYA
Case "14.0"
MsgBox ("Установлен 2010")
Case "12.0"
Call Exportiruem  'Если на ПК установлен Эксель 2007 тогда будем экспортировать (ИСПОЛЬЗУЕМ процедуру написанную ниже)
Case "11.0"
MsgBox MsgBox("Установлен 2003")
Case Else
MsgBox ("Другая версия")
End Select
 
ErrEnd:
Set xls = Nothing
Exit Sub
ErrHandler:
  Select Case Err.Number
    Case 429
      MsgBox ("Не установлен")
      Case Else
MsgBox ("Другая ошибка")
      Resume ErrEnd
  End Select
End Sub
 
 
Private Sub Exportiruem()   'Делаем экспопт (Процедура используется в процедуре выше)
Dim oapp As Object, owrk As Object, osh As Object
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("SELECT * FROM Таблица")
Set owrk = GetObject(CurrentProject.Path & "\Путь\ФайлТаблица.xlsx")
 
If IsExcelRunning Then
'если Excel есть в запущенных процессах
  Set osh = owrk.Worksheets("Лист1")
  On Error Resume Next
  osh.Range("a2").CopyFromRecordset rst
  If Err.Number = -2147417851 Then Resume 'бывает такая ошибка у CopyFromRecordset
  On Error GoTo 0
  owrk.Windows(1).Visible = True
  owrk.Save
  owrk.Close
Else
  'Excel не запушен
  Set oapp = owrk.Application
  Set osh = owrk.Worksheets("Лист1")
  On Error Resume Next
  osh.Range("a2").CopyFromRecordset rst
  If Err.Number = -2147417851 Then Resume
  On Error GoTo 0
  oapp.Visible = False
  owrk.Windows(1).Visible = True
  owrk.Save
  oapp.Quit
End If
End Sub
 
Function IsExcelRunning() As Boolean    'Узнаем запущен ли эксель на компьютере (используем в процедуре Exportiruem)
   Dim xlApp As Object
    On Error Resume Next
    Set xlApp = GetObject(, "Excel.Application")
    IsExcelRunning = (Err.Number = 0)
    Set xlApp = Nothing
    Err.Clear
End Function
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.02.2014, 18:44
Ответы с готовыми решениями:

из нескольких процедур в одну
Доброго времени суток! Помогите переделать из нескольких процедур в одну: type Tarray = array of integer; var ...

Как на одну кнопку сделать несколько процедур
Подскажите пожалуйста: Как на одну кнопку сделать несколько процедур? Я сделала два ComboBox1.Text='OLD' then begin и...

Как многим событиям передать одну и ту же функцию с различными параметрами?
Как многим событиям передать одну и ту же функцию с различными параметрами, чтобы не было вызова после загрузки браузера, а только при...

4
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
18.02.2014, 20:05
Не осознал проблему.

Может быть надо выбрать все изменяемые параметры и запихнуть их как параметры публичной процедуры? Об этом речь? Ну так объединить в процедуру, задать параметры. Не понял задачу
0
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
18.02.2014, 22:54  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
Может быть надо выбрать все изменяемые параметры и запихнуть их как параметры публичной процедуры?
Видимо да. Я думал только для функций есть параметры запуска.

Сейчас так - чтобы сделать экспорт одной таблицы/запроса я использую весь этот код, каждый раз меняю - полный путь файла, имя таблицы для экспорта, имя листав в экселе.

если делать экспорт 10 таких таблиц, то нужно (длину код выше) * (10) = длинный код, с постоянно 98% повторяющимися строками.
А хотел бы все оэто сделать как одна функция (или процедура), а запускать каждый раз с нужными параметрами - полный путь файла, имя таблицы для экспорта, имя листа в экселе.

Добавлено через 2 часа 23 минуты
Сейчас немного разузнал по запуску процедур с параметрами в соседнем разделе форума, но не понятны некоторые моменты. Подправьте, пожалуйста, мои ошибки
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Exportiruem (ByVal str1 As String, ByVal str2 As String)
....
Set rst = CurrentDb.OpenRecordset("SELECT * FROM str1") 'Это переменная для 1-го параметра
Set owrk = GetObject(CurrentProject.Path & "\ & str2")   'А эта для 2-го параметра
...
End sub
 
'Теперь запускаю процедуру
Procedura_1("Таблица1", "Путь\ФайлТаблица.xlsx")
0
383 / 209 / 5
Регистрация: 29.05.2013
Сообщений: 337
19.02.2014, 02:10
Параметры нужно вынести за кавычки
Visual Basic
1
2
3
4
5
6
Private Sub Exportiruem (ByVal str1 As String, ByVal str2 As String)
....
Set rst = CurrentDb.OpenRecordset("SELECT * FROM " & str1 & ";") 'Это переменная для 1-го параметра
Set owrk = GetObject(CurrentProject.Path & "\" & str2)   'А эта для 2-го параметра
...
End sub
Добавлено через 11 минут
Вызвать эту процедуру можно в любом месте другой процедуры.
Visual Basic
1
2
3
 ....
Call Exportiruem ("Таблица1" ,"Путь\ФайлТаблица.xlsx")
....
2
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,082
19.02.2014, 08:43
Эту часть тоже вынеси в отдельную функцию, т.к. дублируется.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
  
If IsExcelRunning Then
...
  Set oapp = owrk.Application
  Set osh = owrk.Worksheets("Лист1")
  On Error Resume Next
  osh.Range("a2").CopyFromRecordset rst
  If Err.Number = -2147417851 Then Resume
  On Error GoTo 0
  oapp.Visible = False
  owrk.Windows(1).Visible = True
  owrk.Save
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.02.2014, 08:43
Помогаю со студенческими работами здесь

Можно ли использовать одну функцию для нескольких listview
Есть функция, которая применяется к одному Listview, как передать в ету функцию идентификатор или что-то подобное, вообщем чтоб ее можно...

Сделать из нескольких записей одну
Доброго времени суток всем. Есть запрос, который выводит на экран всего один столбец из нескольких строк. Выглядит это как-то так: ...

Как вместо нескольких страниц сделать одну
Вопрос состоит в следуещем. После розработки информационного сайта (если ето можно так назвать) я стикнулся с проблемой. У меня...

Написать функцию вычисления стоимости покупки, состоящей из нескольких тетрадей и карандашей. Параметрами функции должны быть цена тетради, количес
Написать функцию вычисления стоимости покупки, состоящей из нескольких тетрадей и карандашей. Параметрами функции должны быть цена тетради,...

сделать одну категорию с респонсами из нескольких род. документов
здарова всем :( есть несколько документов у каждого дока есть свой респонс нужно обьединить в одну категорию по значению поля и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru