powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите написать макрос в Excel
25 сообщений из 25, страница 1 из 1
Помогите написать макрос в Excel
    #36408294
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем! Помогите пожалуйста написать макрос!
Макрос должен брать таблицу из Word и вставлять ее в Excel, причем в документе Word несколько таблиц, нужную таблицу следует выбирать, например, по имени столбца.
Заранее спасибо!
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408300
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поможем. Но не сделаем за вас.
Итак, что конкретно вызвало проблемы?
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408316
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, из ТЗ неясно, чей это должен быть макрос, вордовский или экселевский
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408328
Фотография Stepler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProКстати, из ТЗ неясно, чей это должен быть макрос, вордовский или экселевский?
Разве енто имеет значение...., если :
Код: plaintext
Но не сделаем за вас.
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408331
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Макрос в Excel.
Вот он собственно:
Sub Поиск()
Dim n, m, l, tb As Long
Dim Path As String

Path = GetFolderPath

Set wa = CreateObject("Word.Application")
On Error GoTo 3
Set oCurrDoc = wa.Documents.Open(Path)

wa.Visible = True



l = oCurrDoc.Tables.Count

For n = 1 To l

If oCurrDoc.Tables(n).Range.Rows(1).Cells(2).Range.Text Like "Наименование дисциплин*" _
And oCurrDoc.Tables(n).Range.Rows(1).Cells(1).Range.Text Like "Индекс*" Then

tb = n

Exit For
End If

Next


n = oCurrDoc.Tables(tb).Range.Rows.Count
m = oCurrDoc.Tables(tb).Range.Columns.Count

ReDim Rng(1 To n, 1 To m)

For n = 1 To oCurrDoc.Tables(tb).Range.Rows.Count
For m = 1 To oCurrDoc.Tables(tb).Range.Columns.Count



On Error Resume Next
Dim ssl As String
ssl = Replace(oCurrDoc.Tables(tb).Range.Rows(n).Cells(m).Range.Text, Chr(13), "")

ssl = Replace(ssl, Chr(7), "")

Rng(n, m) = ssl



Next


Next

Application.ScreenUpdating = False

ActiveSheet.Range(Cells(1, 1), Cells(n - 1, m - 1)) = Rng

ActiveSheet.Range("a1").ColumnWidth = 18
ActiveSheet.Range("b1").ColumnWidth = 100
ActiveSheet.Range("c1").ColumnWidth = 18
ActiveSheet.Columns("A:C").WrapText = True



ActiveSheet.Range(Cells(1, 1), Cells(n - 1, m - 1)).Borders(1).LineStyle = 1
ActiveSheet.Range(Cells(1, 1), Cells(n - 1, m - 1)).Borders(2).LineStyle = 1
ActiveSheet.Range(Cells(1, 1), Cells(n - 1, m - 1)).Borders(3).LineStyle = 1
ActiveSheet.Range(Cells(1, 1), Cells(n - 1, m - 1)).Borders(4).LineStyle = 1


Application.ScreenUpdating = True

3
wa.Quit
End Sub
Function GetFolderPath(Optional ByVal Title As String = "Выберите файл", Optional ByVal InitialPath As String) As String
GetFolderPath = "": PS = Application.PathSeparator
With Application.FileDialog(msoFileDialogOpen)
.ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
If .Show = -1 Then GetFolderPath = .SelectedItems(1): If Not Right$(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath
End With
End Function


Проблема в том, что при большом объеме данных в строке таблицы Word, макрос не работает.
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408336
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе если кому-то проще написать новый макрос чем разбираться в чужом, то я только за=)))
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408337
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так, для начала для наглядности перепостим как положено

Код: 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.
Sub Поиск()
Dim n, m, l, tb As Long
Dim Path As String

Path = GetFolderPath

Set wa = CreateObject("Word.Application")
On Error GoTo  3 
Set oCurrDoc = wa.Documents.Open(Path)

wa.Visible = True



l = oCurrDoc.Tables.Count

For n =  1  To l

If oCurrDoc.Tables(n).Range.Rows( 1 ).Cells( 2 ).Range.Text Like "Наименование дисциплин*" _
And oCurrDoc.Tables(n).Range.Rows( 1 ).Cells( 1 ).Range.Text Like "Индекс*" Then

tb = n

Exit For
End If

Next


n = oCurrDoc.Tables(tb).Range.Rows.Count
m = oCurrDoc.Tables(tb).Range.Columns.Count

ReDim Rng( 1  To n,  1  To m)

For n =  1  To oCurrDoc.Tables(tb).Range.Rows.Count
For m =  1  To oCurrDoc.Tables(tb).Range.Columns.Count



On Error Resume Next
Dim ssl As String
ssl = Replace(oCurrDoc.Tables(tb).Range.Rows(n).Cells(m).Range.Text, Chr( 13 ), "")

ssl = Replace(ssl, Chr( 7 ), "")

Rng(n, m) = ssl



Next


Next

Application.ScreenUpdating = False

ActiveSheet.Range(Cells( 1 ,  1 ), Cells(n -  1 , m -  1 )) = Rng

ActiveSheet.Range("a1").ColumnWidth =  18 
ActiveSheet.Range("b1").ColumnWidth =  100 
ActiveSheet.Range("c1").ColumnWidth =  18 
ActiveSheet.Columns("A:C").WrapText = True



ActiveSheet.Range(Cells( 1 ,  1 ), Cells(n -  1 , m -  1 )).Borders( 1 ).LineStyle =  1 
ActiveSheet.Range(Cells( 1 ,  1 ), Cells(n -  1 , m -  1 )).Borders( 2 ).LineStyle =  1 
ActiveSheet.Range(Cells( 1 ,  1 ), Cells(n -  1 , m -  1 )).Borders( 3 ).LineStyle =  1 
ActiveSheet.Range(Cells( 1 ,  1 ), Cells(n -  1 , m -  1 )).Borders( 4 ).LineStyle =  1 


Application.ScreenUpdating = True

 3 
wa.Quit
End Sub
Function GetFolderPath(Optional ByVal Title As String = "Выберите файл", Optional ByVal InitialPath As String) As String
GetFolderPath = "": PS = Application.PathSeparator
With Application.FileDialog(msoFileDialogOpen)
.ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
If .Show = - 1  Then GetFolderPath = .SelectedItems( 1 ): If Not Right$(GetFolderPath,  1 ) = PS Then GetFolderPath = GetFolderPath
End With
End Function
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408342
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще просьба, можно сам файлик вордовый?
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408346
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, конечно!
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408357
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlisyaПривет всем! Помогите пожалуйста написать макрос!

Ну макрос у меня сработал без ошибок. Можно ТОЧНО узнать, что за проблема? Не копируется какая-то длинная ячейка?
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408369
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот и вас работает!=)))
А почему у меня не работает?!!!
Он не добавляет мне строки после строки ГСЭ.Ф.00 Федеральный компонент 1262.
В чем может быть проблема, не подскажите?
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408374
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в этой таблице я уменьшаю ячейки, оставляя только пару строк, то все работает!
Вот я и подумала что это как0то от объма зависит!=)
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408378
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уменьшаете ячейки? Или количество текста в ячейках?
Пара строк, по идее это 255 символов может быть.... но с чего бы...

Что значит "не работает". Вылетает с ошибкой или молча прекращает работать?

Если первое - какая ошибка?
Если второе - попробуйте выполнить в пошаговом режиме, посмотрите, почему выходит из цикла.

Еще попробуйте по возможности на других версиях ворда, экселя
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408381
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уменьшаю текст в ячейках.
Молча прекращает работать, никаких ошибок не выдает.
Он даже рисует рамки ячеек, но текста в них нет!
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408383
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у вас какая версия excel? если не секрет.
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408391
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2000.

Уберите строку:
On Error Resume Next
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408405
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а у меня 2003.
строку убрала, но ошибок все равно нек выдает.
да и в цикле все строчки пробегает.
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408410
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если закомментарите еще и строку
On Error GoTo 3

то увидите ошибку.

Я и сам сейчас ее добился.
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408412
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странный у вас обработчик - при возникновении ошибки вылетать молча - ничего не говоря пользователю. Хоть бы сообщение выдавали или не перехватывали ошибку вообще.

В общем так: проблема в выделении памяти под слишком большой массив.

Рекомендация: откажитесь от массива (нафига все через него перекладывать и жрать память), пишите напрямую в цикле из ячейки ворда в ячейку экселя
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408426
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще глюк:

oCurrDoc.Tables(tb).Range.Rows(n).Cells(m).Range.Text

В последней строке в таблице ячейки объединены, стало быть Cells(m) для m=2 не существует.
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408442
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за идею, переделала!
А вот с последней строчкой действительно проблематично
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408447
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlisyaСпасибо за идею, переделала!
А вот с последней строчкой действительно проблематично

По-хорошему, надо при каждом запуске внутреннего цикла проверять количество ячеек в конкретной строке

По-плохому можно поставить
On Error Resume Next
только не забывать возвращать обратно
On Error GoTo 0
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408463
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясненько!
Попробую сделать по хорошему!
Спасибо огромное за помощь!!!
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36408464
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите написать макрос в Excel
    #36745980
BonoU2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
ребята программисты, помогите плиз, нужно в книге выделить цветом на 2-х листах ячейки с одинаковыми записями (я выделил их вручную как бы я хотел что б это делалось). А еще лучше чтоб отобранные данніе сопоставлялись в отдельнои листе. Помогите с макросом. Заранее благодарен
Прилагаю файл (записей много потому он большой).
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите написать макрос в Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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