Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Общие переменные для замены текста в шаблонах - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Общие переменные для замены текста в шаблонах (Макросы/Sub)
Общие переменные для замены текста в шаблонах
den45444 Дата: Пятница, 18.09.2015, 21:49 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый вечер.

Есть шаблоны-документы Экесль Акты, Договор и т.п.

На каждый документ свой макрос.

Как можно задать общие переменные (Public) для всех макросов данной книги?

Вот пример макроса договора:
[vba]
Код
Sub dogovor() 'Создание договора по данным клиента
Dim wb1 As Workbook, wb2 As Workbook, Mwb As Workbook, p$
Set Mwb = ActiveWorkbook
p = Mwb.Path
Set wb1 = ActiveWorkbook
Set wb2 = Workbooks.Open(papka & "\Договор.xlsx")

fio = wb1.Sheets(rekvName).Range("B3")
pasport = wb1.Sheets(rekvName).Range("B4")
vydan = wb1.Sheets(rekvName).Range("B5")
dvyd = wb1.Sheets(rekvName).Range("B6")
adr = wb1.Sheets(rekvName).Range("B7")
emai = wb1.Sheets(rekvName).Range("B8")
tel = wb1.Sheets(rekvName).Range("B9")
pod = wb1.Sheets(rekvName).Range("B10")
obj = wb1.Sheets(rekvName).Range("B11")
dog = wb1.Sheets(rekvName).Range("B12")
'ddog = wb1.Sheets(rekvName).Range("B13")

With wb2.Worksheets(1).Cells
.Replace "{ФИО}", fio, xlPart
.Replace "{Паспорт}", pasport, xlPart
.Replace "{Выдан}", vydan, xlPart
.Replace "{Дата выдачи}", dvyd, xlPart
.Replace "{Адрес регистрации}", adr, xlPart
.Replace "{E-mail}", emai, xlPart
.Replace "{Телефон}", tel, xlPart
.Replace "{Подпись}", pod, xlPart
.Replace "{Адрес объекта}", obj, xlPart
.Replace "{Номер договора}", dog, xlPart
'.Replace "{Дата договора}", ddog, xlPart
End With
wb2.SaveAs (p & "/" & "Договор(" & dog & ").xlsx")
End Sub
[/vba]


Сообщение отредактировал den45444 - Пятница, 18.09.2015, 22:18
 
Ответить
СообщениеДобрый вечер.

Есть шаблоны-документы Экесль Акты, Договор и т.п.

На каждый документ свой макрос.

Как можно задать общие переменные (Public) для всех макросов данной книги?

Вот пример макроса договора:
[vba]
Код
Sub dogovor() 'Создание договора по данным клиента
Dim wb1 As Workbook, wb2 As Workbook, Mwb As Workbook, p$
Set Mwb = ActiveWorkbook
p = Mwb.Path
Set wb1 = ActiveWorkbook
Set wb2 = Workbooks.Open(papka & "\Договор.xlsx")

fio = wb1.Sheets(rekvName).Range("B3")
pasport = wb1.Sheets(rekvName).Range("B4")
vydan = wb1.Sheets(rekvName).Range("B5")
dvyd = wb1.Sheets(rekvName).Range("B6")
adr = wb1.Sheets(rekvName).Range("B7")
emai = wb1.Sheets(rekvName).Range("B8")
tel = wb1.Sheets(rekvName).Range("B9")
pod = wb1.Sheets(rekvName).Range("B10")
obj = wb1.Sheets(rekvName).Range("B11")
dog = wb1.Sheets(rekvName).Range("B12")
'ddog = wb1.Sheets(rekvName).Range("B13")

With wb2.Worksheets(1).Cells
.Replace "{ФИО}", fio, xlPart
.Replace "{Паспорт}", pasport, xlPart
.Replace "{Выдан}", vydan, xlPart
.Replace "{Дата выдачи}", dvyd, xlPart
.Replace "{Адрес регистрации}", adr, xlPart
.Replace "{E-mail}", emai, xlPart
.Replace "{Телефон}", tel, xlPart
.Replace "{Подпись}", pod, xlPart
.Replace "{Адрес объекта}", obj, xlPart
.Replace "{Номер договора}", dog, xlPart
'.Replace "{Дата договора}", ddog, xlPart
End With
wb2.SaveAs (p & "/" & "Договор(" & dog & ").xlsx")
End Sub
[/vba]

Автор - den45444
Дата добавления - 18.09.2015 в 21:49
den45444 Дата: Пятница, 18.09.2015, 21:52 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
fio = wb1.Sheets(rekvName).Range("B3")
pasport = wb1.Sheets(rekvName).Range("B4")
vydan = wb1.Sheets(rekvName).Range("B5")
dvyd = wb1.Sheets(rekvName).Range("B6")
adr = wb1.Sheets(rekvName).Range("B7")
emai = wb1.Sheets(rekvName).Range("B8")
tel = wb1.Sheets(rekvName).Range("B9")
pod = wb1.Sheets(rekvName).Range("B10")
obj = wb1.Sheets(rekvName).Range("B11")
dog = wb1.Sheets(rekvName).Range("B12")
'ddog = wb1.Sheets(rekvName).Range("B13")


.Replace "{ФИО}", fio, xlPart
.Replace "{Паспорт}", pasport, xlPart
.Replace "{Выдан}", vydan, xlPart
.Replace "{Дата выдачи}", dvyd, xlPart
.Replace "{Адрес регистрации}", adr, xlPart
.Replace "{E-mail}", emai, xlPart
.Replace "{Телефон}", tel, xlPart
.Replace "{Подпись}", pod, xlPart
.Replace "{Адрес объекта}", obj, xlPart
.Replace "{Номер договора}", dog, xlPart
'.Replace "{Дата договора}", ddog, xlPart


Эти данные повторяются в каждом макросе.
 
Ответить
Сообщение
fio = wb1.Sheets(rekvName).Range("B3")
pasport = wb1.Sheets(rekvName).Range("B4")
vydan = wb1.Sheets(rekvName).Range("B5")
dvyd = wb1.Sheets(rekvName).Range("B6")
adr = wb1.Sheets(rekvName).Range("B7")
emai = wb1.Sheets(rekvName).Range("B8")
tel = wb1.Sheets(rekvName).Range("B9")
pod = wb1.Sheets(rekvName).Range("B10")
obj = wb1.Sheets(rekvName).Range("B11")
dog = wb1.Sheets(rekvName).Range("B12")
'ddog = wb1.Sheets(rekvName).Range("B13")


.Replace "{ФИО}", fio, xlPart
.Replace "{Паспорт}", pasport, xlPart
.Replace "{Выдан}", vydan, xlPart
.Replace "{Дата выдачи}", dvyd, xlPart
.Replace "{Адрес регистрации}", adr, xlPart
.Replace "{E-mail}", emai, xlPart
.Replace "{Телефон}", tel, xlPart
.Replace "{Подпись}", pod, xlPart
.Replace "{Адрес объекта}", obj, xlPart
.Replace "{Номер договора}", dog, xlPart
'.Replace "{Дата договора}", ddog, xlPart


Эти данные повторяются в каждом макросе.

Автор - den45444
Дата добавления - 18.09.2015 в 21:52
KSV Дата: Пятница, 18.09.2015, 23:23 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Как можно задать общие переменные (Public) для всех макросов данной книги?

Добрый вечер!
Добавьте стандартный модуль и объявите в нем все Public переменные, которые должны быть видны во всех макросах проекта.


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
Как можно задать общие переменные (Public) для всех макросов данной книги?

Добрый вечер!
Добавьте стандартный модуль и объявите в нем все Public переменные, которые должны быть видны во всех макросах проекта.

Автор - KSV
Дата добавления - 18.09.2015 в 23:23
den45444 Дата: Пятница, 18.09.2015, 23:56 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый вечер!
Добавьте стандартный модуль и объявите в нем все Public переменные, которые должны быть видны во всех макросах проекта.


Те переменные которые входят в DIM я указал и с ними нет проблем.
А вот например эти данные как указать? :
fio = wb1.Sheets(rekvName).Range("B3")
pasport = wb1.Sheets(rekvName).Range("B4")
vydan = wb1.Sheets(rekvName).Range("B5")
dvyd = wb1.Sheets(rekvName).Range("B6")
adr = wb1.Sheets(rekvName).Range("B7")
emai = wb1.Sheets(rekvName).Range("B8")
tel = wb1.Sheets(rekvName).Range("B9")
pod = wb1.Sheets(rekvName).Range("B10")
obj = wb1.Sheets(rekvName).Range("B11")
dog = wb1.Sheets(rekvName).Range("B12")
'ddog = wb1.Sheets(rekvName).Range("B13")
 
Ответить
Сообщение
Добрый вечер!
Добавьте стандартный модуль и объявите в нем все Public переменные, которые должны быть видны во всех макросах проекта.


Те переменные которые входят в DIM я указал и с ними нет проблем.
А вот например эти данные как указать? :
fio = wb1.Sheets(rekvName).Range("B3")
pasport = wb1.Sheets(rekvName).Range("B4")
vydan = wb1.Sheets(rekvName).Range("B5")
dvyd = wb1.Sheets(rekvName).Range("B6")
adr = wb1.Sheets(rekvName).Range("B7")
emai = wb1.Sheets(rekvName).Range("B8")
tel = wb1.Sheets(rekvName).Range("B9")
pod = wb1.Sheets(rekvName).Range("B10")
obj = wb1.Sheets(rekvName).Range("B11")
dog = wb1.Sheets(rekvName).Range("B12")
'ddog = wb1.Sheets(rekvName).Range("B13")

Автор - den45444
Дата добавления - 18.09.2015 в 23:56
KSV Дата: Суббота, 19.09.2015, 00:35 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
1. я так понимаю, на создание файла-примера у вас времени нет, поэтому этим должны заняться другие?
2. что значит "эти данные как указать"? у вас вопрос про область видимости переменных...
см. файл
К сообщению приложен файл: 33.xlsm (16.9 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение1. я так понимаю, на создание файла-примера у вас времени нет, поэтому этим должны заняться другие?
2. что значит "эти данные как указать"? у вас вопрос про область видимости переменных...
см. файл

Автор - KSV
Дата добавления - 19.09.2015 в 00:35
den45444 Дата: Суббота, 19.09.2015, 13:01 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
я так понимаю, на создание файла-примера у вас времени нет, поэтому этим должны заняться другие?

немного позже постараюсь выложить пример.
 
Ответить
Сообщение
я так понимаю, на создание файла-примера у вас времени нет, поэтому этим должны заняться другие?

немного позже постараюсь выложить пример.

Автор - den45444
Дата добавления - 19.09.2015 в 13:01
den45444 Дата: Суббота, 19.09.2015, 14:24 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
я так понимаю, на создание файла-примера у вас времени нет

Вот пример создания договора и акта. Кроме кодов открытия и сохранения, все остальные коды совпадают. Как их прописать так, чтобы не писать их в каждом макросе?
К сообщению приложен файл: 5439554.xlsm (19.5 Kb)
 
Ответить
Сообщение
я так понимаю, на создание файла-примера у вас времени нет

Вот пример создания договора и акта. Кроме кодов открытия и сохранения, все остальные коды совпадают. Как их прописать так, чтобы не писать их в каждом макросе?

Автор - den45444
Дата добавления - 19.09.2015 в 14:24
den45444 Дата: Суббота, 19.09.2015, 19:58 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
у вас вопрос про область видимости переменных...
см. файл

По вашему примеру у меня не получается.

Может кто-нибудь поможет в решении данного вопроса?
Жду помощи.
 
Ответить
Сообщение
у вас вопрос про область видимости переменных...
см. файл

По вашему примеру у меня не получается.

Может кто-нибудь поможет в решении данного вопроса?
Жду помощи.

Автор - den45444
Дата добавления - 19.09.2015 в 19:58
Udik Дата: Воскресенье, 20.09.2015, 21:59 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Кажется понял, что требуется автору - процедура с параметрами. В неё надо передать изменяемые данные, а их уже обрабатывать внутри.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Воскресенье, 20.09.2015, 22:01
 
Ответить
СообщениеКажется понял, что требуется автору - процедура с параметрами. В неё надо передать изменяемые данные, а их уже обрабатывать внутри.

Автор - Udik
Дата добавления - 20.09.2015 в 21:59
SLAVICK Дата: Понедельник, 21.09.2015, 10:09 | Сообщение № 10
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
все остальные коды совпадают

Что значит коды? Вы имеете ввиду процедуры, или константы?
Если константы - то замените
[vba]
Код
Private Const
на
Public Const
[/vba]
Тогда они будут видны во всех модулях книги. - это то что предложил KSV не видя Ваш пример :D
А процедуры и так можно вызывать из другого модуля - используйте :
[vba]
Код
Run "dogovor"
[/vba]

Детальнее здесь ;)

Кажется понял, что требуется автору - процедура с параметрами.


Возможно Вы правы - тогда нужно указать макросу имя листа - и вызвать процедуру с этим листом... тогда например так:
[vba]
Код
Public papka As String
Sub Test()
     papka = "C:\ШАБЛОНЫ"
     rekvName = "Реквизиты"
     Run "dogovor", rekvName
     Run "akt", rekvName
End Sub
[/vba]
См. модуль2 в книге
К сообщению приложен файл: 5439554-1-.xlsm (24.2 Kb)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Понедельник, 21.09.2015, 10:21
 
Ответить
Сообщение
все остальные коды совпадают

Что значит коды? Вы имеете ввиду процедуры, или константы?
Если константы - то замените
[vba]
Код
Private Const
на
Public Const
[/vba]
Тогда они будут видны во всех модулях книги. - это то что предложил KSV не видя Ваш пример :D
А процедуры и так можно вызывать из другого модуля - используйте :
[vba]
Код
Run "dogovor"
[/vba]

Детальнее здесь ;)

Кажется понял, что требуется автору - процедура с параметрами.


Возможно Вы правы - тогда нужно указать макросу имя листа - и вызвать процедуру с этим листом... тогда например так:
[vba]
Код
Public papka As String
Sub Test()
     papka = "C:\ШАБЛОНЫ"
     rekvName = "Реквизиты"
     Run "dogovor", rekvName
     Run "akt", rekvName
End Sub
[/vba]
См. модуль2 в книге

Автор - SLAVICK
Дата добавления - 21.09.2015 в 10:09
den45444 Дата: Вторник, 22.09.2015, 12:23 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Udik,

Кажется понял, что требуется автору - процедура с параметрами. В неё надо передать изменяемые данные, а их уже обрабатывать внутри.


Нужно один раз задать данные для всех шаблонов и когда будут нужны выдергивать их.
Например, вот эти общие данные из которых нужно часто вставлять в процедуры:
[vba]
Код
fio = wb1.Sheets(rekvName).Range("B3")
pasport = wb1.Sheets(rekvName).Range("B4")
vydan = wb1.Sheets(rekvName).Range("B5")
dvyd = wb1.Sheets(rekvName).Range("B6")
adr = wb1.Sheets(rekvName).Range("B7")
emai = wb1.Sheets(rekvName).Range("B8")
tel = wb1.Sheets(rekvName).Range("B9")
pod = wb1.Sheets(rekvName).Range("B10")
obj = wb1.Sheets(rekvName).Range("B11")
dog = wb1.Sheets(rekvName).Range("B12")
ddog = wb1.Sheets(rekvName).Range("B13")
[/vba]
[vba]
Код
.Replace "{ФИО}", fio, xlPart
.Replace "{Паспорт}", pasport, xlPart
.Replace "{Выдан}", vydan, xlPart
.Replace "{Дата выдачи}", dvyd, xlPart
.Replace "{Адрес регистрации}", adr, xlPart
.Replace "{E-mail}", emai, xlPart
.Replace "{Телефон}", tel, xlPart
.Replace "{Подпись}", pod, xlPart
.Replace "{Адрес объекта}", obj, xlPart
.Replace "{Номер договора}", dog, xlPart
.Replace "{Дата договора}", ddog, xlPart
[/vba]
 
Ответить
СообщениеUdik,

Кажется понял, что требуется автору - процедура с параметрами. В неё надо передать изменяемые данные, а их уже обрабатывать внутри.


Нужно один раз задать данные для всех шаблонов и когда будут нужны выдергивать их.
Например, вот эти общие данные из которых нужно часто вставлять в процедуры:
[vba]
Код
fio = wb1.Sheets(rekvName).Range("B3")
pasport = wb1.Sheets(rekvName).Range("B4")
vydan = wb1.Sheets(rekvName).Range("B5")
dvyd = wb1.Sheets(rekvName).Range("B6")
adr = wb1.Sheets(rekvName).Range("B7")
emai = wb1.Sheets(rekvName).Range("B8")
tel = wb1.Sheets(rekvName).Range("B9")
pod = wb1.Sheets(rekvName).Range("B10")
obj = wb1.Sheets(rekvName).Range("B11")
dog = wb1.Sheets(rekvName).Range("B12")
ddog = wb1.Sheets(rekvName).Range("B13")
[/vba]
[vba]
Код
.Replace "{ФИО}", fio, xlPart
.Replace "{Паспорт}", pasport, xlPart
.Replace "{Выдан}", vydan, xlPart
.Replace "{Дата выдачи}", dvyd, xlPart
.Replace "{Адрес регистрации}", adr, xlPart
.Replace "{E-mail}", emai, xlPart
.Replace "{Телефон}", tel, xlPart
.Replace "{Подпись}", pod, xlPart
.Replace "{Адрес объекта}", obj, xlPart
.Replace "{Номер договора}", dog, xlPart
.Replace "{Дата договора}", ddog, xlPart
[/vba]

Автор - den45444
Дата добавления - 22.09.2015 в 12:23
den45444 Дата: Вторник, 22.09.2015, 12:37 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
SLAVICK,

А нельзя например такую строку сделать константой? [vba]
Код
fio = wb1.Sheets(rekvName).Range("B3")
[/vba]

И чтобы в макросе работал этот код автоматический: [vba]
Код
.Replace "{ФИО}", fio, xlPart
[/vba]

И если я захочу изменить данные, то меняю их в константе.

Может как-то неправильно объяснил, но если не понятно, то могу снова написать разъяснения.
 
Ответить
СообщениеSLAVICK,

А нельзя например такую строку сделать константой? [vba]
Код
fio = wb1.Sheets(rekvName).Range("B3")
[/vba]

И чтобы в макросе работал этот код автоматический: [vba]
Код
.Replace "{ФИО}", fio, xlPart
[/vba]

И если я захочу изменить данные, то меняю их в константе.

Может как-то неправильно объяснил, но если не понятно, то могу снова написать разъяснения.

Автор - den45444
Дата добавления - 22.09.2015 в 12:37
KSV Дата: Вторник, 22.09.2015, 13:00 | Сообщение № 13
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
den45444, чем больше "разъяснений" вы пишите, тем больше запутываете!
лучше просто напишите, чем конкретно вас не устраивает такой код? [vba]
Код
Private Const papka As String = "C:\ШАБЛОНЫ"
Private Const rekvName As String = "Реквизиты"

Sub dogovor() 'Создание договора по данным клиента
     CreateDoc "Договор"
End Sub

Sub akt() 'Создание АКТА по данным клиента
     CreateDoc "Акт"
End Sub

Private Sub CreateDoc(FileName As String)
     If Dir(papka, 16) = "" Then MsgBox "Переместите папку <ШАБЛОНЫ> : Компьютер - Локальный диск(C)", vbCritical, "Ошибка": Exit Sub
     Dim wb1 As Workbook, wb2 As Workbook, p$
     Set wb1 = ActiveWorkbook
     p = wb1.Path
     Set wb2 = Workbooks.Open(papka & "\" & FileName & ".xlsx")
      
     With wb1.Sheets(rekvName)
         fio = .Range("B3")
         pasport = .Range("B4")
         vydan = .Range("B5")
         dvyd = .Range("B6")
         adr = .Range("B7")
         emai = .Range("B8")
         tel = .Range("B9")
         pod = .Range("B10")
         obj = .Range("B11")
         dog = .Range("B12")
         ddog = .Range("B13")
     End With
      
     With wb2.Worksheets(1).Cells
         .Replace "{ФИО}", fio, xlPart
         .Replace "{Паспорт}", pasport, xlPart
         .Replace "{Выдан}", vydan, xlPart
         .Replace "{Дата выдачи}", dvyd, xlPart
         .Replace "{Адрес регистрации}", adr, xlPart
         .Replace "{E-mail}", emai, xlPart
         .Replace "{Телефон}", tel, xlPart
         .Replace "{Подпись}", pod, xlPart
         .Replace "{Адрес объекта}", obj, xlPart
         .Replace "{Номер договора}", dog, xlPart
         .Replace "{Дата договора}", ddog, xlPart
     End With
     wb2.SaveAs (p & "\" & FileName & "(" & dog & ").xlsx")
End Sub
[/vba]


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщениеden45444, чем больше "разъяснений" вы пишите, тем больше запутываете!
лучше просто напишите, чем конкретно вас не устраивает такой код? [vba]
Код
Private Const papka As String = "C:\ШАБЛОНЫ"
Private Const rekvName As String = "Реквизиты"

Sub dogovor() 'Создание договора по данным клиента
     CreateDoc "Договор"
End Sub

Sub akt() 'Создание АКТА по данным клиента
     CreateDoc "Акт"
End Sub

Private Sub CreateDoc(FileName As String)
     If Dir(papka, 16) = "" Then MsgBox "Переместите папку <ШАБЛОНЫ> : Компьютер - Локальный диск(C)", vbCritical, "Ошибка": Exit Sub
     Dim wb1 As Workbook, wb2 As Workbook, p$
     Set wb1 = ActiveWorkbook
     p = wb1.Path
     Set wb2 = Workbooks.Open(papka & "\" & FileName & ".xlsx")
      
     With wb1.Sheets(rekvName)
         fio = .Range("B3")
         pasport = .Range("B4")
         vydan = .Range("B5")
         dvyd = .Range("B6")
         adr = .Range("B7")
         emai = .Range("B8")
         tel = .Range("B9")
         pod = .Range("B10")
         obj = .Range("B11")
         dog = .Range("B12")
         ddog = .Range("B13")
     End With
      
     With wb2.Worksheets(1).Cells
         .Replace "{ФИО}", fio, xlPart
         .Replace "{Паспорт}", pasport, xlPart
         .Replace "{Выдан}", vydan, xlPart
         .Replace "{Дата выдачи}", dvyd, xlPart
         .Replace "{Адрес регистрации}", adr, xlPart
         .Replace "{E-mail}", emai, xlPart
         .Replace "{Телефон}", tel, xlPart
         .Replace "{Подпись}", pod, xlPart
         .Replace "{Адрес объекта}", obj, xlPart
         .Replace "{Номер договора}", dog, xlPart
         .Replace "{Дата договора}", ddog, xlPart
     End With
     wb2.SaveAs (p & "\" & FileName & "(" & dog & ").xlsx")
End Sub
[/vba]

Автор - KSV
Дата добавления - 22.09.2015 в 13:00
den45444 Дата: Вторник, 22.09.2015, 17:02 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
лучше просто напишите, чем конкретно вас не устраивает такой код?


Этот код устраивает, но есть но...

Кроме замены текста еще нужно много действий произвести в макросе (открыть еще одну книгу, скопировать с одной книги на другую и т.п.). Соот-но данный код тяжело использовать в моем случае.

Хотя можно данный код разделить по частям и использовать части там где нужно вставить.
 
Ответить
Сообщение
лучше просто напишите, чем конкретно вас не устраивает такой код?


Этот код устраивает, но есть но...

Кроме замены текста еще нужно много действий произвести в макросе (открыть еще одну книгу, скопировать с одной книги на другую и т.п.). Соот-но данный код тяжело использовать в моем случае.

Хотя можно данный код разделить по частям и использовать части там где нужно вставить.

Автор - den45444
Дата добавления - 22.09.2015 в 17:02
den45444 Дата: Вторник, 22.09.2015, 17:07 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
KSV,

А если разделить вот на такие части?

[vba]
Код
Private Sub CreateDoc(FileName As String)
     If Dir(papka, 16) = "" Then MsgBox "Переместите папку <ШАБЛОНЫ> : Компьютер - Локальный диск(C)", vbCritical, "Ошибка": Exit Sub
End Sub
[/vba]
[vba]
Код
Private Sub CreateDoc1(FileName As String)
     fio = wb1.Sheets(rekvName).Range("B3")
End Sub
[/vba]

и т.п.
 
Ответить
СообщениеKSV,

А если разделить вот на такие части?

[vba]
Код
Private Sub CreateDoc(FileName As String)
     If Dir(papka, 16) = "" Then MsgBox "Переместите папку <ШАБЛОНЫ> : Компьютер - Локальный диск(C)", vbCritical, "Ошибка": Exit Sub
End Sub
[/vba]
[vba]
Код
Private Sub CreateDoc1(FileName As String)
     fio = wb1.Sheets(rekvName).Range("B3")
End Sub
[/vba]

и т.п.

Автор - den45444
Дата добавления - 22.09.2015 в 17:07
KSV Дата: Вторник, 22.09.2015, 19:15 | Сообщение № 16
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
и что вам дадут эти "части"?
я вам переделал потому, что обе ваши процедуры полностью дублировали друг друга, а чего вы хотите добиться такой разбивкой на части?

[p.s.]если я правильно понял, то вы хотите один раз считать в переменные все сведения о клиенте, а потом в нескольких процедурах использовать эти переменные?
тогда можно так:

один раз (в первой запущенной процедуре) вызываете GetData, а потом в других своих процедурах просто считываете все сведения из переменных[/p.s.]


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333


Сообщение отредактировал KSV - Вторник, 22.09.2015, 19:38
 
Ответить
Сообщениеи что вам дадут эти "части"?
я вам переделал потому, что обе ваши процедуры полностью дублировали друг друга, а чего вы хотите добиться такой разбивкой на части?

[p.s.]если я правильно понял, то вы хотите один раз считать в переменные все сведения о клиенте, а потом в нескольких процедурах использовать эти переменные?
тогда можно так:

один раз (в первой запущенной процедуре) вызываете GetData, а потом в других своих процедурах просто считываете все сведения из переменных[/p.s.]

Автор - KSV
Дата добавления - 22.09.2015 в 19:15
den45444 Дата: Среда, 23.09.2015, 11:20 | Сообщение № 17
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
KSV, Благодарю за вашу помощь. Попробую разобраться.
А как указать один раз для всех макросов данного модуля вот этот код:?[vba]
Код
If Dir(papka, 16) = "" Then MsgBox "Переместите папку <ШАБЛОНЫ> : Компьютер - Локальный диск(C)", vbCritical, "Ошибка": Exit Sub
[/vba]
 
Ответить
СообщениеKSV, Благодарю за вашу помощь. Попробую разобраться.
А как указать один раз для всех макросов данного модуля вот этот код:?[vba]
Код
If Dir(papka, 16) = "" Then MsgBox "Переместите папку <ШАБЛОНЫ> : Компьютер - Локальный диск(C)", vbCritical, "Ошибка": Exit Sub
[/vba]

Автор - den45444
Дата добавления - 23.09.2015 в 11:20
SLAVICK Дата: Среда, 23.09.2015, 13:45 | Сообщение № 18
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
А как указать один раз для всех макросов данного модуля вот этот код:?

Это проверка существования papka если в других процедурах она также нужна - просто добавьте эту строку в другие процедуры, но, насколько я понимаю, она там и не нужна.


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
А как указать один раз для всех макросов данного модуля вот этот код:?

Это проверка существования papka если в других процедурах она также нужна - просто добавьте эту строку в другие процедуры, но, насколько я понимаю, она там и не нужна.

Автор - SLAVICK
Дата добавления - 23.09.2015 в 13:45
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Общие переменные для замены текста в шаблонах (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!