Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите написать макрос в Excel / 25 сообщений из 25, страница 1 из 1
13.01.2010, 18:35
    #36408294
Alisya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать макрос в Excel
Привет всем! Помогите пожалуйста написать макрос!
Макрос должен брать таблицу из Word и вставлять ее в Excel, причем в документе Word несколько таблиц, нужную таблицу следует выбирать, например, по имени столбца.
Заранее спасибо!
...
Рейтинг: 0 / 0
13.01.2010, 18:36
    #36408300
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать макрос в Excel
Поможем. Но не сделаем за вас.
Итак, что конкретно вызвало проблемы?
...
Рейтинг: 0 / 0
13.01.2010, 18:42
    #36408316
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать макрос в Excel
Кстати, из ТЗ неясно, чей это должен быть макрос, вордовский или экселевский
...
Рейтинг: 0 / 0
13.01.2010, 18:50
    #36408328
Stepler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать макрос в Excel
Shocker.ProКстати, из ТЗ неясно, чей это должен быть макрос, вордовский или экселевский?
Разве енто имеет значение...., если :
Код: plaintext
Но не сделаем за вас.
...
Рейтинг: 0 / 0
13.01.2010, 18:51
    #36408331
Alisya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать макрос в Excel
Макрос в 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
13.01.2010, 18:54
    #36408336
Alisya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать макрос в Excel
В принципе если кому-то проще написать новый макрос чем разбираться в чужом, то я только за=)))
...
Рейтинг: 0 / 0
13.01.2010, 18:55
    #36408337
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать макрос в Excel
так, для начала для наглядности перепостим как положено

Код: 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
13.01.2010, 18:58
    #36408342
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать макрос в Excel
Еще просьба, можно сам файлик вордовый?
...
Рейтинг: 0 / 0
13.01.2010, 19:02
    #36408346
Alisya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать макрос в Excel
Да, конечно!
...
Рейтинг: 0 / 0
13.01.2010, 19:09
    #36408357
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать макрос в Excel
AlisyaПривет всем! Помогите пожалуйста написать макрос!

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

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

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

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

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

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

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

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

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

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

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

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

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


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