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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2010, 16:07   #1
vladmc
 
Регистрация: 08.01.2010
Сообщений: 4
По умолчанию Создание приглашений(VBA)

Имеется некоторый текст с приглашением(word) и маленькая БД(access), состоящая всего из одной таблицы. Необходимо используя DDE(Dynamic Data Exchange), написать прогу(VBA), которая будет открывать текстовый файл и вставлять из БД по порядку все имеющиеся в ней фамилии в текстовый файл(допустим в первую строчку) и сохранять каждый текстовый файл под новым именем. Клиентом является Excell, а серверами по очереди Access и Word.
Пока что я делаю для одного текстового файла, но несложно будет вставить часть проги в цикл и сделать для нужного числа. Проблема заключается в следующем: в 6 строке снизу я использую метод DDEPoke, чтобы записать в вордовский документ текст, взятый из БД, вставленный в Excell и помещенный в одну из переменных массива. Но почему-то не наблюдается требуемого результата, а именно значение из переменной не вставляется в вордовский документ. Еще одна проблема, какой командой мне потом сохранить вордовский документ под каким-н именем используя таки DDE(программа пишется на VBA из excell)? И вообще где найти список команд, которые используются в методе DDEExecute? Извиняюсь заранее если неправильно оформил код программы, т.к. вставляю его в первый раз.

Dim ddeChannel, ddeChannel2 As Long
Dim ns As Integer
Dim data As Variant
Dim chislo As Integer
Sub Prigl()
ReDim FIO(5)
Dim Bd As Database
Dim rs As Recordset
Set Bd = OpenDatabase(ActiveWorkbook.Path & "\Priglashenie.mdb")
Set rs = Bd.OpenRecordset("SELECT ФИО FROM гости", dbOpenDynaset)
ns = 1
Do While Not rs.EOF
ns = ns + 1
rs.MoveNext
Loop
chislo = ns
rs.Close
MsgBox ns
On Error GoTo The_end
Shell "C:\Program Files\Microsoft Office\Office12\MSaccess.exe", vbMinimizedNoFocus
ddeChannel1 = DDEInitiate("MSAccess", "system")
DDEExecute ddeChannel1, "[OpenDatabase ""D:\корпоративные системы\Priglashenie.mdb""]"
ddeChannel2 = DDEInitiate("msaccess", "Priglashenie;table гости")
data = DDERequest(ddeChannel2, "all")
Worksheets("лист1").Range("1:5") = data
For i = 1 To chislo
FIO(i) = Cells(i, 1)
Next
DDETerminate ddeChannel1
DDETerminate ddeChannel2
Shell "C:\Program Files\Microsoft Office\Office12\winword.exe", vbMinimizedNoFocus
ddeChannel1 = DDEInitiate("winword", "system")
DDEExecute ddeChannel1, "[FileOpen ""D:\корпоративные системы\приглашение.docx""]"
DDEExecute ddeChannel1, "[Startofdocument]"
DDEExecute ddeChannel1, "[EditBookmark .name=""zakladka""]"
DDEPoke ddeChannel1, "zakladka", FIO(1)
DDETerminate ddeChannel1
Exit Sub
The_end:
MsgBox "ошибка вышла"
End Sub
vladmc вне форума Ответить с цитированием
Старый 17.01.2010, 18:18   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

А зачем использовать DDE для работы в Word из Excel???

Создаёте экземпляр приложения Word, и работаете с ним - будет намного проще, и все функции Word-a будут доступны.
Примеров на форуме множество:
Код:
Sub ОткрытьДокументWord2()
    On Error Resume Next

    Set wa = CreateObject("Word.Application")    ' создаём приложение Word (без подключения библиотеки Word)

    wa.Visible = True    ' делаем Word видимым
    
    Set wd = wa.Documents.Open(ПутьКФайлу)
 
    wd.Paragraphs(18).Range.InsertAfter Текст    ' вставляем текст в нужное место (после 18-го параграфа)
    wd.Save    ' сохраняем документ
End Sub
http://www.programmersforum.ru/showp...93&postcount=2
http://www.programmersforum.ru/showp...49&postcount=4

PS: На будущее - создавайте подобные темы в соответствующих разделах форума.
Вероятность получить ответ значительно возрастёт.
EducatedFool вне форума Ответить с цитированием
Старый 18.01.2010, 00:15   #3
vladmc
 
Регистрация: 08.01.2010
Сообщений: 4
По умолчанию

Вся фишка заключается в том, что мне нужно это сделать используя DDE. С созданием экземпляра какого-н типа я немного работал(не хвастаюсь что хорошо это знаю, просто сталкивался), а вот с DDE первый раз и где взять эти команды понятия не имею.
vladmc вне форума Ответить с цитированием
Старый 18.01.2010, 13:57   #4
vladmc
 
Регистрация: 08.01.2010
Сообщений: 4
По умолчанию

Так мне кто-н подскажет где найти команды DDEExecute?
vladmc вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi и VBA (создание стрелки) Kuraj Общие вопросы Delphi 4 09.01.2010 23:33
создание и использование семафоров(VBA) vladmc Помощь студентам 1 09.01.2010 03:18
VBA создание списка julius Microsoft Office Excel 7 05.01.2010 16:02
Создание таблицы через VBA mchip Microsoft Office Excel 0 01.10.2009 23:50