powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Ругается на переменные
17 сообщений из 17, страница 1 из 1
Ругается на переменные
    #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
Ругается на переменные
    #39618198
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Daniil92библиотека Excel 14.0 подключена - почему нельзя напрямуюЧто в вашем понимании напрямую?
Код: vbnet
1.
2.
Dim ex As New Excel.Application
ex.WorksheetFunction.Clean(...
...
Рейтинг: 0 / 0
Ругается на переменные
    #39618201
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только вот не проще ли эту функцию воспроизвести локально, чем целый эксель ради нее запускать?
...
Рейтинг: 0 / 0
Ругается на переменные
    #39618262
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, судя по Cells(x, y) = код запускается из Excel.

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

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

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

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

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

Тут к каждой строчке кода ТС можно задать вопрос "А зачем ?" а, я нашел ответ на все вопросы в первом посте
Daniil92Есть код
...
Рейтинг: 0 / 0
Ругается на переменные
    #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
Ругается на переменные
    #39618730
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто изначальный код запускайте из экселя, а не из ворда.
...
Рейтинг: 0 / 0
Ругается на переменные
    #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
Ругается на переменные
    #39618753
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КазанскийОстается загадкой, что такое Cells.да все понятно, код просто для экселя написал, поэтому он и запускает ворд, а не работает в контексте текущего документа
...
Рейтинг: 0 / 0
Ругается на переменные
    #39618808
Daniil92
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Все заработало.
...
Рейтинг: 0 / 0
Ругается на переменные
    #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
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Ругается на переменные
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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