powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Подстановка кода модуля во другую книгу. Возможно ли?
10 сообщений из 10, страница 1 из 1
Подстановка кода модуля во другую книгу. Возможно ли?
    #32626878
Фотография Unicco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ситуация такая.

Есть книга с макросами, в которую заносятся и рассчитываются данные по клиенту. На каждого клиента свой экземпляр книги в отдельном файле. Для новых клиентов просто копируется пустой шаблон этой книги. Структура листов никогда не меняется, но периодически требуются изменения в коде макросов с перерасчётом по всем клиентам.

Руками копировать текст модулей надоело. Хочу автоматизировать подстановку кода из шаблонной книги во все другие.

Облазил весь хелп по Workbooks. Нашёл у него свойство VBAProject:
хелпVBProject Property
Returns a VBProject object that represents the Visual Basic project in the specified workbook. Read-only.

Но в нём ничего полезного для этой задачи не нашёл.

Подскажите, в каком направлении копать? И возможно ли в принципе что-то откопать? :)
...
Рейтинг: 0 / 0
Подстановка кода модуля во другую книгу. Возможно ли?
    #32626928
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совет, но не решение.
Делаешь кнопку, на которую вешаешь код, который лазеет в любой Excel-файл
типа такой
Код: plaintext
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.
Public Function savefile(ByVal InitDir As String, ByVal fname As String, ByVal Zagl As String) As String
    Dim strfile As String *  512 
    Dim of As OPENFILENAME
    Dim f As String
    Dim p%
     'Установка начальных значений структуры
 
    With of
        .hwndOwner = hWndAccessApp
        .hInstance =  0 
        .lpstrCustomFilter =  0 
        .nMaxCustrFilter =  0 
        .lpfnHook =  0 
        .lpTemplateName =  0 
        .lCustrData =  0 
        .lpstrInitialDir = InitDir
         'установка фильтров для поиска файлов
 
        .lpstrFilter = "Табличные файлы (*.xls)" & Chr( 0 ) & "*.xls" & Chr( 0 ) & _
        "Все файлы (*.*)" & Chr( 0 ) & "*.*" & Chr( 0 ) & Chr( 0 )
        .nFilterIndex =  0 
        .lpstrFile = fname & String$( 512  - Len(fname),  0 )
        .nMaxFile =  511 
        .lpstrFileTitle = String$( 512 ,  0 )
        .nMaxFileTitle =  511 
         'Заголовок окна
 
        .lpstrTitle = Zagl
        .lpstrDefExt = "xls"
        .Flags = OFN_FILEMUSTEXIST + OFN_PATHMUSTEXIST + OFN_EXPLORER
        .lStructSize = Len(of)
    End With
    If GetSaveFileName(of) Then
        p% = InStr( 1 , of.lpstrFile, Chr( 0 ))
        savefile = Left(of.lpstrFile, p% -  1 )
    Else
        savefile = ""
    End If
End Function
Public Function mysave_file() As String
   mysave_file = savefile("c:\", "Test.xls", "Сохранение файла в Excel")
    End Function
потом пишешь, то что надо скопировать.
...
Рейтинг: 0 / 0
Подстановка кода модуля во другую книгу. Возможно ли?
    #32626975
Фотография Unicco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Proga
Dim of As OPENFILENAME
В какой библиотеке?
...
Рейтинг: 0 / 0
Подстановка кода модуля во другую книгу. Возможно ли?
    #32626998
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В продолжении темы: была такая проблемка (не моя, я токо участвовал в решении) упрощенно: надо было в файле при сохранении(обычном, просто Save) добавить проверку и автом. сохранении этого файла под другим уже именем. Это было сделано за счет добавления кода в событие книги BeforeSave, но вот трабл, этот же код переносился в новую книгу. Пришлось писать хитрый обрабочтик который при сохранее файла под другим именем потом удалял у него модули и сохранял его уже без модулей. Гл. трабл заключался в том что получалась небольшая рекурсия в событии BeforeSave.. и при не правильном коде, Excel зависал, я уж не говоря про ситуции: ты сляпал код и рещаешь его сохранить перед запуском, а он же как раз и запускается при сохранении - вообщем, очень смешно, писать/отлаживать код в событии BeforeSave, когда этот код еще и сам пытается сохранить файл причем под другим уже именем.
...
Рейтинг: 0 / 0
Подстановка кода модуля во другую книгу. Возможно ли?
    #32627052
Фотография Unicco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeySVВ продолжении темы: была такая проблемка (не моя, я токо участвовал в решении) упрощенно: надо было в файле при сохранении(обычном, просто Save) добавить проверку и автом. сохранении этого файла под другим уже именем. Это было сделано за счет добавления кода в событие книги BeforeSave, но вот трабл, этот же код переносился в новую книгу. Пришлось писать хитрый обрабочтик который при сохранее файла под другим именем потом удалял у него модули и сохранял его уже без модулей. Гл. трабл заключался в том что получалась небольшая рекурсия в событии BeforeSave.. и при не правильном коде, Excel зависал
Спасиб :)
Удаление кода из копий для меня задача вторичная, в общем-то. Но по ней я пришёл к идее примерно такой же реализации.

SergeySV я уж не говоря про ситуции: ты сляпал код и рещаешь его сохранить перед запуском, а он же как раз и запускается при сохранении - вообщем, очень смешно, писать/отлаживать код в событии BeforeSave, когда этот код еще и сам пытается сохранить файл причем под другим уже именем.
С этим, по-моему, можно бороться с помощью VBAProject.Mode:
Код: plaintext
1.
2.
vbext_vm_Run     The specified project is in run mode.
vbext_vm_Break   The specified project is in break mode.
vbext_vm_Design  The specified project is in design mode.
...
Рейтинг: 0 / 0
Подстановка кода модуля во другую книгу. Возможно ли?
    #32627053
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sorry, не докинул кусок кода
вот это
Код: plaintext
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.
Option Compare Database
Option Explicit
Private Type BrowseInfo
    hOwner As Long
    pIDLRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type

Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias _
            "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Function SHBrowseForFolger Lib "shell32.dll" Alias _
            "SHBrowseForFolderA" (lpBrowseInfo As BrowseInfo) As Long
Private Const BIFRETURNONLYFSDIRS = &H1

Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" _
        (pOpenFileName As OPENFILENAME) As Boolean
Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" _
        (pOpenFileName As OPENFILENAME) As Boolean
Private Type OPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As Long
    nMaxCustrFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    Flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustrData As Long
    lpfnHook As Long
    lpTemplateName As Long
End Type
Public Const OFN_ALLOWMULTISELECT = &H200
Public Const OFN_CREATEPROMPT = &H2000
Public Const OFN_EXPLORER = &H80000
Public Const OFN_FILEMUSTEXIST = &H1000
Public Const OFN_HIDEREADONLY = &H4
Public Const OFN_NOCHANGEDIR = &H8
Public Const OFN_NODEREFERENCELINKS = &H100000
Public Const OFN_NONETWORKBUTTON = &H20000
Public Const OFN_NOREADONLYRETURN = &H8000
Public Const OFN_NOVALIDATE = &H100
Public Const OFN_OVERWRITEPROMPT = &H2
Public Const OFN_PATHMUSTEXIST = &H800
Public Const OFN_READONLY = &H1
Public Const OFN_SHOWHELP = &H10
пишешь перед вышеупомянутым кодом
...
Рейтинг: 0 / 0
Подстановка кода модуля во другую книгу. Возможно ли?
    #32627062
Фотография Unicco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Proga[src vba]of.hwndOwner = hWndAccessApp
Хэндл приложения?
...
Рейтинг: 0 / 0
Подстановка кода модуля во другую книгу. Возможно ли?
    #32627089
Фотография Jojo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
УУУУУУУУ ...все так страшно !!!
У меня тоже совет похожий
Я своим бухгалтерам-ламерам высылаю VBA-Excel обработку ...которая тащит данные ...из базы ...и представляет им в ражжеванном виде ...
Дак вот в бухгалтеском учете ежедневное НЕПОСТОЯНСТВО )
я заколебался менять код ...и они каждый раз меняли пути и настроечную
информацию ...
Чтобы избавится от энтого я сделал два файла
1-файл настроек zt.xls
2-файл библиотек алгоритмов(загружается тоже только не видим) - lib_zt.xls

Что-то меняется ...я им завертываю в createinstall и шлю только библиотеку
например lib_zt.xls

Scio me nihil scire

<<Jojo®>>
...
Рейтинг: 0 / 0
Подстановка кода модуля во другую книгу. Возможно ли?
    #32627155
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пробовал в excel, если не заработает, по логике попробуй
Код: plaintext
1.
.hwndOwner = hWnd
...
Рейтинг: 0 / 0
Подстановка кода модуля во другую книгу. Возможно ли?
    #32627161
Фотография Jojo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 вариант можно скопировать лист с кодом ...

Scio me nihil scire

<<Jojo®>>
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Подстановка кода модуля во другую книгу. Возможно ли?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]