Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/63: Рейтинг темы: голосов - 63, средняя оценка - 4.95
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
1

Выбор данных, выгружаемых из Excel в Word в зависимости от выбранного периода

30.08.2011, 12:40. Показов 11741. Ответов 48
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, помогите, пожалуйста, со следующей заморочкой:
У меня осуществляется выгругрузка в ворд определённых таблиц их экселя.
Ворд – имеющийся документ с расставленными закладками.
Эксель – сформированные таблицы с индивидуальными именами.

В данный момент выгрузка осуществляется, но конкретного прописанного диапазона.

Необходимо делать выгрузку таблиц в зависимости от выбранного периода.
Как видно из примера, таблицы разных периодов имеют отличие в названиях только в одной цифре.
Проблема: не могу сделать так, чтоб при выборе периода происходил выбор нужных таблиц. Т.е. при выборе из списка «1 квартал», выбирались таблицы «Продажи1» и «Выручка1», при выборе из списка «2 квартал», выбирались таблицы «Продажи2» и «Выручка2», и т.д.

П.с. на цифры и оформление таблиц не смотрите, всё нарисовано от балды только для описания данного вопроса.
Вложения
Тип файла: docx Пример.docx (9.9 Кб, 191 просмотров)
Тип файла: xls Пример.xls (42.0 Кб, 213 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.08.2011, 12:40
Ответы с готовыми решениями:

Вычисление введенных данных пользователя в зависимости от выбранного RadioButton
Программа делает вычисления введенных данных пользователя. Пользователь вносит свои данные в форму...

Word + Excel, Импорт данных из Excel в шаблон Word с условиями
Здравствуйте! Помогите, пожалуйста. Есть файл Word с расставленными закладками-метками и файл...

Delphi 7 Загрузка данных в ComboBox2 в зависимости от выбранного значения в ComboBox1
Добрый день. Прошу у вас помощи, не могу понять, в голове каша, толком найти ничего не получается....

Запрос на выборку данных из разных таблиц БД в зависимости от выбранного языка на сайте
Доброго времени суток. Делаю свой первый сайт в качестве учебного примера. Подключила БД, вывела...

48
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
18.01.2012, 12:05 21
Author24 — интернет-сервис помощи студентам
Makarona,
постановочные знаки * можно использовать только, если используются определённые ключевые слова языка VBA. Например, Like.

Замените = на Like и почитайте справку по Like.
0
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
18.01.2012, 14:12  [ТС] 22
Busine2012, блин, я ,по-моему, не с той стороны подхожу...
я хочу, чтоб было условие, что если в названии документа, из которого берутся данные содержится "БДР", то весь путь к документу меняется на тот путь, который был выбран ранее первым.
Надеюсь не сильно коряво объяснила...
и что-то никак не получается...

Добавлено через 15 минут
пробовала так:
Visual Basic
1
2
3
4
5
6
fieldCount = ActiveDocument.Fields.Count
For x = 1 To fieldCount
If ActiveDocument.Fields(x).LinkFormat.SourceName Like "*ÁÄÐ*" Then
ActiveDocument.Fields(x).LinkFormat.SourceFullName = newFile1
ElseIf ActiveDocument.Fields(x).LinkFormat.SourceName Like "*ÁÄÄÑ*" Then
ActiveDocument.Fields(x).LinkFormat.SourceFullName = newFile2
выдаёт ошибку run-time error 91 на первый If
0
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
18.01.2012, 17:02 23
Makarona,
сначала нужно произвести проверку, что очередное поле то, которое нам нужно, потому что свойством LinkFormat обладают не все поля. Из-за этого и происходит ошибка, что у очередного поля нет такого свойства.
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub Процедура1()
    Dim i As Long
    For i = 1 To ActiveDocument.Fields.Count Step 1
        If ActiveDocument.Fields(i).Type = wdFieldLink Then
            If ActiveDocument.Fields(i).LinkFormat.SourceName Like "*Word*" Then
                Debug.Print "Match"
            End If
        End If
    Next i
End Sub
Примечание: Debug.Print - это вывод результата в диалоговое окно Immediate (Tools - Immediate Window).
2
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
19.01.2012, 10:25  [ТС] 24
Busine2012, огромное спасибо! всё работает, как я и хотела. и ссылки на несколько документов изменяются без проблем.
Оформлю диалоговое окно и отправлю в бой)))
0
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
20.01.2012, 11:51  [ТС] 25
Появилась следующая беда:
использую этот код
Visual Basic
1
2
3
4
5
6
7
8
9
10
For i = 1 To ActiveDocument.Fields.Count Step 1
If ActiveDocument.Fields(i).Type = wdFieldLink Then
            If ActiveDocument.Fields(i).LinkFormat.SourceName Like "*ÁÄÐ*" Then
ActiveDocument.Fields(i).LinkFormat.SourceFullName = newFile1
            ElseIf ActiveDocument.Fields(i).LinkFormat.SourceName Like "*ÁÄÄÑ*" Then
ActiveDocument.Fields(i).LinkFormat.SourceFullName = newFile2
 
End If
End If
Next i
всё замечательно обновляется, но сейчас появилась задача, чтоб из экселя в ворд попадали связанные данные в виде текста. В ворд они вставляются, вручную прописала, чтоб не обновлялся формат, но при исполнении вышеуказанного кода для всех по умолчанию убирается галочка с пункта "обновлять формат при обновлении".... и весь фомат текста слетает...

вижу решение 2мя путями:
1 - в экселе сделать все корректировки текста, чтоб они вставлялись, как положено. Проблема: функция "Сцепить", которую я использую там не позволяет сцеплять с сохранением формата.
2 - сделать так, чтоб формат не обновлялся для некоторых связанных таблиц в ворде

Не знаю, как это реализовать.... может есть умные люди, которые помогут это реализовать?
0
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
20.01.2012, 12:51 26
Makarona,
т.е. после применения кода из #25 у поля убирается флажок Сохранять формат при обновлении?
Если установить текстовый курсор на поле и нажать Shift + F9, мы увидим код, в котором в конце есть текст: \* MERGEFORMAT. Этот текст исчезает после применения кода из #25?

Если так, то какое форматирование слетает: название шрифта, размер шрифта, жирность и т.д.?
1
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
20.01.2012, 13:03  [ТС] 27
Busine2012, всё именно так. Всё форматирование исчезает, возвращается либо к основному тексту, или к форматированию данных экселя, в зависимости от того, какой код я использую при выгрузке в Word. \* MERGEFORMAT исчезает при применении кода из #25
0
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
20.01.2012, 13:04 28
Цитата Сообщение от Makarona Посмотреть сообщение
Всё форматирование исчезает
напишите, что именно исчезает.
0
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
20.01.2012, 13:19  [ТС] 29
Busine2012, то что перечислили: шрифт, выделение жирным, часть текста, которая была красным. всё становится основным (шаблонным) шрифтом вордовского документа (calibri 10), несмотря на то, что сверху и снизу от выгружаемого абзаца другой шрифт (arial 12)

выгружаю:
Äîêóìåíò.Bookmarks.Item("Òåêñò_1").Range.PasteExcelTable LinkedToExcel:=True, WordFormatting:=True, RTF:=Folse

Как выглядит код в word после выгрузки: \a \f 5 \h \* MERGEFORMAT

как выглядит код после обновления связей: \a \f 5 \h
0
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
20.01.2012, 13:23 30
Makarona,
учитесь работать со стилями - за ними будущее. Сразу устанавливайте (вручную или с помощью макросов, ещё кажется можно копировать стиль уже готовый из какого-то шаблона) в документе стиль Обычный так, чтобы он максимально соответствовал тому, как вы оформляете документ.

Над MERGEFORMAT я подумаю. Ну или кто-нибудь другой может ответит.
0
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
20.01.2012, 13:29  [ТС] 31
Busine2012, я умею работать со стилями. Дело в том, что даже если стиль будет включать Arial 12 и нужное выравнивание, то это не отменяет того, что при обновлении будет слетать выделение слова или нескольких слов жирным шрифтом или цветом...
надеюсь, что Вы или кто-нибудь подскажет, в чём тут проблема.....
0
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
20.01.2012, 13:32 32
Цитата Сообщение от Makarona Посмотреть сообщение
я умею работать со стилями
а что ж тогда у вас стиль Обычный имеет шрифт Calibri, а не тот, который у вас в документе? Это уже очень грубая ошибка, которая указывает на полный непрофессионализм.
0
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
20.01.2012, 13:38  [ТС] 33
Busine2012, это указывает на то, что мне это было не нужно. Профессионализм экономиста-аналитика шаблонами шрифтов в документе не определяется.
0
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
20.01.2012, 13:39 34
Цитата Сообщение от Makarona Посмотреть сообщение
шаблонами шрифтов
я про стили говорю, а не про какие-то шаблоны шрифтов (я даже не знаю, что это такое).
0
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
20.01.2012, 13:48  [ТС] 35
Busine2012, спасибо конечно за помощь, которую мне оказывали, заведу кошелёк и отблагодарю не только словами, но цепляние к словам также не является признаком проффесионализма. Вы поняли что я имела ввиду, хотя я написала неправильное определение.
Думаю, что последняя часть диалога не имеет отношение к обсуждаемой теме, так что предлагаю закрыть обсуждение нашего с Вами профессионализма в своих сферах деятельности.
0
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
20.01.2012, 13:50 36
Непосредственная замена текста кода в поле. Пример для одного случая.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub Процедура1()
    Const strClass As String = "LINK Excel.Sheet.8 "
    Const strNewPath As String = _
        "C:\\Documents and Settings\\Пользователь\\Рабочий стол\\Для связи с Word 2.xls"
    Const strSheet As String = "Лист1!R1C1"
    Const strParameters As String = " \a \t \* MERGEFORMAT"
    'Chr(34) - это кавычка, Chr(32) - это пробел.
    ActiveDocument.Fields(1).Code.Text = strClass & Chr(34) & _
        strNewPath & Chr(34) & Chr(32) & Chr(34) & strSheet & Chr(34) & strParameters
    ActiveDocument.Fields(1).Update
End Sub

Цитата Сообщение от Makarona Посмотреть сообщение
Вы поняли что я имела ввиду, хотя я написала неправильное определение.
надо выражаться в терминах, придуманных разработчиками программы.


Цитата Сообщение от Makarona Посмотреть сообщение
Думаю, что последняя часть диалога не имеет отношение к обсуждаемой теме
имеет отношение.
0
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
20.01.2012, 14:15  [ТС] 37
Busine2012, если хотите выражаться в терминах придуманными разработчиками, то что ж мы на русском-то переписываемся?))
если это удовлетворит Ваше эго, то признаю: "Да, я непрофессионал в программировании на VBA", поэтому я и прошу помощи на этом сайте. И в моей профессии оформление кода, автоматизация составления отчётов, стили и т.п. абсолютно не играет роли, можно хоть со счётами сидеть или в толбик умножать, главное правильно проанализировать и сделать верные выводы.

Добавлено через 6 минут
Цитата Сообщение от Busine2012 Посмотреть сообщение
Непосредственная замена текста кода в поле. Пример для одного случая.
ага, смысл понимаю, но это не решает проблему: если до обновления связей у связанного объекта абсолютно правильная ссылка, после обновления - неправильная => теряется форматирование, то последующая правка ссылок (добавление в конце \* MERGEFORMAT) не вернёт мне утраченное форматирование...
0
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
20.01.2012, 14:52 38
Makarona,
значит форматирование слетает до применения кода из #25.
0
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
20.01.2012, 16:58  [ТС] 39
Цитата Сообщение от Busine2012 Посмотреть сообщение
Makarona,
значит форматирование слетает до применения кода из #25.
хм, может я где-то раньше косячу, хотя не вижу этого..... вот весь код, может кому-то пригодится (половина комментариев на русском, половина на английском, лень было перепечатывать перевод):


Visual Basic
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
Sub Изменить_источник()
'макрос, который позволяет обновить все связи с документом путём выбора новых связанных документов
 
 
Dim dlgSelectFile As FileDialog 'FileDialog object
Dim thisField As Field
Dim selectedFile As Variant 'must be Variant to contain filepath of selected item
Dim newFile1 As Variant, newFile2 As Variant
Dim fieldCount As Integer
Dim i As Long
 
 
 
 Dim Msg1, Style, Title1, Response1
Msg1 = "Выберите последний актуальный проверенный БДР для обновления таблиц в документе"
Style = vbOKCancel   ' Определяет кнопки
Title1 = "Выбор БДР"    ' Заголовок диалогового окна
 
        ' Display message.
Response1 = MsgBox(Msg1, Style, Title1)
If Response1 = vbOK Then    ' Если пользователь выбрал "Да"
 
  
'Диалоговое окно выбора файла
Set dlgSelectFile = Application.FileDialog(FileDialogType:=msoFileDialogFilePicker)
  
With dlgSelectFile
'use Show method to display File Picker dialog box and return user's action
If .Show = -1 Then
'step through each string in the FileDialogSelectedItems collection
For Each selectedFile In .SelectedItems
newFile1 = selectedFile 'получение нового пути расположения документа
Next selectedFile
Else: MsgBox "Вы не выбрали документ для обновления связи", vbOKOnly, "Ошибка"
End 'Если пользователь нажмёт "Отмена"
End If
End With
Set dlgSelectFile = Nothing
 
    
Else: End  ' Если пользователь нажал в первом сообщении кноку "Отмена"
 
End If
 
 
 Dim Msg2, Title2, Response2
Msg2 = "Выберите последний актуальный проверенный БДДС для обновления таблиц в документе"
Title2 = "Выбор БДДС"    ' Заголовок диалогового окна
 
        ' Display message.
Response2 = MsgBox(Msg2, Style, Title2)
If Response2 = vbOK Then    ' Если пользователь выбрал "Да"
 
  
'Диалоговое окно выбора файла
Set dlgSelectFile = Application.FileDialog(FileDialogType:=msoFileDialogFilePicker)
  
With dlgSelectFile
'use Show method to display File Picker dialog box and return user's action
If .Show = -1 Then
'step through each string in the FileDialogSelectedItems collection
For Each selectedFile In .SelectedItems
newFile2 = selectedFile 'получение нового пути расположения документа
Next selectedFile
Else: MsgBox "Вы не выбрали документ для обновления связи", vbOKOnly, "Ошибка"
End 'Если пользователь нажмёт "Отмена"
End If
End With
Set dlgSelectFile = Nothing
 
    
Else: End  ' Если пользователь нажал в первом сообщении кноку "Отмена"
 
End If
 
 
 
 
 
For i = 1 To ActiveDocument.Fields.Count Step 1
If ActiveDocument.Fields(i).Type = wdFieldLink Then
            If ActiveDocument.Fields(i).LinkFormat.SourceName Like "*БДР*" Then
ActiveDocument.Fields(i).LinkFormat.SourceFullName = newFile1
            ElseIf ActiveDocument.Fields(i).LinkFormat.SourceName Like "*БДДС*" Then
ActiveDocument.Fields(i).LinkFormat.SourceFullName = newFile2
 
End If
End If
Next i
 
 For Each oTable In ActiveDocument.Tables
   'oTable.Rows.WrapAroundText = False
        oTable.Rows.Alignment = wdAlignRowCenter
     '   oTable.Range.Style = ActiveDocument.Styles(wdStyleNormal)
   '     oTable.AutoFitBehavior (wdAutoFitWindow)
   '     oTable.Rows.HeightRule = wdRowHeightAuto 'Убирает галочку "Высота строки"
   Next
 
 
 
 
End Sub
Добавлено через 1 час 56 минут
Busine2012, Вы не подскажете, можно ли в этой конструкции задать не конкретный файл, а с выбором, как я делала?
Const strNewPath As String = _
"C:\\Documents and Settings\\Пользователь\\Рабочий стол\\Для связи с Word 2.xls"


грубо говоря из кода в #39 взять возможность выбора документа?

а то с константой никогда не сталкивалась, не получается

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Set dlgSelectFile = Application.FileDialog(FileDialogType:=msoFileDialogFilePicker)
   
With dlgSelectFile
'use Show method to display File Picker dialog box and return user's action
If .Show = -1 Then
'step through each string in the FileDialogSelectedItems collection
For Each selectedFile In .SelectedItems
 
 
 
Const newFile1 As String = selectedFile 'ïîëó÷åíèå íîâîãî ïóòè ðàñïîëîæåíèÿ äîêóìåíòà
 
 
 
Next selectedFile
Else: MsgBox "Âû íå âûáðàëè äîêóìåíò äëÿ îáíîâëåíèÿ ñâÿçè", vbOKOnly, "Îøèáêà"
End 'Åñëè ïîëüçîâàòåëü íàæì¸ò "Îòìåíà"
End If
End With
Set dlgSelectFile = Nothing
0
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
20.01.2012, 17:04 40
Makarona,
в 5 строке появляется диалоговое окно (#39, второй код), сколько файлов там выбирают? Один или несколько?
0
20.01.2012, 17:04
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.01.2012, 17:04
Помогаю со студенческими работами здесь

Калькулятор. Сложение внутри выбранного периода
Подскажите как сложить числа в выбранном периоде, например: есть значения : 1 = 20 2 = 30 3...

Выгрузка с форматированием: задать диапазон выгружаемых данных
Ребят столкнулся с проблемой! Нужна ваша помощь. И так в программе, что прилагаю есть файл "Акт...

Выбор листа в Excel в зависимости от даты
Добрый день. Просьба помочь. в VBA совсем не силен. Необходимо выбрать необходимый лист в...

Добавление срок в таблицу Word при заполнении документа Word из данных Excel
Всем привет! Я новичок в этом деле и нужна помощь. Есть таблица Excel с данными на основании...

Перенос данных из Excel в Word (на основе Word шаблона)
Пожалуйста помогите, приведите какой-то пример как организовать этот процесс нужно из...

Передача данных из Excel в Word (через Закладки) из нескольких страниц Excel
Товарищи прошу помощи! В книге есть 3 закладки: Org - данные об организации (только 1 строчка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Как запретить подсветку выделенного текста с помощью CSS
InfoMaster 20.01.2025
Подсветка текста при выделении является стандартным поведением браузера, которое не всегда соответствует дизайнерским решениям или функциональным требованиям веб-приложения. Выделение текста может. . .
Как выполнить другую программу или системную команду из Python
InfoMaster 20.01.2025
Python предоставляет мощные инструменты для выполнения системных команд и управления внешними процессами, что делает его идеальным выбором для автоматизации различных задач системного. . .
Как узнать директорию bash-скрипта из самого bash-скрипта
InfoMaster 20.01.2025
При разработке bash-скриптов одной из важных задач является определение директории, в которой находится исполняемый скрипт. Это критически важно для корректной работы с файлами, загрузки конфигураций. . .
В чем разница между let и var в JavaScript
InfoMaster 20.01.2025
JavaScript прошел длинный путь эволюции с момента своего создания в 1995 году. Одним из важнейших аспектов развития языка стало совершенствование механизмов объявления и управления переменными. . . .
Эффективная работа со строками в Go
InfoMaster 20.01.2025
Язык программирования Go предлагает уникальный подход к работе со строками, который существенно отличается от многих других языков программирования. В Go строки представляют собой неизменяемые. . .
Как проверить, что отображение (map) содержит ключ в Go
InfoMaster 20.01.2025
Отображения (maps) в языке программирования Go представляют собой мощные структуры данных, которые позволяют хранить пары ключ-значение и обеспечивают быстрый доступ к данным по уникальным. . .
Как организовать домашнее хранилище фильмов с общим доступом для всей семьи
InfoMaster 20.01.2025
Преимущества домашнего медиасервера В современном мире, где цифровой контент стал неотъемлемой частью нашей жизни, организация домашнего медиасервера становится все более актуальной задачей. . . .
Перспективы развития жестких дисков: есть ли у них будущее?
InfoMaster 20.01.2025
История и эволюция жестких дисков История развития жестких дисков начинается в 1956 году, когда компания IBM представила первое устройство для хранения данных на магнитных пластинах - IBM 350. . .
Распознавание изображений (компьютерное зрение) на C++
InfoMaster 20.01.2025
Введение в компьютерное зрение и основы работы с изображениями Компьютерное зрение представляет собой одну из наиболее динамично развивающихся областей информационных технологий, позволяющую. . .
Какой язык программировани­я лучший для разработки нейронных сетей
InfoMaster 20.01.2025
В современном мире технологий искусственные нейронные сети становятся неотъемлемой частью множества инновационных решений, от распознавания речи до автоматического управления транспортными. . .
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru