Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Object variable or With block variable not set / 9 сообщений из 9, страница 1 из 1
24.04.2010, 20:41
    #36596445
Сергей846
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Object variable or With block variable not set
Подскажите пожалуйста. В макросе который запускается из аксес для редактирования выгруженной из запроса таблицы в вордовском документе есть такой код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Sub MergeEqualCells()
  Dim oTbl As Table
  Dim i As Long
  Dim sCellVal As String
  
  If Selection.Information(wdWithInTable) Then
    Set oTbl = Selection.Tables( 1 )
  Else
    MsgBox "Поставьте курсор внутрь таблицы и запустите макрос вновь!", vbOKOnly + vbInformation, "Объединение ячеек с одинаковыми значениями"
    Exit Sub
  End If
  
  For i = oTbl.Columns( 1 ).Cells.Count To  1  Step - 1 
    With oTbl.Columns( 1 ).Cells(i)
      .Select
      sCellVal = .Range.Text
    End With
    With Selection
      While .Cells( 1 ).Range.Text = sCellVal And .Cells( 1 ).Range.Start <> oTbl.Range.Cells( 1 ).Range.Start
        .MoveUp Extend:=wdExtend
      Wend
      .MoveDown Extend:=wdExtend
      i = i - .Cells.Count +  1 
      If .Cells.Count >  1  Then
        .Cells.Merge
        .Cells( 1 ).Range.Text = Replace(sCellVal, vbCr, "")
      End If
    End With
  Next
End Sub
Когда доходит до него выскакивает сообщение об ошибке "Object variable or With block variable not set"
Подскажите пожалуйста что не так? Какую переменную еще надо добавить? Заранее спасибо!
...
Рейтинг: 0 / 0
24.04.2010, 21:08
    #36596465
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Object variable or With block variable not set
Сергей846В макросе который запускается из аксес для редактирования выгруженной из запроса таблицы в вордовском документе

так где находится сам макрос? в аксессе или в ворде?
...
Рейтинг: 0 / 0
24.04.2010, 21:27
    #36596474
Сергей846
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Object variable or With block variable not set
Shocker.Pro,
в аксесе. Если этот макрос запускаю в ворде то все ок, но надо чтобы он работал из аксеса.
...
Рейтинг: 0 / 0
24.04.2010, 21:34
    #36596479
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Object variable or With block variable not set
Возможно в какую-то ячейку выгружается NULL и при выделении ничего не
выделяется.
А вообще нужны данные, на которых это происходит.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
24.04.2010, 21:40
    #36596482
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Object variable or With block variable not set
Сергей846Shocker.Pro,
в аксесе. Если этот макрос запускаю в ворде то все ок, но надо чтобы он работал из аксеса.

тогда либо надо подключить рефернсы на вордовую библиотеку, либо определить табличную переменную как Object. Ну и, само собой, давать полные пути к методам и объектам через переменную, через которую вы подключаете ворд. Посмотрите, на форуме полно примеров, как работать с вордом, например, через эксель.

ЗЫ: Игорь, если я правильно понял, он пытается вордовый макрос выполнить аксессом. Естественно ничего работать не будет - объекты же нифига не определены - на это и ругается.
...
Рейтинг: 0 / 0
24.04.2010, 21:46
    #36596486
Сергей846
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Object variable or With block variable not set
Игорь Горбонос,
Нет, все ячейки заполнены.Для общей картины выкладываю весь код.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
Private Sub Кнопка0_Click()
   
Dim app As Word.Application  'Приложение программы
Dim strDOC As String ' Имя документа
Dim strDOT As String ' Имя шаблона
Dim strMDB As String ' Имя базы данных
Dim rng As Word.Range ' Область данных
Dim tbl As Word.Table ' Таблица документа
Dim c As Word.Cell ' Ячейка таблицы
Dim i As Long ' Переменная
Dim j&
Dim dbs As Database, sSQL As String
Dim funCreateQueries As String
Dim qdf As QueryDef
Dim oTbl As Table
Dim sCellVal As String
On Error GoTo  999 
    Screen.MousePointer =  11 
    
  
    ' Определяем имена шаблона, документа и базы данных
    With Application.CurrentProject
        strDOT = .Path & "\" & "\Shablons\04.dot"
        strDOC = .Path & "\" & "\Отчеты\Ведомость №4.doc"
        strMDB = .Path & "\" & .Name
    End With
    
    ' Управление документом Word
    Set app = New Word.Application 'Новое приложение Word
    app.Documents.Add strDOT 'Добавляем шаблон
    ' Выбираем закладку (позицию) таблицы
    Set rng = app.ActiveDocument.Bookmarks("Таблица").Range
    
    DoCmd.DeleteObject acQuery, "qr1"
    Set dbs = CurrentDb
    With dbs
  sSQL = "SELECT qr_UnProf.R020 AS sh, qr_UnProf.OB22 AS ss, qr_UnProf.txt AS n, Format([qr_UnProf]![q1]+[qr_UnProf]![q2]+[qr_UnProf]![q3],""##,##0.00"") AS 1kv, Format([qr_UnProf]![q4],""##,##0.00"") AS s1, Format([qr_UnProf]![q1]+[qr_UnProf]![q2]+[qr_UnProf]![q3]+[qr_UnProf]![q4],""##,##0.00"") AS [S1+2]FROM qr_UnProf"
Set qdf = CurrentDb.CreateQueryDef("qr_word ", sSQL)
    End With
    funCreateQueries = True
        
        'заранее созданная таблица в виде строки заголовков колонок запроса (+Nпп)
        Set tbl = rng.Tables(rng.Tables.count)
        'открыть запрос, перегнать построчно данные в таблицу документа
        Dim db As DAO.Database: Set db = CurrentDb()
        Dim ds As DAO.Recordset: Set ds = db.OpenRecordset("qr1", dbOpenSnapshot)
        Do While Not ds.EOF
            tbl.Rows.Add: i = i +  1  'добавить строку
               For j =  1  To ds.Fields.count
                tbl.Rows(tbl.Rows.count).Cells(j +  0 ).Range.InsertAfter CStr(ds.Fields(j -  1 ).Value)
            Next j
            ds.MoveNext
        Loop
        tbl.AutoFormat wdTableFormatGrid8 ' авто-формат
        tbl.Columns( 1 ).Width =  50  'ПРИМЕР изменения ширины столбца
        ' Форматируем заголовок, т.е. всю строку
    tbl.Columns( 1 ).Select ' вібраем колонку
    With app.Selection
        .Font.Name = "Times New Roman"
        .Font.bOld = True
        .Font.Italic = False
    End With
    tbl.Columns( 3 ).Select ' вібраем колонку
    With app.Selection
    .ParagraphFormat.Alignment = wdAlignParagraphJustify
    End With
    tbl.Rows( 1 ).Select ' Выбираем заголовок
    With app.Selection
        .ParagraphFormat.Alignment = wdAlignParagraphCenter
        .Font.Name = "Times New Roman" ' Имя шрифта
        .Font.Size =  11  ' Размер шрифта
    End With
[color=red]      If Selection.Information(wdWithInTable) Then
    Set oTbl = Selection.Tables( 1 )
  Else
    MsgBox "Поставьте курсор внутрь таблицы и запустите макрос вновь!", vbOKOnly + vbInformation, "Объединение ячеек с одинаковыми значениями"
    Exit Sub
  End If
  
  For i = oTbl.Columns( 1 ).Cells.Count To  1  Step - 1 
    With oTbl.Columns( 1 ).Cells(i)
      .Select
      sCellVal = .Range.Text
    End With
    With Selection
      While .Cells( 1 ).Range.Text = sCellVal And .Cells( 1 ).Range.Start <> oTbl.Range.Cells( 1 ).Range.Start
        .MoveUp Extend:=wdExtend
      Wend
      .MoveDown Extend:=wdExtend
      i = i - .Cells.Count +  1 
      If .Cells.Count >  1  Then
        .Cells.Merge
        .Cells( 1 ).Range.Text = Replace(sCellVal, vbCr, "")
      End If
    End With
  Next[/color]
    app.ActiveDocument.SaveAs strDOC  ' Сохраняем файл
    app.Visible = True 'Отображаем документ
    Screen.MousePointer =  0 
    Exit Sub

 999 :
    Screen.MousePointer =  0 
    MsgBox Err.Description,  48  'Ошибка
    Err.Clear
    app.Quit

End Sub
...
Рейтинг: 0 / 0
24.04.2010, 21:49
    #36596489
Сергей846
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Object variable or With block variable not set
Shocker.ProСергей846Shocker.Pro,
в аксесе. Если этот макрос запускаю в ворде то все ок, но надо чтобы он работал из аксеса.

тогда либо надо подключить рефернсы на вордовую библиотеку, либо определить табличную переменную как Object. Ну и, само собой, давать полные пути к методам и объектам через переменную, через которую вы подключаете ворд. Посмотрите, на форуме полно примеров, как работать с вордом, например, через эксель.

ЗЫ: Игорь, если я правильно понял, он пытается вордовый макрос выполнить аксессом. Естественно ничего работать не будет - объекты же нифига не определены - на это и ругается.

Референсы подключены, кучу примеров посмотрел, прошупомочь только с этой частью кода. Заранее благодарен.
...
Рейтинг: 0 / 0
24.04.2010, 21:58
    #36596492
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Object variable or With block variable not set
Код: plaintext
Dim oTbl As Table

вы таким образов вордовую таблицу пытаетесь определить? откуда аксесс знает, что вы про ворд думаете?
аналогично Selection. Откуда аксесс знает, что такое Selection?
Вам надо полные пути прописывать. От переменной app
...
Рейтинг: 0 / 0
24.04.2010, 22:24
    #36596511
Сергей846
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Object variable or With block variable not set
Shocker.Pro,
Я разобрался, все заработало. Не судите строго, я только учусь. Всем спасибо за помощь!!!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Object variable or With block variable not set / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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