powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите с OLE!
39 сообщений из 39, показаны все 2 страниц
Помогите с OLE!
    #32273444
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите пожалуйста!
У меня проблема: есть Б.Д. с полем OLE (Документ Word), подскажите пожалуйста можно ли как-нибудь перевести все эти данные в тип поля "текстовой" (в ручную это сделать не реально т.к. 1000 записей), мне просто все эти данные надо перенести в другую Б.Д., но уже в нормальном виде. (Посмотрел все темы по OLE в форуме, но что-то ничего не нашел).
Мне было бы лучше перевести данные не программно (т.к. VBA я знаю плохо), а, если это возможно, с помощью RAD инструментов.

Буду признателен за любой совет по данной теме!!! :-)
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32273453
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я не знаю, что такое RAD, для меня как раз программно проще. :^) Но если не программно, то тогда Copy & Paste.
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32273472
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAD (rapid application development tool) - инструмент быстрой разработки приложений. А Вы предлагаете 1000 записей Copy & Paste? Я не против программного подхода, я просто не знаю, как работать с VBA.
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32273667
OMP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OMP
Гость
Если не хочешь переводить данные программно, то воспользуйся этим макросом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim I As Long, Table As String
Table =  "<Название таблицы>" 
DoCmd.OpenTable Table, acNormal, acEdit
For I =  1  To  1000 
  SendKeys  "{TAB}" , True 'перейти на поле OLE (оно у меня в таблице второе поле)
  SendKeys "^~", True ' нажать на клавишу Ctrl+Enter
  SendKeys  "^a" , True ' Выделить весь текст в Word
  SendKeys "^{INSERT}", True ' Скопировать в буфер
  SendKeys  "%{F4}" , True ' Закрыть приложение
  SendKeys "{TAB}", True ' Перейти на следующее поле для вставки (Текст)
  SendKeys  "+{INSERT}" , True ' Вставить из буфера
   DoCmd.GoToRecord acDataTable, Table, acNext ' Переход на следующую запись
   SendKeys  "+{TAB}" , True ' Вернуться на предыдущее поле
   SendKeys "+{TAB}", True ' Вернуться на предыдущее поле
Next I

Будет выполнять долго, ну ты же не хочешь программно!!!
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32275669
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое за пример!
Но уж простите меня бестолкового, у меня теперь такая загвоздка-
во второй строке пишу:
Table = "(user-tabl)"
а комп ругается на эту строчку и пишет:
Compile error:
Invalid outside procedure!!!
P.S. Библиотеки вроде все подключил.

HELP ME PLEASE!!!
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32275683
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Invalid outside procedure!!!

Это значит, что этот текст должен быть в процедуре.
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32275711
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я что-то не правильно понял, но я запускаю этот макрос из VBA.
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32275729
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Каким образом? Можно полный текст?
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32275747
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот:

Dim I As Long, Table As String
Table = "(user-tabl)"
DoCmd.OpenTable Table, acNormal, acEdit
For I = 1 To 1000
SendKeys "{TAB}", True 'перейти на поле OLE (оно у меня в таблице второе поле)
SendKeys "^~", True ' нажать на клавишу Ctrl+Enter
SendKeys "^a", True ' Выделить весь текст в Word
SendKeys "^{INSERT}", True ' Скопировать в буфер
SendKeys "%{F4}", True ' Закрыть приложение
SendKeys "{TAB}", True ' Перейти на следующее поле для вставки (Текст)
SendKeys "+{INSERT}", True ' Вставить из буфера
DoCmd.GoToRecord acDataTable, Table, acNext ' Переход на следующую запись
SendKeys "+{TAB}", True ' Вернуться на предыдущее поле
SendKeys "+{TAB}", True ' Вернуться на предыдущее поле
Next I

Если что, заранее извиняюсь за полное незнание данного вопроса!
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32275755
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ну так это я уже видел. А как сударь (-рыня) это пытается запустить?
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32275765
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В VBA - "Run".
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32275769
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Какой Run? Кнопка, что ли?
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32275777
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну можно и кнопкой, если это поменяет суть дела!-)
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32275820
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А какой Run, если не кнопка???
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32275850
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
твой код нужно пометить в общий модуль
и обрамить процедурой, после этого можешь запускать без кнопки а через run

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Sub test()

Dim I As Long, Table As String 
Table =  "(user-tabl)"  
DoCmd.OpenTable Table, acNormal, acEdit 
For I =  1  To  1000  
SendKeys  "{TAB}" , True 'перейти на поле OLE (оно у меня в таблице второе поле) 
SendKeys "^~", True ' нажать на клавишу Ctrl+Enter 
SendKeys  "^a" , True ' Выделить весь текст в Word 
SendKeys "^{INSERT}", True ' Скопировать в буфер 
SendKeys  "%{F4}" , True ' Закрыть приложение 
SendKeys "{TAB}", True ' Перейти на следующее поле для вставки (Текст) 
SendKeys  "+{INSERT}" , True ' Вставить из буфера 
DoCmd.GoToRecord acDataTable, Table, acNext ' Переход на следующую запись 
SendKeys  "+{TAB}" , True ' Вернуться на предыдущее поле 
SendKeys "+{TAB}", True ' Вернуться на предыдущее поле 
Next I

end sub
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32275859
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Это я уже говорил в 15:47.
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32275861
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
P.S. А что это все-таки за волшебный Run?
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32275874
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alt+F11 , F5
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32275881
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А что значит "без кнопки а через run"? По-моему, кнопка и F5 работают совершенно одинаково.
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32276044
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ннннда и почему я такой бестолковый, сам себе удивляюсь.
Но я не понял:
А что значит "пометить в общий модуль" "и обрамить процедурой"?
А просто из VBA его запустить нельзя что ли?
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32276050
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Поместить в общий модуль"

Нажать Ф11, перейти во вкладку "Модули", нажать
"Создать".

"Обрамить процедурой"

В созданном модуле написать
Public Function aaa()
Нажать Enter.
Автоматом добавится строка
End Sub
Промеж этих строчек вставить твой код.
Сохранить модуль под любым именем.
Закрыть окно редактора ВБА.

"Запустить процедуру":
Нажать Ф11.
Перейти на вкладку "Макросы"
Нажать на кнопку "Создать макрос"
Добавить команду "Выполнить программу" (или "запуск программы")
В нижней половине окна макроса написать имя функции - aaa()
Закрыть и сохранить макрос.
Запустить его.
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32276054
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
"поме с тить в общий модуль" - поместить в модуль, который виден на странице "Модули" (а не модуль формы или отчета).

"обрамить процедурой" - поместить до и после две строки:

Код: plaintext
1.
2.
Sub ...()

End Sub


> А просто из VBA его запустить нельзя что ли?

Такой возможности в VBA нет. Код вне процедуры - это ошибка (см. пример в 15:42).
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32276055
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот я балда!
Все сделал, а создать макрос не догадался!!! Спасибо. :-)))
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32276058
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
2 Geo:

Я абпаздал. Но "Запустить процедуру" можно и без макроса, а просто написав ее имя в Debug Window. Про использование макросов см. соответствующую дискуссию на этом форуме. :^)
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32276062
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Без кнопки через Run

Может так:
Application.Run "aaa"
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32276066
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я абпаздал. Но "Запустить процедуру" можно и без макроса, а просто написав ее имя в Debug Window.
Можно. Только чтобы помочь запустить окно
окладки, надо знать версию акцеса. (Вру, надо ^g
нажать)
А с макросом проще объяснить.

А про дисскуссию - эт хр-шо
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32276069
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Application.Run "aaa"

Понял, спасибо, не знал.
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32276087
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запустил макрос, пишет:
“Введенное выражение содержит имя функции, которое приложению Access не удается найти.” Суть в том, что он не находит таблицу user-tabl, а почему, не понимаю.
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32276095
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
1. Если таблица называется

user-tabl

а в программе написано

(user-tabl)

то ясно, что она ее не найдет.

2. Если Аксесс кричит про имя функции , то откуда такая уверенность, что проблема в имени таблицы ?
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32276096
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
“Введенное выражение содержит имя функции,
которое приложению Access не удается найти.”
Суть в том, что он не находит таблицу user-tabl,
а почему, не понимаю.

Вряд ли суть в поиске таблицы. Скорее всего,
не написал слово Public перед описанием функции,
или имя функции в модуле отличается от того имени,
что ты написал в макросе.
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32276103
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Public не нужно. Если не сказано Private, значит это Public.
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32276104
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Тьфу. Знаю! То, что вызывается из макроса, обязано быть Function, а не Sub!!!
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32276109
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слово Public перед описанием функции-написал.
Имя функции в модуле не отличается от того имени в макросе.
Не находит таблицу user-tabl, т.к. при запуске VBA, пишет, что не удается найти объект (user-tabl). :-)
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32276112
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Внимание, повторяю:

1. То, что вызывается из макроса, обязано быть Function, а не Sub!!!

2. Если таблица называется

user-tabl

а в программе написано

(user-tabl)

то ясно, что она ее не найдет.
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32277003
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо бльшое, у меня все запустилось!!!
Но он выполняет только три первых строчки, а остальные не успевает выполнять (т.к. не успевает закрыть Word) и берет в буфер обмена всю табличку.
Я написал программу "задержки" по времени:

Public Declare Function timeGetTime_
Lib "winmm.dll" () As Long
IPause = 10
ITimeStart = timeGetTime()
ITime = timeGetTime() - ITimeStart < IPause
ITime = timeGetTime() - ITimeStart
Loop

но она почему-то не хочет работать, ругает две первых строчки, подскажите пожалуйста, что я не так делаю.
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32277279
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программу задержки выполнил так:
For N = 1 To 20000
Next N

Но программка все-равно выполняет только первые три строчки!!!
Помогите, что же делать?
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32277356
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Мне кажется, что проблема в изначальной постановке вопроса. Было запрошено "не программно", вот и получено "не программно". Работает приблизительно и через раз. В то же время если написать нормальную программу, то все будет работать правильно. Какая разница автору вопроса, какой чужой код передирать - программный или не программный?
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32278762
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Какая разница автору вопроса, какой чужой код передирать - программный или не программный?" Разница есть: не программно для меня понятней и я смогу в нем что-либо изменить (т.к. данные из одного OLE поля мне надо было: 1.разнести по трем полям 2.разнести по шести полям).
Кстати (может кому-нибудь пригодится), после долгих раздумий я все-таки решил проблему!
Надо просто открыть и держать открытым Word, тогда все работает без проблем, а временная задержка здесь не помогает! :-)))
P.S. Спасибо всем за советы!
...
Рейтинг: 0 / 0
Помогите с OLE!
    #32278953
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 В.С. :
Работает не через раз, а через Ж...!
Хотя... Какой изначально подход, так и работает....
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите с OLE!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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