Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Ругается на переменные / 17 сообщений из 17, страница 1 из 1
21.03.2018, 13:47
    #39618188
Daniil92
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
Доброго дня, коллеги!

Есть код
Код: vbnet
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.
Option Explicit

Public Sub ImportTableDataWord()
    Const FOLDER_PATH As String = "C:\Test\"

    Dim sFile As String

    'use the * wildcard to select the first file ending with "V1.2.doc"
    sFile = Dir(FOLDER_PATH & "*.doc")

    If sFile = "" Then
        MsgBox "The file is not present or was not found"
        Exit Sub
    End If

    ImportTableDataWordDoc FOLDER_PATH & sFile

End Sub

Public Sub ImportTableDataWordDoc(ByVal strDocName As String)

    Dim WdApp As Word.Application
    Dim wddoc As Word.Document
    Dim nCount As Integer
    Dim rowWd As Long
    Dim colWd As Long
    Dim x As Long
    Dim y As Long
    Dim i As Long

    On Error GoTo EH

    If strDocName = "" Then
        MsgBox "The file is not present or was not found"
        GoTo FINISH
    End If

    Set WdApp = New Word.Application
    WdApp.Visible = False

    Set wddoc = WdApp.Documents.Open(strDocName)

    If wddoc Is Nothing Then
        MsgBox "No document object"
        GoTo FINISH
    End If

    x = 1
    y = 1

    With wddoc

        If .Tables.Count = 0 Then
            MsgBox "No Tables Found in the document"
            GoTo FINISH
        Else

            With .Tables(1)
                For rowWd = 1 To .Rows.Count
                    For colWd = 1 To .Columns.Count
                        Cells(x, y) = WorksheetFunction.Clean(.Cell(rowWd, colWd).Range.Text)
                        y = y + 1
                    Next 'colWd
                    y = 1
                    x = x + 1
                Next 'rowWd
            End With

        End If

    End With

    GoTo FINISH

EH:

    With Err
        MsgBox "Number" & vbTab & .Number & vbCrLf _
            & "Source" & vbTab & .Source & vbCrLf _
            & .Description
    End With

    'for debugging purposes
    Debug.Assert 0
    GoTo FINISH
    Resume

FINISH:

    On Error Resume Next
    'release resources

    If Not wddoc Is Nothing Then
        wddoc.Close savechanges:=False
        Set wddoc = Nothing
    End If

    If Not WdApp Is Nothing Then
        WdApp.Quit savechanges:=False
        Set WdApp = Nothing
    End If

End Sub


Модератор: Учимся использовать тэги оформления кода - FAQ
При компиляции ругается на то что WorksheetFunction не является переменной, библиотека Excel 14.0 подключена - почему нельзя напрямую получать данные через нее?
...
Рейтинг: 0 / 0
21.03.2018, 13:56
    #39618198
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
Daniil92библиотека Excel 14.0 подключена - почему нельзя напрямуюЧто в вашем понимании напрямую?
Код: vbnet
1.
2.
Dim ex As New Excel.Application
ex.WorksheetFunction.Clean(...
...
Рейтинг: 0 / 0
21.03.2018, 13:57
    #39618201
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
Только вот не проще ли эту функцию воспроизвести локально, чем целый эксель ради нее запускать?
...
Рейтинг: 0 / 0
21.03.2018, 14:49
    #39618262
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
Shocker.Pro, судя по Cells(x, y) = код запускается из Excel.

Daniil92, посмотрите в Tools - References, нет ли ссылок, помеченных MISSING, исправьте или удалите такие ссылки.
...
Рейтинг: 0 / 0
21.03.2018, 14:55
    #39618271
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
КазанскийShocker.Pro, судя по Cells(x, y) = код запускается из Excel.а, блин, тогда действительно странно.
Ну можно попробовать полностью квалифицироать
Код: vbnet
1.
Excel.WorksheetFunction.Clean(...
...
Рейтинг: 0 / 0
21.03.2018, 15:45
    #39618329
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
Лучше, наверное, Application .WorksheetFunction. Обращение к абстрактному типу порой чревато неприятностями, а Application - реальный экземпляр объекта...
...
Рейтинг: 0 / 0
22.03.2018, 09:41
    #39618647
Daniil92
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
Akina,

не сработало, все-равно пишет, что метод не определен.

А если объявляю переменную - пишет, что переменная не определена.
В референсах указал библиотеку Оффис 14-й.

Код, кстати, запускаю из Ворда.
...
Рейтинг: 0 / 0
22.03.2018, 10:27
    #39618685
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
Казанскийсудя по Cells(x, y) = код запускается из Excel.Daniil92Код, кстати, запускаю из Ворда.гыгыгы
ну тогда я уже ответил, как исправить
После исправления будет ругаться на Cells
...
Рейтинг: 0 / 0
22.03.2018, 10:28
    #39618687
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
А зачем при запуске из ворда создавать еще один ворд?
Код: vbnet
1.
Set WdApp = New Word.Application
...
Рейтинг: 0 / 0
22.03.2018, 10:35
    #39618698
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
Shocker.Pro,

Тут к каждой строчке кода ТС можно задать вопрос "А зачем ?"
...
Рейтинг: 0 / 0
22.03.2018, 10:36
    #39618699
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
big-dukeShocker.Pro,

Тут к каждой строчке кода ТС можно задать вопрос "А зачем ?" а, я нашел ответ на все вопросы в первом посте
Daniil92Есть код
...
Рейтинг: 0 / 0
22.03.2018, 10:59
    #39618728
Daniil92
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
Нужен был код, который копирует из WORD в EXCEL первую найденную таблицу, вот в чем суть. Нашел, не скрою, на забугорском сайте.

Подскажите,если не сложно - что нужно еще сделать, чтобы код заработал?


Код: vbnet
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.
Public Sub ImportTableDataWordDoc(ByVal strDocName As String)

    Dim WdApp As Word.Application
    Dim wddoc As Word.Document
    Dim nCount As Integer
    Dim rowWd As Long
    Dim colWd As Long
    Dim x As Long
    Dim y As Long
    Dim i As Long
    Dim ex As Object
    Set ex = CreateObject("Excel.Application")
    

    On Error GoTo EH

    If strDocName = "" Then
        MsgBox "The file is not present or was not found"
        GoTo FINISH
    End If

    Set WdApp = New Word.Application
    WdApp.Visible = False

    Set wddoc = WdApp.Documents.Open(strDocName)

    If wddoc Is Nothing Then
        MsgBox "No document object"
        GoTo FINISH
    End If

    x = 1
    y = 1

    With wddoc

        If .Tables.Count = 0 Then
            MsgBox "No Tables Found in the document"
            GoTo FINISH
        Else

            With .Tables(1)
                For rowWd = 1 To .Rows.Count
                    For colWd = 1 To .Columns.Count
                        Cells(x, y) = ex.WorksheetFunction.Clean(.Cell(rowWd, colWd).Range.Text)
                        y = y + 1
                    Next 'colWd
                    y = 1
                    x = x + 1
                Next 'rowWd
            End With

        End If

    End With

    GoTo FINISH

EH:

    With Err
        MsgBox "Number" & vbTab & .Number & vbCrLf _
            & "Source" & vbTab & .Source & vbCrLf _
            & .Description
    End With

    'for debugging purposes
    Debug.Assert 0
    GoTo FINISH
    Resume

FINISH:

    On Error Resume Next
    'release resources

    If Not wddoc Is Nothing Then
        wddoc.Close savechanges:=False
        Set wddoc = Nothing
    End If

    If Not WdApp Is Nothing Then
        WdApp.Quit savechanges:=False
        Set WdApp = Nothing
    End If

End Sub
...
Рейтинг: 0 / 0
22.03.2018, 11:02
    #39618730
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
Просто изначальный код запускайте из экселя, а не из ворда.
...
Рейтинг: 0 / 0
22.03.2018, 11:10
    #39618743
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
Daniil92,
текст ячейки таблицы Ворда всегда содержит два непечатных символа в конце. Если каша с WorksheetFunction.Clean заварена из-за этих символов, то можно просто заменить эту строку на две
Код: vbnet
1.
2.
3.
4.
Dim s As String
'...
    s = .Cell(rowWd, colWd).Range.Text
    Cells(x, y) = Left(s, Len(s) - 2)

Остается загадкой, что такое Cells.
...
Рейтинг: 0 / 0
22.03.2018, 11:15
    #39618753
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
КазанскийОстается загадкой, что такое Cells.да все понятно, код просто для экселя написал, поэтому он и запускает ворд, а не работает в контексте текущего документа
...
Рейтинг: 0 / 0
22.03.2018, 12:12
    #39618808
Daniil92
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
Спасибо! Все заработало.
...
Рейтинг: 0 / 0
22.03.2018, 12:35
    #39618822
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ругается на переменные
Daniil92, вариант
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Public Sub ImportTableDataWord()
Const FOLDER_PATH As String = "C:\Test\"
Dim sFile As String, wdApp As Object, wdDoc As Object, myword As Boolean
  On Error Resume Next
    'use the * wildcard to select the first file ending with "V1.2.doc"
  sFile = Dir(FOLDER_PATH & "*.doc")
  If sFile = "" Then MsgBox "The file is not present or was not found": Exit Sub
  Set wdApp = GetObject(, "word.application")
  If Err Then
    Err.Clear
    Set wdApp = CreateObject("word.application")
    If Err Then MsgBox "Can't get access to Word Application": Exit Sub
    myword = True
  End If
  Set wdDoc = GetObject(FOLDER_PATH & sFile)
  If wdDoc Is Nothing Then MsgBox "No document object": GoTo FINISH
  If wdDoc.tables.Count = 0 Then MsgBox "No Tables Found in the document": GoTo FINISH
  wdDoc.tables(1).Range.Copy
  Range("A1").Select
  ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:=False
  Selection.Style = "Normal"
FINISH:
  If myword Then wdApp.Quit Else wdDoc.Close 0
End Sub
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Ругается на переменные / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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