powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Не могу больше
17 сообщений из 17, страница 1 из 1
Не могу больше
    #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
Не могу больше
    #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
Не могу больше
    #38593678
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в том, что закладка исчезает после вставки. Обойти можно так:
Код: vbnet
1.
2.
3.
4.
    With wdDoc
        set r=.Bookmarks("fio").Range
        r.Text = fio
        r.Font.Bold = True
...
Рейтинг: 0 / 0
Не могу больше
    #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
Не могу больше
    #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
Период между сообщениями больше года.
Не могу больше
    #38972789
preshpeshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zchvv,
Добрый вечер, попытался повторить Вашу работу.
Ругается на эту строку " If inlist("", listname, dpz_bm, dpz_val, fname, fldname) Then "
В чем может быть проблема?
...
Рейтинг: 0 / 0
Не могу больше
    #38972798
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, автор выложил не весь свой код
...
Рейтинг: 0 / 0
Не могу больше
    #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
Не могу больше
    #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
Не могу больше
    #38990748
preshpeshnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zchvv,

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

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

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

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


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