Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
18 / 18 / 2
Регистрация: 12.02.2013
Сообщений: 387
1

Теоретический аспект UserForm

01.04.2016, 10:08. Показов 664. Ответов 13
Метки нет (Все метки)

Добрый день,товарищи!
Я планирую создать макрос, и перед тем как начну, хотелось бы услышать от вам советы как лучше это сделать, что бы не тратить уйма времени зря.

есть файл с разным текстом в разных позициях.
пример.
1.продукция
2. Изготовитель:
адрес и т.д.
(Конечно хотелось бы автоматизировать перенос, но видимо это некст левел)
В общем, хотелось бы создать userform с полями для ввода, в которые оператор в ручную копировал бы и вставлял текст.
поле1 "продукция"
поле2 "Изготовитель"
и т.д.
Смысл всего в том, что бы когда все поля были заполнены, по кнопке формировался новый txt док, в котором были бы соединены все поля в нужном порядке.
пример:

!поле1!поле2!поле3! и т.д.
!поле8!...
!поле19
( я понимаю легче формировать ворд файл, а потом его просто сохранить в txt, это тоже умею )
Где !это разделитель, который нужно будет вставить в каждое поле. То есть выход в txt должен быть "!" & "inputText"
Так же хотелось бы отметить, что надо что в некоторые поля, хотелось бы вписать некоторые макросы(или функции)

Пример.
Переносим в поле2 код.
Копируемый текст 99-09920-.12, вставляем в поле 2 в нашей форме, текст который получим в txt= !990992012

Ну макрос на удаление у меня есть, просто можно ли будет как то прописать в конкретное поле как функцию постоянной обработки?( макрос у меня на поиск и удаление [!0-9])

Если у кого то есть подобная форма для примера, был бы очень благодарен! Вставил бы свои поля. Если у кого есть какие мысли как лучше это можно было бы реализовать, тоже буду благодарен!! Рад любым мыслям.
П.С. Работаем в word 2010

Добавлено через 17 часов 45 минут
Господа, горячо прошу помощи. Может даже объяснять не надо ничего, если есть пример с формой хотя бы с 1 полем!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2016, 10:08
Ответы с готовыми решениями:

Психологический аспект изучения
Всем привет! Недавно начал изучать JAVA, это первый язык, который я изучаю. До этого был далек от...

Практический аспект задачи
Помогите отразить практический аспект задачи: var a,b:array of real; c:array of real; ...

Как автовайрить в аспект
Написал аспект, который должен проверять x-auth-token. Суть проверки сводится к тому, что нужно...

Аспект изображения для растяжения
Как указать высоту Image, чтобы он максимально растягивался? Сейчас стоит Height="544", но на...

13
11200 / 3571 / 636
Регистрация: 13.02.2009
Сообщений: 10,673
01.04.2016, 22:28 2
я понимаю легче формировать ворд файл
Абсолютное заблуждение! txt формировать значительно проще!

Добавлено через 2 минуты
Может даже объяснять не надо ничего, если есть пример с формой хотя бы с 1 полем!!
Наоборот! Вам надо объяснить что вы хотите сделать! А не искать готовую форму с готовым макросом!

Добавлено через 2 минуты
есть файл с разным текстом в разных позициях.
Он есть у вас!
Хотите помощи - исходный файл в студию!
И, однозначно, файл-желаемый результат тоже в студию!
0
18 / 18 / 2
Регистрация: 12.02.2013
Сообщений: 387
01.04.2016, 23:41  [ТС] 3
Я уже начал штудировать мануалы по UserForm.... Впереди выходные Но много букффф для гуманитарного мозга)
В описании тоже написал много...Надеюсь вы будете снисходительны ко мне))

Немного повторю что в файле написано.... Объем работы сильно недооценен из-за не вполне реального восприятия мной процедур ее выполнения. По этому мне нужно понять принцип работы. ДЛя начала делаю форму для ручного копирования и заполнения формы из любой заявки. А автоматизировать заполнение, я думаю это уже совершенно другая тема и ничего сложного в ней не будет.... Обычно я это делаю через поиск копирование и перенос, а тут видимо будет так же только не перенос, а отправить в листбокс1. По этому нужно то что в приложении... Заранее больше Спасибо! и простите за мой язык.

В приложении пример заявки, пример формы с 5 листбоксами и описание какие варианты обработки текста могут быть нужны, и как нужно сформировать итоговый лист. ( и конечно в тхт, а не ворд)
Alex77755,
0
Вложения
Тип файла: zip для сайта.zip (36.6 Кб, 7 просмотров)
11200 / 3571 / 636
Регистрация: 13.02.2009
Сообщений: 10,673
02.04.2016, 00:01 4
Мельком глянув на файлы я попробую перефразировать вопрос ТС:
1. Имеется шаблон документа ворд
2. Его надо заполнить из формы
3. Данные о каждом заявлении сохранить в текстовом файле (зачем пока не понял, но вариантов много)
Возможно при вводе, допустим, номера заявки остальные поля, если такая заявка есть, заполнялись автоматически
Не?
0
18 / 18 / 2
Регистрация: 12.02.2013
Сообщений: 387
02.04.2016, 00:18  [ТС] 5
Alex77755,

1. Приходит заказчик и может подать заявку в любом виде. Где продукция будет указана в жопе листа и капсом, а изготовитель в начале. Нам надо собрать эти данные в форму( в нашем случае в ручную копировать и перенести в userform) и обработать и вывести в txt файл.
Что бы потом используя imacros подгрузить на веб страницу.

А сейчас приходится копировать каждую позицую и переносить на сайт, это затратнее и дольше( даже из за того, что элементы на сайте находятся в разных местах и подргужаются, чем запустить макрос и что бы он выносил сам....). Я уже написал макрос для переноса на сайт и нашел все нужные элементы.Осталось создать txt or csv( с созданым в ручную уже все работает) файл с разделителем что бы можно было вынуть это инфу в 1 клик.
Пока забудьте про автоматический перенос в форму... Давайте остановимся на ручном копировании. Потому что заявка может иметь вообще случайный характер, где логически нельзя будет прописать, где макросу искать продукцию, а где адрес. Нужно придумать универсальный механиз формирования txt or csv файла, и показать мне как обрабатывать входящий текст)))

Добавлено через 6 минут
Alex77755, а ту форму что вы видели, это уже готовая заявка которую формирует сайт куда мы предварительно собрали данные) Это уже другая история
0
11200 / 3571 / 636
Регистрация: 13.02.2009
Сообщений: 10,673
02.04.2016, 00:58 6
и может подать заявку в любом виде
Потому что заявка может иметь вообще случайный характер, где логически нельзя будет прописать, где макросу искать продукцию, а где адрес
УУУ! как всё запущено!
Я ещё в дошкольном возрасте(лет 50 назад) знал, что есть определённые формы (форматы) документов. И заявок в том числе! А теперь, оказывается, достаточно сказать "Две тiх, четыре цiх и один той!" (И это не придумано! Это говорил на украинском языке бригадир проходческой бригады!)
в нашем случае в ручную копировать и перенести в userform
Давайте остановимся на ручном копировании
Ок! Ctrl+C
Нужно придумать универсальный механиз формирования txt or csv файла
Да тут и думать нечего! Всё давно придумано: типа
open путь for output as 1
0
18 / 18 / 2
Регистрация: 12.02.2013
Сообщений: 387
02.04.2016, 01:10  [ТС] 7
Alex77755, Если бы мне не нужно было бы думать, меня бы тут не было)) пожалуйста, можете привести пример.
То что ctr+c это понятно, я изначально из этого изходил. просьба была в примере заполнения текст бокса и обработки этого текста.

П.с. к сожалению, не все заказчики имеют этику заполнения формы заявления.

Добавлено через 4 минуты
Alex77755, http://freebasic.justforum.net/t40-topic нашел разжеванное, буду осмысливать Но спасибо большое что вообще откликнулись)) а то тишина была)
0
11200 / 3571 / 636
Регистрация: 13.02.2009
Сообщений: 10,673
02.04.2016, 01:21 8
Смысл всего в том, что бы когда все поля были заполнены, по кнопке формировался новый txt док, в котором были бы соединены все поля в нужном порядке.
Это делается элементарно с помощью &
Копируемый текст 99-09920-.12, вставляем в поле 2 в нашей форме, текст который получим в txt= !990992012
Replace справится с удалением "-" и точек!

Добавлено через 6 минут
соединены все поля в нужном порядке.
Примитивно без переформатирования так:
Visual Basic
1
2
3
4
Open "c:\test.txt" For Output As 1
    s = TextBox1 & "!" & TextBox2 & "!" & TextBox3 & "!" & TextBox4
    Print #1, s
Close
0
18 / 18 / 2
Регистрация: 12.02.2013
Сообщений: 387
02.04.2016, 01:26  [ТС] 9
Alex77755, Ну в принципе я так и написал в файле, что так и хотел бы.И что форматирование я тоже делаю через replace))

я лишь прошу написать 1 текст бокс!!))) Блин, может поздно уже .... что мне нужно прописать в текст боксах или в кнопке ок, что бы собрать все данные и перенести ?


допустим внес я текст в текст бокс.

в финальной кнопке я пишу MsgBox TextBox1 & TextBox2 ( на самом деле переношу текст в тхт).... В каком месте мне нужно вставить replace что бы отформатировать текст в текст бокс 1? на какой event? ставить как функцию?
0
11200 / 3571 / 636
Регистрация: 13.02.2009
Сообщений: 10,673
02.04.2016, 01:37 10
Visual Basic
1
2
3
4
5
Копируемый_текст = "99-09920-.12,"
t = Replace(Копируемый_текст, "-", "") ' удаляем -
t = Replace(t, ".", "") ' удаляем точку
t = Replace(t, ",", "") ' удаляем запятую
MsgBox t
Добавлено через 2 минуты
В каком месте мне нужно вставить
Ну если вы вставляете копипастом, то можно просто сделать кнопку типа "Привести к нужному виду"

Добавлено через 5 минут
типа:
Visual Basic
1
2
3
4
5
6
7
Private Sub Привести_к_нужному_виду()
    Копируемый_текст = TextBox1.Text
    t = Replace(Копируемый_текст, "-", "") ' удаляем -
    t = Replace(t, ".", "") ' удаляем точку
    t = Replace(t, ",", "") ' удаляем запятую
    TextBox1.Text = t
End Sub
0
18 / 18 / 2
Регистрация: 12.02.2013
Сообщений: 387
02.04.2016, 17:39  [ТС] 11
Alex77755, просидел часа 2, так и не придумал, как все же можно выделить и обработать через selection текст из бокса....


П.с. что бы автоматизировать форматирование, можно поставить на выход.
Visual Basic
1
2
3
4
5
6
7
8
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Копируемый_текст = TextBox1.Text
    t = Replace(Копируемый_текст, "-", "") ' удаляем -
    t = Replace(t, ".", "") ' удаляем точку
    t = Replace(t, ",", "") ' удаляем запятую
    TextBox1.Text = t
 
End Sub
Добавлено через 13 часов 22 минуты
Alex77755, Не уверен как в будущем это мне аукнется в плане затратности ресурсов, пока решаю так проблему.... ( пытался через open послать в доки docxm, файл рушится... я так понял этим методом можно только тхт и док юзать...а если можно было бы в docm можно было бы там просто на прием написать макрос и не прописывать в форме.) А этим методом можем любые привычные манипуляции производить, включая замену с подстановочными знаками.

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
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
SetClipboardText TextBox1.Text
 
Documents.Open FileName:="1234.docm", ConfirmConversions:=False, ReadOnly _
        :=False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate _
        :="", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="" _
        , Format:=wdOpenFormatAuto, XMLTransform:=""
    Selection.TypeText Text:=ClipboardText
    Selection.WholeStory
        Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "[!0-9]"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.WholeStory
    Selection.Copy
    ActiveWindow.Close 0
    Open "C:\Users\Стас\Desktop\1234.txt" For Output As 1
    s = ClipboardText
    Print #1, s
    
    Close
End Sub
Добавлено через 1 час 4 минуты
заменил exit на AfterUpdate(), и добавил еще две интересные функции.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub telefon_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If telefon.Text = "" Then
telefon.Text = "Введите номер телефона"
telefon.ForeColor = &HFF&
End If
End Sub
 
Private Sub telefon_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If telefon.Text = "Введите номер телефона" Then
telefon.Text = ""
telefon.ForeColor = Black
End If
End Sub

Изначально стоит фраза Введите номер телефона красным цветом, когда оператор нажимает в окно фраза удаляется, когда выходит из окна и в окне ничего не не написано, возвращается "Введите номер телефона"
0
1686 / 1182 / 567
Регистрация: 23.03.2015
Сообщений: 3,884
02.04.2016, 17:41 12
ctac1412,

А почему бы сразу форму в виде заявки не сделать?
0
18 / 18 / 2
Регистрация: 12.02.2013
Сообщений: 387
02.04.2016, 17:59  [ТС] 13
Очень интересную штуку нашел!!! если мы хотим, что бы текст в веденном текстбоксе изменился визуально на тот, что запишем потом в тхт, то нужно прописать вот так

Visual Basic
1
2
3
4
5
Selection.Find.Execute Replace:=wdReplaceAll
    Selection.WholeStory
    Selection.Copy
    ActiveWindow.Close 0
    Fax = ClipboardText

гду fax это имя текст бокса. В таком случае, можно полностью отказаться от переменных на вывод, ведь у нас в боксах и так текст который нам нужен и обращаться легче, потому что нет лишних имен и лишних переменных.

Private Sub CommandButton2_Click()
Open "C:\Users\Стас\Desktop\1234.txt" For Output As 1
Print #1, telefon.Text
Print #1, Fax.Text
Close
End Sub

Добавлено через 2 минуты
Narimanych, зачем делать форму в виде заявки?) я писал выше, что заявки приходят в разных формах... из которых оператор, должен изъять нужную инфу и перенести в браузер(реестр), а там уже формируется заявка для общего доступа.
0
18 / 18 / 2
Регистрация: 12.02.2013
Сообщений: 387
05.04.2016, 13:38  [ТС] 14
Alex77755, на третий день родов, родил...нашел способ удалять в переменной, не вынося на документ текст( без selection)... но не могу разобраться с синтаксисом, может ты знаешь?


Как с помощью VBScript.Regexp удалить все совпаденя??? перебирал разные варианты, зная что в js. есть \g, но тут нет такого.... читаю описание и все равно не могу понять...... Нужно удалить все кроме 0-9 и +.

У меня удаляет только первое совпадение.

Исходная строка= "qq 12345 qwe67 \ 89"
Set regex = CreateObject("VBScript.Regexp")
regex.Pattern = "\w"
измененная строка= regex.Replace(Исходная строка, "A")
MsgBox измененная строка

Добавлено через 3 минуты
вот есть синтаксис такой

Character Description
\ Marks the next character as either a special character or a literal. For example, "n" matches the character "n". "\n" matches a newline character. The sequence "" matches "" and "\(" matches "(".
^ Matches the beginning of input.
$ Matches the end of input.
* Matches the preceding character zero or more times. For example, "zo*" matches either "z" or "zoo".
+ Matches the preceding character one or more times. For example, "zo+" matches "zoo" but not "z".
? Matches the preceding character zero or one time. For example, "a?ve?" matches the "ve" in "never".
. Matches any single character except a newline character.
(pattern) Matches pattern and remembers the match. The matched substring can be retrieved from the resulting Matches collection, using Item [0]...[n]. To match parentheses characters ( ), use "\(" or "\)".
x|y Matches either x or y. For example, "z|wood" matches "z" or "wood". "(z|w)oo" matches "zoo" or "wood".
{n} n is a nonnegative integer. Matches exactly n times. For example, "o{2}" does not match the "o" in "Bob," but matches the first two o's in "foooood".
{n,} n is a nonnegative integer. Matches at least n times. For example, "o{2,}" does not match the "o" in "Bob" and matches all the o's in "foooood." "o{1,}" is equivalent to "o+". "o{0,}" is equivalent to "o*".
{n,m} m and n are nonnegative integers. Matches at least n and at most m times. For example, "o{1,3}" matches the first three o's in "fooooood." "o{0,1}" is equivalent to "o?".
[xyz] A character set. Matches any one of the enclosed characters. For example, "[abc]" matches the "a" in "plain".
[^xyz] A negative character set. Matches any character not enclosed. For example, "[^abc]" matches the "p" in "plain".
[a-z] A range of characters. Matches any character in the specified range. For example, "[a-z]" matches any lowercase alphabetic character in the range "a" through "z".
[^m-z] A negative range characters. Matches any character not in the specified range. For example, "[m-z]" matches any character not in the range "m" through "z".
\b Matches a word boundary, that is, the position between a word and a space. For example, "er\b" matches the "er" in "never" but not the "er" in "verb".
\B Matches a non-word boundary. "ea*r\B" matches the "ear" in "never early".
\d Matches a digit character. Equivalent to [0-9].
\D Matches a non-digit character. Equivalent to [^0-9].
\f Matches a form-feed character.
\n Matches a newline character.
\r Matches a carriage return character.
\s Matches any white space including space, tab, form-feed, etc. Equivalent to "[ \f\n\r\t\v]".
\S Matches any nonwhite space character. Equivalent to "[^ \f\n\r\t\v]".
\t Matches a tab character.
\v Matches a vertical tab character.
\w Matches any word character including underscore. Equivalent to "[A-Za-z0-9_]".
\W Matches any non-word character. Equivalent to "[^A-Za-z0-9_]".
\num Matches num, where num is a positive integer. A reference back to remembered matches. For example, "(.)\1" matches two consecutive identical characters.
\n Matches n, where n is an octal escape value. Octal escape values must be 1, 2, or 3 digits long. For example, "\11" and "\011" both match a tab character. "\0011" is the equivalent of "\001" & "1". Octal escape values must not exceed 256. If they do, only the first two digits comprise the expression. Allows ASCII codes to be used in regular expressions.
\xn Matches n, where n is a hexadecimal escape value. Hexadecimal escape values must be exactly two digits long. For example, "\x41" matches "A". "\x041" is equivalent to "\x04" & "1". Allows ASCII codes to be used in regular expressions.

Добавлено через 24 минуты
Alex77755, нашел ответ написанный вами, на форуме...))
regex.Global = 1

Добавлено через 8 минут
Alex77755, Вот собственно чего я хотел все это время.


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
Private Sub OGRNf()
If OGRN.Text = "ОГРН" Then
Else
 
ÈñõîäíàÿÑòðîêà = OGRN.Text
Set regex = CreateObject("VBScript.Regexp")
regex.Pattern = "[^0-9]"
regex.Global = 1
OGRN.Text = regex.Replace(ÈñõîäíàÿÑòðîêà, "")
x = OGRN.Text
i = 11
y = Len(x)
If y < i Then
 Do Until y = 11
 x = x + "?"
 y = y + 1
 Loop
End If
OGRN = x
End If
 
 
End Sub
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2016, 13:38

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Философский аспект парадоксов Зенона
Частенько я задаюсь вопросами интерпретации времени и движения , агрегируя различные сведения из...

Не понимаю один аспект отладчика
У меня в цикле для обработки массива кнопок jbutton, я прописал такой код public void...

Алгоритмизация - как главный аспект программирования
Алгоритм, это базовое понятие для начинающих программистов, которые начинают свои шаги в любом...

[Spring AOP] Написать аспект на println()
Необходимо написать аспект, который бы перед каждым sout в программе делал еще один sout с каким-то...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.