Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Не могу больше / 17 сообщений из 17, страница 1 из 1
22.03.2014, 18:00
    #38593649
zchvv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
Из темы Заполнение путевого листа в Word из книги Excel (ТС DrHamlet) взял код Казанского и переделал под свою задачу.
Мне нужно из строки таблицы 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.
Option Explicit
Dim wdApp As Object, wdDoc As Object
Dim fio As String, login As String
Dim listname As String, dpz As String, fname As String, fldname As String
Dim r As Range, c As Range
Dim i As Long

Sub PutList()

'определение исходных данных
fname = TextBox1.Text
listname = TextBox2.Text
fldname = TextBox3.Text
dpz = TextBox4.Text
If inlist("", listname, dpz, fname, fldname) Then
    MsgBox "Заполните поля ввода", vbInformation, "Сообщение"
    Exit Sub
End If
Set ws = ThisWorkbook.Worksheets(listname)
Set r = ws.Range(dpz)

'Word: или уже запущен, или запустить
On Error Resume Next
Err.Clear
Set wdApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
    Set wdApp = CreateObject("Word.Application")
End If
On Error GoTo 0
With wdApp
  .Visible = False
  Set wdDoc = .Documents.Add(fname)
End With

'Действия
For i = 1 To r.Rows.Count
    fio = Trim(r.Cells(i, 1).Value)
    login = Trim(r.Cells(i, 2).Value)
    Set wdDoc = wdApp.Documents.Add(fname)
    With wdDoc
        .Bookmarks("fio").Range.Text = fio
        .Bookmarks("fio").Range.Words(1).Font.Bold = True ' здесь проблема
        .Bookmarks("fio").Range.Words(1).Font.Underline = 1 ' и здесь проблема
        .Bookmarks("login").Range.Text = login
        .Bookmarks("login").Range.Words(1).Font.Bold = True ' и здесь проблема
        .SaveAs Filename:=fldname & "\" & fio & ".docx"
        .Close SaveChanges:=False
    End With
Next i

'Конец
wdApp.Quit
MsgBox "Готово", vbInformation, "Сообщение"
End Sub


Результат: gi -filatov
Т.е. подчеркивание и жирность только до знака -
Почему? Разве gi-filatov - не одно слово? Не Words(1)?
Потратил уйму времени. Помогите!
...
Рейтинг: 0 / 0
22.03.2014, 18:17
    #38593654
zchvv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
Исправил явную глупость
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
'Word: или уже запущен, или запустить
On Error Resume Next
Err.Clear
Set wdApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
    Set wdApp = CreateObject("Word.Application")
    wdApp.Visible = False
End If
...
Рейтинг: 0 / 0
22.03.2014, 18:59
    #38593678
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
Проблема в том, что закладка исчезает после вставки. Обойти можно так:
Код: vbnet
1.
2.
3.
4.
    With wdDoc
        set r=.Bookmarks("fio").Range
        r.Text = fio
        r.Font.Bold = True
...
Рейтинг: 0 / 0
22.03.2014, 19:23
    #38593688
zchvv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
Уважаемый Казанский! Большое спасибо!
Теперь так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
'Действия
Dim x
For i = 1 To r.Rows.Count
    fio = Trim(r.Cells(i, 1).Value)
    login = Trim(r.Cells(i, 2).Value)
    Set wdDoc = wdApp.Documents.Add(fname)
    With wdDoc
        Set x = .Bookmarks("fio").Range
        x.Text = fio
        x.Font.Bold = True
        x.Font.Underline = 1
        Set x = .Bookmarks("login").Range
        x.Text = login
        x.Font.Bold = True
        .SaveAs Filename:=fldname & "\" & fio & ".docx"
        .Close SaveChanges:=False
    End With
Next i 
...
Рейтинг: 0 / 0
28.03.2014, 08:17
    #38598719
zchvv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
Обобщил, как смог. Возможно, кому-то пригодится.
Код: 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.
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.
Option Explicit
Dim wdApp As Object, wdDoc As Object
Dim listname As String, dpz As String, dpz_bm As String, dpz_val As String
Dim fname As String, fldname As String, bm As String
Dim r As Range, r1 As Range, c As Range
Dim i As Long, j As Integer
Dim x, bmrk

Private Sub ВсеЗакладки(ByVal fname As String)
'вывод в комбобокс имен всех закладок в ворд-документе
If Dir(fname, vbNormal) = "" Then
    MsgBox "Файл не найден", vbInformation, "Сообщение"
    Exit Sub
End If
ComboBox1.Clear
On Error Resume Next
Err.Clear
Set wdApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
    Set wdApp = CreateObject("Word.Application")
    wdApp.Visible = False
End If
On Error GoTo 0
Set wdDoc = wdApp.Documents.Add(fname)
    With wdDoc
        For Each bmrk In .BookMarks
            ComboBox1.AddItem bmrk.Name
        Next
        .Close SaveChanges:=False
    End With
wdApp.Quit
End Sub

Sub PutToWrdDoc()
Dim fam As String
'определение исходных данных
fname = TextBox1.Text
listname = TextBox2.Text
fldname = TextBox3.Text
dpz_bm = TextBox5.Text
dpz_val = TextBox4.Text
If inlist("", listname, dpz_bm, dpz_val, fname, fldname) Then
    MsgBox "Заполните поля ввода", vbInformation, "Сообщение"
    Exit Sub
End If
If Dir(fldname, vbDirectory) = "" Then
    Err.Clear
    On Error Resume Next
    MkDir fldname
        If Err.Number <> 0 Then
            MsgBox "Невозможно создать папку", vbInformation, "Сообщение"
            On Error GoTo 0
            Exit Sub
        End If
End If
Set ws = ThisWorkbook.Worksheets(listname)
Set r1 = ws.Range(dpz_bm) 'закладки (заголовок таблицы)
Set r = ws.Range(dpz_val) 'значения (тело таблицы)
'Word: или уже запущен, или запустить
On Error Resume Next
Err.Clear
Set wdApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
    Set wdApp = CreateObject("Word.Application")
    wdApp.Visible = False
End If
On Error GoTo 0
'действия
For i = 1 To r.Rows.Count
    Set wdDoc = wdApp.Documents.Add(fname)
    With wdDoc
    fam = Trim(r.Cells(i, 1).Value) 'фамилия идет в имя файла.docx
        For j = 1 To r1.Columns.Count
            bm = Trim(r1.Cells(1, j).Value) 'имя закладки в шаблоне, оно же в заголовочной строке таблицы
                Set x = .BookMarks(bm).Range
                x.Text = r.Cells(i, j).Value
                If inlist(bm, "fio") Then
                    x.Font.Bold = True
                    x.Font.Underline = 1
                Else
                    x.Font.Bold = True
                End If
        Next j
        .SaveAs Filename:=fldname & "\" & fam & ".docx"
        .Close SaveChanges:=False
    End With
Next i
'конец
wdApp.Quit
MsgBox "Готово", vbInformation, "Сообщение"
End Sub

Private Sub CommandButton1_Click()
PutToWrdDoc
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

Private Sub CommandButton3_Click()
TextBox2.Text = ActiveSheet.Name
End Sub

Private Sub CommandButton4_Click()
TextBox4.Text = Application.Selection.Address(False, False)
Set ws = Application.ActiveSheet
ws.Cells(1, 1).Select
End Sub

Private Sub CommandButton5_Click()
Dim fn As Variant
fn = Application.GetOpenFilename(, , "Зайдите в Вашу конечную папку, выберите любой файл и нажмите Открыть")
If fn <> False Then TextBox1.Text = fn
End Sub

Private Sub CommandButton6_Click()
Dim fn As Variant
fn = Application.GetOpenFilename(, , "Зайдите в Вашу конечную папку, выберите любой файл и нажмите Открыть")
If fn <> False Then
    fn = Mid(fn, 1, InStrRev(fn, "\") - 1)
    TextBox3.Text = fn
End If
End Sub

Private Sub CommandButton7_Click()
TextBox5.Text = Application.Selection.Address(False, False)
Set ws = Application.ActiveSheet
ws.Cells(1, 1).Select
End Sub

Private Sub CommandButton8_Click()
Dim ffname As String
ffname = Trim(TextBox1.Text)
If ffname = "" Then Exit Sub
ВсеЗакладки ffname
End Sub


Критика приветствуется двумя руками.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
31.05.2015, 19:50
    #38972789
preshpeshnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
zchvv,
Добрый вечер, попытался повторить Вашу работу.
Ругается на эту строку " If inlist("", listname, dpz_bm, dpz_val, fname, fldname) Then "
В чем может быть проблема?
...
Рейтинг: 0 / 0
31.05.2015, 20:13
    #38972798
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
Похоже, автор выложил не весь свой код
...
Рейтинг: 0 / 0
05.06.2015, 07:15
    #38976924
zchvv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
Public Function inlist(s As Variant, ParamArray spisok() As Variant) As Boolean
inlist = False
For Each elem In spisok
If elem = s Then
inlist = True
Exit For
End If
Next
End Function
...
Рейтинг: 0 / 0
05.06.2015, 07:16
    #38976925
zchvv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Function inlist(s As Variant, ParamArray spisok() As Variant) As Boolean
inlist = False
For Each elem In spisok
    If elem = s Then
        inlist = True
        Exit For
    End If
Next
End Function
...
Рейтинг: 0 / 0
23.06.2015, 15:26
    #38990748
preshpeshnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
zchvv,

Спасибо, но как оказалось все не так просто..
Теперь выдает другую ошибку Run-time error 5174: файл не найден.
И ссылается на эту строку
Set wdDoc = wdApp.Documents.Add(fname)
В чем может быть проблема? Я никак не могу понять...
...
Рейтинг: 0 / 0
23.06.2015, 15:40
    #38990765
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
preshpeshnikфайл не найден.preshpeshnikВ чем может быть проблема?
будете смеяться, но проблема в том, что файл не найден

неверно указываете имя шаблона
...
Рейтинг: 0 / 0
23.06.2015, 16:08
    #38990821
preshpeshnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
Shocker.Pro,

Как это возможно?
Как можно не так указать имя шаблона если я выбираю файл в выпадающем окне?
...
Рейтинг: 0 / 0
23.06.2015, 16:15
    #38990827
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
не знаю-не знаю, где-то накосячили
проверяйте значение переменной fname в момент ошибки

как вариант - возможны проблемы с доступом к файлу
...
Рейтинг: 0 / 0
23.06.2015, 16:19
    #38990835
preshpeshnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
Shocker.Pro,
Тут разобрался, теперь такая ошибка
Set ws = ThisWorkbook.Worksheets(listname) run-time error 9 subscript out of range
...
Рейтинг: 0 / 0
23.06.2015, 16:23
    #38990841
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
Значит нет такого листа в данной книге
...
Рейтинг: 0 / 0
29.06.2015, 15:09
    #38995074
preshpeshnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
Shocker.Pro,
Добрый день, а не подскажете почему на строке Set x = .BookMarks(bm).Range может выдавать ошибку 5941 Запрашиваемый номер семейства не найден?
...
Рейтинг: 0 / 0
29.06.2015, 15:12
    #38995082
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу больше
нет закладки с таким именем
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Не могу больше / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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