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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2013, 16:48   #1
psybehemoth
Пользователь
 
Регистрация: 01.06.2013
Сообщений: 14
По умолчанию Visual Studio 2010 и VBA. Надстройка на основе макросов

Здравствуйте.
Прошу Вашей помощи так как самостоятельно разобраться не смогу, видимо(

Передо мной встала задача создания надстройки уровня приложения для Word и Excel.
Есть три макроса на VBA запускаемые последовательно (Word-Excel-Word) и обрабатывающие некий массив.
Необходимо создать вкладку в ленте с кнопками, запускающими соответствующие макросы. Т.е. получается 2е надстройки (для каждого офис-приложения).
Для создания использую Visual Studio 2010 (нуб).
Проблема в том, не получается присвоить некоторой кнопке на панели выполнение определенного макроса. По всей видимости от меня ожидается код на VB, а не на VBA.
Указывает на ошибку в таких строках как:

Application.ScreenUpdating = False
.............
myView = ActiveWindow.View.Type
ActiveWindow.View.Type = wdNormalView
.............
With Selection.Find
.............
Selection.Find.Execute(Replace:=wdReplaceAll)

Подскажите, пожалуйста, как решить данную проблему.
Как принудить выполнять VBA код или если это невозможно - как переписать на VB?

P.S.: Есть ли возможность написать некую "оболочку" которая могла бы использовать функционал офисного пакета при этом не открывая эти приложения явно. По принципу - задал все необходимые данные и ждешь результата не созерцая окон Word и Excel и не нажимая лишних клавиш). Подскажите в какую сторону копать)

Спасибо)
psybehemoth вне форума Ответить с цитированием
Старый 01.06.2013, 17:57   #2
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

psybehemoth, а такой макрос у вас запускается?
Код:
Sub Procedure_1()

    MsgBox "Процедура запущена."

End Sub
Скрипт вне форума Ответить с цитированием
Старый 01.06.2013, 18:52   #3
psybehemoth
Пользователь
 
Регистрация: 01.06.2013
Сообщений: 14
По умолчанию

Такой запускается

только полностью выглядит так:

Код:
Imports Microsoft.Office.Tools.Ribbon

Public Class LENTA

    Private Sub Ribbon1_Load(ByVal sender As System.Object, ByVal e As RibbonUIEventArgs) Handles MyBase.Load

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) Handles BStep1.Click

        MsgBox("Процедура запущена.")


    End Sub

End Class
psybehemoth вне форума Ответить с цитированием
Старый 01.06.2013, 20:02   #4
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

psybehemoth, но вы писали в сообщении #1:
Цитата:
Проблема в том, не получается присвоить некоторой кнопке на панели выполнение определенного макроса.
В сообщении #3 вы написали, что у вас получается запускать макросы. Так какой у вас сейчас тогда вопрос?
Скрипт вне форума Ответить с цитированием
Старый 01.06.2013, 22:29   #5
psybehemoth
Пользователь
 
Регистрация: 01.06.2013
Сообщений: 14
По умолчанию

Получилось запустить предложенный Вами простейший макрос.
Когда же я пытаюсь вставить свой (100% работоспособный, без ошибок) Studio на него ругается. Вот к примеру на строку в самом начале кода:

Application.ScreenUpdating = False

"Application" не объявлен.может быть недоступен из-за своего уровня защиты."
и так не только с ним

Пришил PrintScrin
http://s41.radikal.ru/i093/1306/c5/d678389fee6a.jpg
psybehemoth вне форума Ответить с цитированием
Старый 02.06.2013, 07:29   #6
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Пункт 1

psybehemoth, скриншоты можно выкладывать прямо на Форум. Мне, например, не нравится ходить по файлообменникам, т.к. там можно неприятные рисунки увидеть. На Форуме рисунки плохо выкладываются, поэтому рисунки нужно архивировать.


Пункт 2

Вы можете запустить макрос, который обрабатывает Word-документ из программы "Excel"? Давайте пока не будем рассматривать ваш конкретный код, а добьёмся, чтобы хоть вообще какой-то код стал работать, например этот:
Код:
Sub Procedure_1()
    
    'Вывод на монитор сообщения - имя активного Word-документа.
    MsgBox Application.ActiveDocument.Name

End Sub
Скрипт вне форума Ответить с цитированием
Старый 02.06.2013, 08:56   #7
psybehemoth
Пользователь
 
Регистрация: 01.06.2013
Сообщений: 14
По умолчанию

К сожалению, такой код уже не проходит.

ссылаясь на: "Application" не объявлен. Может быть недоступен из-за своего уровня защиты.

опять же скрин:
Вложения
Тип файла: rar code.rar (175.3 Кб, 12 просмотров)
psybehemoth вне форума Ответить с цитированием
Старый 02.06.2013, 09:08   #8
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Добейтесь, чтобы у вас заработал этот код из программы "Excel". Когда у вас это получится, то вы уже будете иметь представление, как из одной программы управлять другой программой - это называется разными словами: OLE, COM, автоматизация.
Код:
Sub Procedure_1()

    Dim myWord As Object
    Dim myDocument As Object
    
    'Создаём объект "Word.Application" и даём этому объекту VBA-имя "myWord".
        'Через это имя можно обращаться к объекту "Word.Application".
    Set myWord = CreateObject("Word.Application")
    
    'Делаем программу "Word" видимой, чтобы если сбой произойдёт,
        'можно было бы закрыть программу вручную (крестиком в правом верхнем углу).
    myWord.Visible = True
    
    'Создаём новый документ и даём этому документу VBA-имя "myDocument".
    Set myDocument = myWord.documents.Add
    
    'Вывод на монитор сообщение - имя активного Word-документа.
    MsgBox myDocument.Name
    
End Sub
Код:
Sub Procedure_2()
    
    'Чтобы было удобно писать код, можно подключить библиотеку:
        'Tools - References... - Microsoft Word версия Object Library.
    'При подключении библиотеки, когда будем ставить точку,
        'то будет появляться список, из которого можно будет выбирать.
    
    'После тестирования кода можно отключить будет библиотеку,
        'чтобы при передаче кода другому человеку, не возникло проблем.
        
    Dim myWord As Word.Application
    Dim myDocument As Word.Document
    
    'Создаём объект "Word.Application" и даём этому объекту VBA-имя "myWord".
        'Через это имя можно обращаться к объекту "Word.Application".
    Set myWord = CreateObject("Word.Application")
    
    'Делаем программу "Word" видимой, чтобы если сбой произойдёт,
        'можно было бы закрыть программу вручную (крестиком в правом верхнем углу).
    myWord.Visible = True
    
    'Создаём новый документ и даём этому документу VBA-имя "myDocument".
    Set myDocument = myWord.documents.Add
    
    'Вывод на монитор сообщение - имя активного Word-документа.
    MsgBox myDocument.Name
    

End Sub

Последний раз редактировалось Скрипт; 02.06.2013 в 09:14.
Скрипт вне форума Ответить с цитированием
Старый 02.06.2013, 10:11   #9
psybehemoth
Пользователь
 
Регистрация: 01.06.2013
Сообщений: 14
По умолчанию

Цитата:
вы уже будете иметь представление, как из одной программы управлять другой программой
Спасибо, но некоторое представление об этом я имею.
Вопрос же мой был несколько в ином (перефразирую):
1. Возможно ли в Visual Studio при создании надстройки уровня приложения для Word (Excel) использовать готовый код макроса на VBA?
2. Если "да" - то почему не работает и нужно ли производить какие-либо изменения?

Задумываться о взаимодействии двух надстроек можно будет после. Сейчас же и одной не выходит. А о том как связать два макроса в разных приложениях я уже в курсе, опять же.

как-то так...

P.S.: за ответы спасибо в любом случае)
psybehemoth вне форума Ответить с цитированием
Старый 02.06.2013, 10:24   #10
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

psybehemoth, в сообщении #7 есть скриншот. Вы пишите в коде:
Код:
MsgBox(Application.ActiveDocument.Name)
Откуда кому-то знать в той программе, которую вы делаете, что Application - это объект программы "Word"?

В коде из сообщения #8 вот так узнаются данные о документе:
Код:
MsgBox myDocument.Name
Видите разницу?

Последний раз редактировалось Скрипт; 02.06.2013 в 10:27.
Скрипт вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual Studio 2010 c# blacknight07 C# (си шарп) 1 03.04.2013 16:29
Visual Studio 2010 Lexa567 Visual C++ 1 21.01.2013 15:25
Visual Studio 2010 и NF 2.0 m0m0k0 Visual C++ 0 20.06.2012 08:42
Visual Studio 2010 и SharePoint 2010 glinka-82 Общие вопросы .NET 0 21.03.2012 22:37
Expression Studio и Visual Studio 2010 ждать ли русские версии? Casper-SC Свободное общение 31 25.05.2010 14:31