Добрый день, уважаемые программисты. Помогите разобраться.
У меня есть макрос, позволяющий записывать код - с листа - прямо в модуль. Но это все происходит в эксель - на листе которого этот код записан.
Как заставить макрос - записать этот код не в тот же файл xls, в котором находится лист3, а в документ Word - 1.doc (который лежит с ним в одной папке) ?
(разумеется макрос в ворде - работать не будет. Просто нужно перенести содержимое ячеек J23,J24,J25 с листа3 - в модуль макроса файла 1.doc)
Добрый день, уважаемые программисты. Помогите разобраться.
У меня есть макрос, позволяющий записывать код - с листа - прямо в модуль. Но это все происходит в эксель - на листе которого этот код записан.
Как заставить макрос - записать этот код не в тот же файл xls, в котором находится лист3, а в документ Word - 1.doc (который лежит с ним в одной папке) ?
(разумеется макрос в ворде - работать не будет. Просто нужно перенести содержимое ячеек J23,J24,J25 с листа3 - в модуль макроса файла 1.doc)rotten41
перенести содержимое ячеек J23,J24,J25 с листа3 - в модуль макроса файла 1.doc
Готовишь файл c:\YourFile.docm. Вбиваешь в ThisDocument макрос [vba]
Код
Sub AutoOpen() 'http://www.cyberforum.ru/vba/thread317161.html 'В sClpbrdText будет передан текст, который был скопирован в буфер последним. 'Для работы код необходимо подключить библиотеку Microsoft Forms 2.0 Object Lybrary. Но подключить её проще всего так: создаете новую UserForm и удаляете. Библиотека подключится автоматически сама. Dim objClpBrd As DataObject, sClpbrdText As String Set objClpBrd = New DataObject objClpBrd.GetFromClipboard sClpbrdText = objClpBrd.GetText ActiveDocument.VBProject.VBComponents(2).CodeModule.AddFromString sClpbrdText End Sub
[/vba]
В Word создай UserForm и удали.
В своей книге запусти макрос [vba]
Код
Sub МакросВWord_InExSu() Range("j23:j26").Copy Filename$ = "c:\YourFile.docm" CreateObject("wscript.shell").Run """" & Filename$ & """" End Sub
перенести содержимое ячеек J23,J24,J25 с листа3 - в модуль макроса файла 1.doc
Готовишь файл c:\YourFile.docm. Вбиваешь в ThisDocument макрос [vba]
Код
Sub AutoOpen() 'http://www.cyberforum.ru/vba/thread317161.html 'В sClpbrdText будет передан текст, который был скопирован в буфер последним. 'Для работы код необходимо подключить библиотеку Microsoft Forms 2.0 Object Lybrary. Но подключить её проще всего так: создаете новую UserForm и удаляете. Библиотека подключится автоматически сама. Dim objClpBrd As DataObject, sClpbrdText As String Set objClpBrd = New DataObject objClpBrd.GetFromClipboard sClpbrdText = objClpBrd.GetText ActiveDocument.VBProject.VBComponents(2).CodeModule.AddFromString sClpbrdText End Sub
[/vba]
В Word создай UserForm и удали.
В своей книге запусти макрос [vba]
Код
Sub МакросВWord_InExSu() Range("j23:j26").Copy Filename$ = "c:\YourFile.docm" CreateObject("wscript.shell").Run """" & Filename$ & """" End Sub
А зачем через буфер обмена действовать? По аналогии с VBA-проектом Excel почему не записать и в Word? [vba]
Код
Sub Макрос2() ' это ваша запись в проект текущей книги For i = 1 To 3 ActiveWorkbook.VBProject.VBComponents(1).CodeModule.ReplaceLine i + 1, Range("J" & 22 + i) Next i ' это ваша запись в проект нужного файла Word ' в ЦУБ приложения Word должно быть включено "Доверять доступ к объектной модели проектов VBA" ' естественно, в документе Word должен уже существовать аналогичный модуль с аналогичной процедурой ' ну или работайте с объектной моделью wd.VBProject, как вам надо Set wapp = CreateObject("Word.Application") wapp.Visible = True Set wd = wapp.Documents.Open(ThisWorkbook.Path & Application.PathSeparator & "1.docm") For i = 1 To 3 wd.VBProject.VBComponents(2).CodeModule.ReplaceLine i + 1, Range("J" & 22 + i) Next i wd.Close True wapp.Quit End Sub
[/vba]
А зачем через буфер обмена действовать? По аналогии с VBA-проектом Excel почему не записать и в Word? [vba]
Код
Sub Макрос2() ' это ваша запись в проект текущей книги For i = 1 To 3 ActiveWorkbook.VBProject.VBComponents(1).CodeModule.ReplaceLine i + 1, Range("J" & 22 + i) Next i ' это ваша запись в проект нужного файла Word ' в ЦУБ приложения Word должно быть включено "Доверять доступ к объектной модели проектов VBA" ' естественно, в документе Word должен уже существовать аналогичный модуль с аналогичной процедурой ' ну или работайте с объектной моделью wd.VBProject, как вам надо Set wapp = CreateObject("Word.Application") wapp.Visible = True Set wd = wapp.Documents.Open(ThisWorkbook.Path & Application.PathSeparator & "1.docm") For i = 1 To 3 wd.VBProject.VBComponents(2).CodeModule.ReplaceLine i + 1, Range("J" & 22 + i) Next i wd.Close True wapp.Quit End Sub
' в ЦУБ приложения Word должно быть включено "Доверять доступ к объектной модели проектов VBA" ' естественно, в документе Word должен уже существовать аналогичный модуль с аналогичной процедурой ' ну или работайте с объектной моделью wd.VBProject, как вам надо
' в ЦУБ приложения Word должно быть включено "Доверять доступ к объектной модели проектов VBA" ' естественно, в документе Word должен уже существовать аналогичный модуль с аналогичной процедурой ' ну или работайте с объектной моделью wd.VBProject, как вам надо
Для этого надо приложить ваши файлы. Потому что не работает в вашем коде. И самое главное слово там было - "работайте с объектной моделью wd.VBProject", потому что действия, которые вы выполняете - они ну очень зависят именно от структуры проекта.
Для этого надо приложить ваши файлы. Потому что не работает в вашем коде. И самое главное слово там было - "работайте с объектной моделью wd.VBProject", потому что действия, которые вы выполняете - они ну очень зависят именно от структуры проекта.AndreTM
' естественно, в документе Word должен уже существовать аналогичный модуль с аналогичной процедурой
То есть вы хотя бы понимаете, что обращение [vba]
Код
wd.VBProject.VBComponents(2).CodeModule
[/vba]означает, что компонент (2) должен существовать в проекте (это будет наш общий модуль Module1, а [vba]
Код
.ReplaceLine i + 1, Range("J" & 22 + i)
[/vba] - что строчки для записи тоже должны уже быть в модуле, хотя бы пустые? И что там делает процедура AutoOpen(), которая вам при открытии файла - как раз и запортит содержимое кода в модуле? Вы уж, батенька, или шишки под ёлкой ищите, или арбузы - но на бахче...
' естественно, в документе Word должен уже существовать аналогичный модуль с аналогичной процедурой
То есть вы хотя бы понимаете, что обращение [vba]
Код
wd.VBProject.VBComponents(2).CodeModule
[/vba]означает, что компонент (2) должен существовать в проекте (это будет наш общий модуль Module1, а [vba]
Код
.ReplaceLine i + 1, Range("J" & 22 + i)
[/vba] - что строчки для записи тоже должны уже быть в модуле, хотя бы пустые? И что там делает процедура AutoOpen(), которая вам при открытии файла - как раз и запортит содержимое кода в модуле? Вы уж, батенька, или шишки под ёлкой ищите, или арбузы - но на бахче...AndreTM