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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2011, 16:00   #1
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию SQL-запрос в excel, или импорт данных в word

Здраствуйте, подскажите как можно работая в ворде, получить массив данных одного из полей excel-документа.
Есть макрос, который создаёт n-ное количество .doc-файлов, складывает их в одно место и присваевает им номера в виде названия. Нужно же чтобы в качестве названия он присваивал зачения (по порядку), содержащиеся в столбце "Фамилия" документа data.xls, поскольку с этим документом они связаны через поля слияния.

Код:
Sub each_sheet_into_new_document()
'помещает каждый лист в отдельный документ
Dim word_App As New Word.Application
Dim word_Doc As Word.Document
Selection.HomeKey Unit:=wdStory

pages_count = ActiveDocument.Range.ComputeStatistics(wdStatisticPages)
For i = 1 To pages_count
    Set word_Doc = word_App.Documents.Add
    With word_Doc
    If i = pages_count Then
        Selection.EndKey Unit:=wdStory, Extend:=wdExtend
    Else
        Selection.ExtendMode = True
        Selection.GoToNext wdGoToPage
        Selection.MoveLeft wdCharacter, 1, False
                
    End If
        text_for_input = Selection
        Selection.ExtendMode = False
        Selection.MoveRight wdCharacter, 2, False
        .StoryRanges(wdMainTextStory) = text_for_input
        word_App.Visible = True

        
        If i < 10 Then
            p = "0" & i
        Else
            p = i
        End If
        
        .SaveAs "C:\Лист-" & p & ".doc"
    End With
Next i
word_App.Quit
Set word_App = Nothing
End Sub
Примерно надо чтобы переменной p в данном цикле присваивалось каждое последущее значение из массива данных, полученных из excel. Помогите плиз с кодом, так как я в этом не силён. Примерно (своим угловатым мышлением) предполагаю что нужен объект recordset, полученный простым SQL-запросом, с дальнейшей передачи данных переменной-массиву...или же это только в акссессе так можно делать? Извиняюсь если по-дилетантски рассуждаю..

Последний раз редактировалось Sanek_81; 09.02.2011 в 16:33.
Sanek_81 вне форума Ответить с цитированием
Старый 09.02.2011, 16:56   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Зачем тревожить лишний раз Microsoft.Jet.OLEDB.4.0

Это пример
Код:
 Sub NO_SQL()
Dim Sh 
Dim P
Set Sh = GetObject("путь \ data.xls").Worksheet("Фамилия")
 P = Sh.Range("A2:A200")
Sh.Parent.Close (False)
For n = 1 To UBound(P)
MsgBox (P(n, 1))
Next

End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 10.02.2011, 10:38   #3
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию

Код:
Set Sh = GetObject("c:\data.xls").Worksheet("Фамилия")
Ругается на это строку, object doesn't support this property or method.
Sanek_81 вне форума Ответить с цитированием
Старый 10.02.2011, 11:35   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Сообщение от Sanek_81 Посмотреть сообщение
Код:
Set Sh = GetObject("c:\data.xls").Worksheets("Фамилия")
Ругается на это строку, object doesn't support this property or method.
Добавте s писал сообщении,сделал ошибку
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 10.02.2011, 11:52   #5
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию

Всё-равно ошибка в этойже строке Run-time error "9": Subscript out of range. Может необходимо в Tools/references подключить какие-нибудь дополнительные библиотеки, поставить где-то галочку?
Sanek_81 вне форума Ответить с цитированием
Старый 10.02.2011, 12:06   #6
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Проверте имя листа,имя файла.Создал,проверил,все работает
Можно заменить на индекс
Set Sh = GetObject("c:\data.xls").Worksheets (1)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 10.02.2011, 14:02   #7
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию

Спасибо, заработало, но для того чтобы обрезать лишнее я ещё добавил в цикл:
Код:
If Not P(n, 1) = 0 Then
MsgBox (P(n, 1))
End If
Sanek_81 вне форума Ответить с цитированием
Старый 10.02.2011, 14:40   #8
Sanek_81
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 26
По умолчанию

А можно как-нибудь избежать при выполнении операции выскакивания экселевского окна с сообщением, что редактирование файла запрещено так как он уже кем-то используется и открыт только для чтения? Ведь он у нас используется полями слияния. Если нельзя, то бог с ним..
Sanek_81 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт данных из Word в Excel макросом vv66 Microsoft Office Excel 17 27.01.2012 14:49
импорт таблиц word в excel manowar_gub Microsoft Office Excel 6 13.12.2010 10:23
Импорт данных в MS-SQL $T@LKER БД в Delphi 0 22.11.2010 22:22
Delphi c SQL и выгрузка в Excel или word girl23 БД в Delphi 7 24.10.2007 17:56