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

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

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

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

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

Необходимо делать выгрузку таблиц в зависимости от выбранного периода.
Как видно из примера, таблицы разных периодов имеют отличие в названиях только в одной цифре.
Проблема: не могу сделать так, чтоб при выборе периода происходил выбор нужных таблиц. Т.е. при выборе из списка «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
Программа делает вычисления введенных данных пользователя. Пользователь вносит свои данные в форму Edit1,Edit2.... и т.д Нажимает...

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

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

48
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
30.08.2011, 13:58  [ТС]
Пока ждала, сама нашла ответ на этот вопрос.
Может кому-то пригодится:
x = 1 (2,3,4 т.е. присваивается значение. У меня х = числу в зависимости от данных в одной ячейке)
Range("Name"&x)

и всё прекрасно срабатывает)
если кому-то понадобиться подробнее, пишите)
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
30.08.2011, 14:22
Комментарии к коду:
здесь:
Visual Basic
1
Word.Documents.Open (FName)
должно быть:
Visual Basic
1
Ворд.Documents.Open (FName)
Связывать документ с переменной можно уже здесь:
Visual Basic
1
Set Документ =Ворд.Documents.Open(FName)
Вот это:
Visual Basic
1
Application.CutCopyMode = False
можно записать один раз (чтобы кода было меньше) после всех копирований.
0
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
30.08.2011, 14:29  [ТС]
Busine2009,
мне не документ связывать надо, а выборку в экселе, которая будет выгружаться в ворд.
а часть, с выбором необходимого вордовского документа связана с тем, что дамы, которые мне отчитываются обожают переименовывать документы.

или я не правильно Вас поняла?
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
30.08.2011, 14:31
Цитата Сообщение от Makarona Посмотреть сообщение
или я не правильно Вас поняла?
просто я сделал замечания по вашему коду, который находится в книге Excel.

В нём есть ошибка и ещё я сделал рефакторинг (улучшение структуры программного кода с сохранением его функциональности).
0
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
30.08.2011, 14:32  [ТС]
Busine2009,
полезное замечание, особенно с сотней закладок, которые у меня будут по коду.
спасибо!
0
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
09.09.2011, 15:45  [ТС]
Продолжение потока вопросов.
У меня ряд проблем возник. Надеюсь, на помощь....
не могу сделать выгрузку из 2х документов, запуская макрос в одном из них.
Для примера прикреплены документы. Запускается из документа "Пример3"

Второй вопрос:
как сделать, чтоб после выгрузки в ворд высвечивалось окно "сохранить как" причём в нём можно было выбрать путь, но изначально открывалась папка, в которой лежат все эти документы. Пыталась, нифига не получилось...
Либо, чтоб автоматом сохранялось в этой же папке, а в диалоговом окне надо было набрать название


Третий вопрос (может конечно лучше в новую тему его....):
на лист устанавливается блокировка на редактирование. Даётся доступ к редактированию только определённого диапазона, но и там блок на изменение формул.
тут несколько проблем:
- формулы-то редактировать нельзя, а вот удалить можно((
- необходима возможность группировки, т.е. данные на листе сгруппированы, но можно открывать или закрывать группу +/- . Если защиту снять, потом поставить, то всё гуд. эта возможность есть, но если выйти из документа и обратно зайти, то управление группировкой заблокирована. (возможность создать новую группу на заблокированном листе не нужна)
- можно ли как-нибудь сделать так, чтоб выделить диапазон больше (например, 2 периода), а потом задать условие, что если в заголовке есть какое-то слово (в данном случае, это наименование), то этот столбец блокируется, не смотря на то, что у него есть объединённая с разблокированным столбцом ячейка (здесь наименование периода)

Вот код защиты, кажется, что напартачила что-то в нём....(он с комментариями для моего отдела, так что не обращайте внимание на писанину):
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
Sub Защита_снятие()
'
' Защита_снятие Макрос
' Снятие защиты
 
 
 
 
 'ИНСТРУКЦИЯ:
 'Здесь 2 макроса, которые разделены горизонтальной полосой
 ' Порядок действий:
 '   - при необходимости меняете пароль в обоих макросах, по умолчанию 111
 '   - выделяете диапазон (столбцы) возможного редактирования во втором макросе, формулы остануться заблокированными (в скобках диапазон): Set oRange = myWorksheet.Range("W:AB")
 '   - если есть необходимость сделать листы, на которых всё можно редактировать, то во втором макросе описано, как это сделать
 
 
 
 
 
                  
         
         Dim iNumber As Long
    On Error Resume Next
    iNumber = Application.InputBox("Введите пароль", "Ввод")
    If iNumber = 0 Then
        MsgBox "Вы ничего не ввели! ", vbOKOnly, "Ошибка"
        End
     End If
     
    If iNumber = 111 Then
  'Сам пароль,  менять тут
 
 
 
 
 
    For Each myWorksheet In Worksheets
'Оператор цикла, значит, что действие для всех листов книги
    
    
    myWorksheet.Unprotect Password:="iNumber"
'Снятие защиты формата со всех листов
    
    myWorksheet.Select
 
    Selection.SpecialCells(xlCellTypeFormulas, 23).Select
'Выделяет на всех листах ячейки с формулами
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
        :=xlBetween
        .IgnoreBlank = True
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = True
    End With
  
 
 
    Cells.Select
    ' выбор всех ячеек на всех листах
    
    Selection.Locked = True
    'указывает, что все ячейки будут потом защищены при блокировке
    
    Selection.FormulaHidden = False
    'указывает, что формулы НЕ будут невидимыми
 Next
   End
           
     Sheets("Данные").Select
    Range("D3").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=Список_диапазонов"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
          ' возвращает список периодов на место
           
           
    End If
      MsgBox "Пароль неправильный, защита не снята! ", vbOKOnly, "Запрет доступа от ............... службы"
'Исходящее сообщение при неправильно введённом пароле
   
End Sub
Sub Защита_установка()
'
' Защита_установка Макрос
' Установка защиты
 
 
        
        Dim myWorksheet As Worksheet
        Dim oRange As Range
        Dim oColumns As Range
        Dim oResult As Range
        Dim iNumber As Long
    On Error Resume Next
    iNumber = Application.InputBox("Введите пароль", "Ввод")
    If iNumber = 0 Then
        MsgBox "Вы ничего не ввели! ", vbOKOnly, "Ошибка"
        End
     End If
     
    If iNumber = 111 Then
    'Здесь устанавливается пароль
    
      
    
    For Each myWorksheet In Worksheets
  'Оператор цикла, значит, что действие для всех листов книги
    
If InStr(myWorksheet.Name, "UB") = 0 Then
       ' В кавычках указывается то значение, которое ищется в имени листа. Если стоит после скобки "=", то листы с этими буквами блокируются.
       ' Если вместо "=" поставить ">", то блокировка будет ТОЛЬКО на тех листах, в имени которых присутствуют эти символы
       
myWorksheet.Select False
 
 
                                                                                                   
           
     myWorksheet.Select
     Selection.SpecialCells(xlCellTypeFormulas, 23).Select
  'Выделяет на всех листах ячейки с формулами
        
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="ЛОЖЬ"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = "Ввод в эту ячейку запрещён"
        .InputMessage = ""
        .ErrorMessage = _
        "Нажмите клавишу Esc или щёлкните кнопку Отмена или закройте это окно" & Chr(10) & "" & Chr(10) & "Изменение формул заблокировано." & Chr(10) & ""
   'Текст сообщения об ошибке
        
        .ShowInput = True
        .ShowError = True
      
   
    
    End With
 
 myWorksheet.Select
     
     myWorksheet.EnableOutlining = True
     myWorksheet.EnableSelection = True
 
     
     myWorksheet.Protect Password:="iNumber", Contents:=True, Scenarios:=True, DrawingObjects:=False, UserinterfaceOnly:=True
                ' Блокирует все возможности, кроме группировки, копирования данных
 
  Selection.unselect
 
 
 
 
  Set oColumns = myWorksheet.Columns("I:J")
   
 myWorksheet.Select
    
  
    oColumns.Select
    Selection.Unprotect Password:="iNumber"
 
 Selection.Locked = False
 Selection.FormulaHidden = False
                ' Даёт возможность редактироваль на диапазоне, указанном выше
Selection.unselect
 
 
 
 End If
 
 
    Next
    End
    
 
    
        End If
      MsgBox "Пароль неправильный, защита не снята! ", vbOKOnly, "Запрет доступа от .................. службы"
        'Исходящее сообщение при неправильно введённом пароле
    
End Sub
Вложения
Тип файла: docx Пример.docx (10.0 Кб, 34 просмотров)
Тип файла: xls Пример3.xls (84.5 Кб, 43 просмотров)
Тип файла: xls Пример2.xls (49.0 Кб, 37 просмотров)
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
09.09.2011, 16:01
Makarona,
не ответ на вопрос. Макросы можно запускать из особой книги - эту книгу не видно, но она открывается при запуске Excel. Эта книга называется Personal.

Чтобы создать книгу Personal:
  1. откройте чистую книгу Excel;
  2. Сервис - Макрос - Начать запись... - Сохранить в: Личная книга макросов - OK;
  3. введите букву ж и нажмите клавишу Enter;
  4. Сервис - Макрос - Остановить запись;
  5. перейдите в VBA, там увидите PERSONAL.XLS. В этой книге можно создавать модули, которые будут доступны всем книгам.
0
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
09.09.2011, 16:42  [ТС]
Busine2009, а каждый из этих модулей можно привязать к конкретному документу по параметрам?? так как документы типовые, но несколько пользователей и разные периоды редактирования открыты в разное время. там и пароли разные будут и листы с сылками разные....
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
09.09.2011, 17:23
Makarona,
вот по первому вопросу:
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
Sub В_Ворд()
 
 
   Dim Ворд As New Word.Application, Документ As Word.Document
   Dim Лист As Excel.Worksheet, БДДС As Excel.Workbook
      
   Dim FName As Variant, ExName As Variant
   Dim Квартал As Long
 
       Ворд.Visible = True
 
FName = Application.GetOpenFilename(filefilter:="Word Files (*.docx), *.docx")
If FName <> False Then
Set Документ = Ворд.Documents.Open(FName)
         MsgBox "Открывается документ " & FName
Else
         MsgBox "Вы не выбрали документ ", vbOKOnly, "Ошибка"
        End
End If
    
 
'Работа с активной книгой Excel, с активным листом.
Set Лист = ActiveWorkbook.ActiveSheet
  
    
  Квартал = Лист.Range("E1").Value
    
 
    
 
    Лист.Range("Продажи" & Квартал).Copy
           ' Выбор диапазона копирования
           Документ.Bookmarks.Item("Продажи").Range.PasteExcelTable LinkedToExcel:=True, WordFormatting:=False, RTF:=False
           ' Выбор закладки для вставки
     
 
    Лист.Range("Прибыль" & Квартал).Copy
           ' Выбор диапазона копирования
           Документ.Bookmarks.Item("Прибыль").Range.PasteExcelTable LinkedToExcel:=True, WordFormatting:=False, RTF:=False
           ' Выбор закладки для вставки
        
        Application.CutCopyMode = False
        
        
  ExName = Application.GetOpenFilename(filefilter:="Excel Files (*.xls), *.xls")
If ExName <> False Then
Set БДДС = Workbooks.Open(ExName)
         MsgBox "Открывается книга " & FName
Else
         MsgBox "Вы не выбрали книгу ", vbOKOnly, "Ошибка"
        End
End If
        
        
 
     'Предположим, что данные в книге БДДС находятся на первом листе.
     БДДС.Worksheets(1).Range("Выручка" & Квартал).Copy
           ' Выбор диапазона копирования
           Документ.Bookmarks.Item("Выручка").Range.PasteExcelTable LinkedToExcel:=True, WordFormatting:=False, RTF:=False
           ' Выбор закладки для вставки
           
           Application.CutCopyMode = False
 
    
    
    
    
End Sub

Цитата Сообщение от Makarona Посмотреть сообщение
Busine2009, а каждый из этих модулей можно привязать к конкретному документу по параметрам?? так как документы типовые, но несколько пользователей и разные периоды редактирования открыты в разное время. там и пароли разные будут и листы с сылками разные....
вы попробуйте использовать PERSONAL, если не подойдёт, то не будете использовать.


Makarona,
вот по второму вопросу. Но осталась проблема: при появлении диалогового окна Сохранение документа активным остаётся Excel и нужно вручную переходить в Word.

Код нужно вставить после выгрузки в Word данных.
Visual Basic
1
2
3
4
5
6
7
8
9
With Ворд.FileDialog(msoFileDialogSaveAs)
    .AllowMultiSelect = False
    .ButtonName = "Сохранить"
    .Title = "Сохранение документа"
    .InitialFileName = "C:\Documents and Settings\Пользователь\Рабочий стол\"
    .Show
End With
    
Документ.Close Savechanges:=wdSaveChanges
В .InitialFileName = укажите имя папки, где надо сохранять документы Word.
1
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
09.09.2011, 17:31  [ТС]
Busine2009,

Цитата Сообщение от Busine2009 Посмотреть сообщение
Set Лист = ActiveWorkbook.ActiveSheet
а если страниц в документе куча, на каждой странице диапазоны именованные?
а здесь активная страница указывается
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
09.09.2011, 17:33
Makarona,
Visual Basic
1
Set Лист = ActiveWorkbook.Worksheets(1)
0
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
09.09.2011, 17:35  [ТС]
Цитата Сообщение от Busine2009 Посмотреть сообщение
.InitialFileName =
я нечто подобное пробовала, но мне это не подходит, так как документы отправляются в другую часть нашей страны, я не знаю где они будут держать документы.
оптимальный вариант был бы в текущую папку, где хранится документ, но почему-то .path у меня не получилось нормально запустить. Документы сохранялись в моих документах
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
09.09.2011, 17:37
А при чём здесь .path?
Цитата Сообщение от Makarona Посмотреть сообщение
но почему-то .path
Программисты из организации Microsoft сделали свойство InitialFileName для FileDialog(msoFileDialogSaveAs).

Нельзя в программировании писать всё, что вы считаете нужным, - вы можете использовать только те инструменты, которые вам предоставлены.
0
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
09.09.2011, 17:40  [ТС]
Цитата Сообщение от Busine2009 Посмотреть сообщение
Visual Basic
1
Set Лист = ActiveWorkbook.Worksheets(1)
получается, что надо каждый именнованный диапазон нужно прописывать вместе с листом, на котором он находится?
просто сейчас у меня с кодом, который я прицепляла, собираются все именнованные диапазоны из рабочей книги.
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
09.09.2011, 17:47
Цитата Сообщение от Makarona Посмотреть сообщение
получается, что надо каждый именнованный диапазон нужно прописывать вместе с листом
да, сначала указываете лист, а затем диапазон на листе.


Makarona,
если листов много, то можно посмотреть, можно ли использовать Цикл (используется для выполнения одного и того же действия, чтобы кода много не писать).
0
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
13.09.2011, 15:13  [ТС]
Busine2009, очередной раз спасибо за помощь. Ваш код даёт пинок моему мозгу и он его дорабатывает под себя, с ошибками конечно, но всё же....

Кстати, эта проблема
Цитата Сообщение от Busine2009 Посмотреть сообщение
нужно вручную переходить в Word.
решается следующим образом, вдруг пригодится:

Перед With Ворд.FileDialog(msoFileDialogSaveAs) надо вставить Ворд.Activate и тогда переходишь к ворду и видишь диалоговое окно для сохранения))
1
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
16.09.2011, 16:51  [ТС]
Может быть сталкивались со следующей проблемой: вставляете в ворд из экселя связанные таблицы (выгрузкой), а при переносе в другое место связь обрывается... как её восстановить? а лучше, как наладить выгрузку из эксель так, чтоб даже при перемещении было возможно указать конкретный документ и связи восстанавливались??

Добавлено через 1 час 40 минут
Я нашла слудующий код, но мне теперь нужно, чтоб было не "введите новое имя", а список привязанных Excel файлов к данному Word.
Может кто знает, как это сделать?


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
Sub Обновить_Связи()
 
  Dim oFld As Field 'Поле
  Dim OldFileName As String 'Старое имя файла
  Dim NewFileName As String 'Новое имя файла
  Dim FieldCode As String 'Код поля
  Dim ReplaceAllPath As Boolean 'Заменять весь путь к файлу или только имя
  Dim StartPath As Integer, EndPath As Integer 'Начало и конец пути к файлу в коде поля
  
  'Ввод старого имени файла
  OldFileName = InputBox("Укажите старое имя файла с расширением в ссылке, которое нужно изменить", "Изменение ссылок", OldFileName)
  If Len(OldFileName) = 0 Then Exit Sub
  
  'Выбор нового файла
  With Application.FileDialog(msoFileDialogFilePicker)
    .Title = "Выберите новый файл, с которым должен быть связан документ"
    .AllowMultiSelect = False
    .ButtonName = "Выбрать"
    .Filters.Clear
    .Filters.Add "Таблицы Excel", "*.xls; *.xlsx; *.xlsm"
    If .Show Then NewFileName = .SelectedItems(1) Else Exit Sub
  End With
  
  'Если изменилось не только имя, но и местоположение, то можно заменить весь путь
  ReplaceAllPath = MsgBox("Заменять весь путь? Нажмите ""Нет"", чтобы заменить только имя файла", vbYesNo + vbInformation, "Изменение ссылок") = vbYes
  
  NewFileName = Replace(NewFileName, "\", "\\")
  'Перебираем все поля в документе
  For Each oFld In ActiveDocument.Fields
    If oFld.Type = wdFieldLink Then 'Если поле является полем ссылки
      FieldCode = oFld.Code.Text
      If InStr(oFld.Code.Text, "Excel.Sheet") <> 0 And InStr(FieldCode, "\\" & OldFileName) <> 0 Then 'Если поле ссылается на лист Excel и на нужный файл
        If ReplaceAllPath Then 'Если нужно заменить весь путь
          StartPath = InStr(FieldCode, ":\\") - 2
          EndPath = InStr(FieldCode, "\\" & OldFileName) + Len(OldFileName) + 2
          FieldCode = Mid(FieldCode, 1, StartPath) & NewFileName & Mid(FieldCode, EndPath)
        Else 'Если нужно заменить только имя файла
          FieldCode = Replace(FieldCode, OldFileName, Mid(NewFileName, InStrRev(NewFileName, "\") + 1))
        End If
      End If
    End If
    oFld.Code.Text = FieldCode
  Next
End Sub
Добавлено через 2 часа 3 минуты
Или во второй вариант кода, но никак не могу под себя оптимизировать, чтоб было, если в наименовании связанного объекта присутствовало БДР, тогда его ссылки заменялись на 1й выбранный документ, а если БДДС, то на второй....

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
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
 
'create FileDialog object as File Picker dialog box
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 'gets new filepath
Next selectedFile
Else 'user clicked cancel
End If
End With
Set dlgSelectFile = Nothing
 
'create FileDialog object as File Picker dialog box
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 'gets new filepath
Next selectedFile
Else 'user clicked cancel
End If
End With
Set dlgSelectFile = Nothing
 
 
'update fields
 
fieldCount = ActiveDocument.Fields.Count
For x = 1 To fieldCount
If thisField.LinkFormat.SourceName = "*ÁÄÐ*.xlsm" Then
ActiveDocument.Fields(x).LinkFormat.SourceFullName = newFile1
ElseIf thisField.LinkFormat.SourceName = "*ÁÄÄÑ*.xlsm" Then
ActiveDocument.Fields(x).LinkFormat.SourceFullName = newFile2
End If
Next x
 
'Ниже кусок оригинального кода, при котором меняются все ссылки с прошлого на выбранный фаил
 
'fieldCount = ActiveDocument.Fields.Count
'For x = 1 To fieldCount
'ActiveDocument.Fields(x).LinkFormat.SourceFullName = newFile
'Next x
 
 
 
 
End Sub

Помогите, плиз.... кто может...
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
21.09.2011, 15:59
Цитата Сообщение от Makarona Посмотреть сообщение
(выгрузкой)
что за выгрузка?

Цитата Сообщение от Makarona Посмотреть сообщение
"введите новое имя"
а в какой строке это?
0
1 / 1 / 0
Регистрация: 27.07.2011
Сообщений: 37
18.01.2012, 11:34  [ТС]
Цитата Сообщение от Busine2009 Посмотреть сообщение
что за выгрузка?
из Excel в Word


Цитата Сообщение от Busine2009 Посмотреть сообщение
а в какой строке это?
т.е. старое имя. стр 12



вот пытаюсь сделать что-то типа следующего, но код не работает:
Visual Basic
1
2
3
4
5
6
7
8
fieldCount = ActiveDocument.Fields.Count
For x = 1 To fieldCount
If thisField.LinkFormat.SourceName = "*ÁÄÐ*.xlsm" Then
ActiveDocument.Fields(x).LinkFormat.SourceFullName = newFile1
ElseIf thisField.LinkFormat.SourceName = "*ÁÄÄÑ*.xlsm" Then
ActiveDocument.Fields(x).LinkFormat.SourceFullName = newFile2
End If
Next x
может кто подскажет, что неправильно делаю?
заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.01.2012, 11:34
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru