VBA и WORD

Программирование на Visual Basic for Applications
baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 08.09.2005 (Чт) 11:28

Код: Выделить всё

Private Sub UserForm_Initialize()
TextBox1.MultiLine = True
End Sub


При вводе текста, он переходит на следующую, когда достигается правая сторона TextBox, а не при нажатие enter.
и получается прога его видит как одну строку,а не как разные строки, а мне надо чтоб были имеено разные строки, т.к я их потом буду сравнивать с другим тестом но уже в коде

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 08.09.2005 (Чт) 11:38

baranich писал(а):
Код: Выделить всё
При вводе текста, он переходит на следующую, когда достигается правая сторона TextBox, а не при нажатие enter.
и получается  прога его видит как одну строку,а не как разные строки, а мне надо чтоб были имеено разные строки, т.к я их потом буду сравнивать с другим тестом но уже в коде

Тогда так:
[syntax="vb"]Private Sub UserForm_Initialize()
TextBox1.MultiLine = True
TextBox1.EnterKeyBehavior = True
End Sub
Life is what happens to us when we are planning to do something else...

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 08.09.2005 (Чт) 12:18

то что я искала, спасибо

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 08.09.2005 (Чт) 12:31

а как теперь обращаться к тексту из программы(с помощью кода)
т.к если так

Dim q As String
q = TextBox1.Text

то если я ввожу
текст1
текст2
то q присваевается "текст1 текст2"
а надо только текст1, а текст2 другой переменной
Что делать?

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 08.09.2005 (Чт) 13:56

1) InStr - функция, которая найдет определенную строку в другой строке

2) Mid - фукция, которая вернет подстроку из строки

3) vbCrLf - константа VB новой строки. Найдя ее в текстбоксе ты сможешь понять, что пошла следующая строка.

А теперь включаем логику + используем справку.
Life is what happens to us when we are planning to do something else...

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 12.09.2005 (Пн) 9:18

Код: Выделить всё

Sub FillFields()
Dim MyText As String
MyText = GetMyText("c:\TextFile.txt") 'Измени имя файла на свое.
If ActiveDocument.FormFields.Count > 0 Then
   For Each mf In ActiveDocument.FormFields
       If mf.Type = wdFieldFormTextInput Then
          For i = 47 to 57
               if mf.Name = "TextBox" & i then mf.Result = MyText
          Next i
       End if
   Next mf
End If
End Sub


Уважаемый K.Sergey, пыталась понять этот код, но оказалось не всё так просто. Если можно описать подробнее ваши действия, так как я этот код буду переделовать под свою программу.
У меня из формы при нажатие на конопку выполняется код выбора файла, открытие его и считывается сначало первая строка, которая записывается в textboxы с номерами 47 и 57. Поэтому буду рада людым пояснениям

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 12.09.2005 (Пн) 12:28

Код: Выделить всё

For ii = 70 To 92
For aa = FirstOfNextMonth To EndOfNextMonth
   Деньнедели = Weekday(aa)
        If Деньнедели = 7 Then
        Поле(ii) = FirstOfNextMonth + ii - 68
        Exit For
        ElseIf Деньнедели = 1 Then
        Поле(ii) = FirstOfNextMonth + ii - 69
        Exit For
        Else
       Поле(ii) = FirstOfNextMonth + ii - 70
        Exit For
        End If
Next aa
Next ii

Мне надо удалить выходные, но где то в коде происходит сбой, так как удаляются только первые выходные месяца, а остальные остаются, помогите разобраться.

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 12.09.2005 (Пн) 20:55

baranich писал(а):Уважаемый K.Sergey, пыталась понять этот код, но оказалось не всё так просто. Если можно описать подробнее ваши действия, так как я этот код буду переделовать под свою программу.


Код: Выделить всё
Sub FillFields()
'Объявляем переменную, которая будет содержать текст ВСЕГО файла (а не строки):
Dim MyText As String
'Присваиваем с помощью функции GetMyText (которую мы сами написали) нашей строковой переменной текст файла:
MyText = GetMyText("c:\TextFile.txt")
'Проверяем, есть ли хоть один текстбокс в документе (на всякий случай, чтобы ошибки не выскакивало):
If ActiveDocument.FormFields.Count > 0 Then
'Следующим циклом мы перебираем ВСЕ элементы управления в документе. mf - это переменная. Ее лучше было в начале процедуры объявить в явном виде (Dim mf As FormField)
   For Each mf In ActiveDocument.FormFields
'Предыдущим циклом мы обходим все элементы управления. Теперь нам надо узнать является ли конкретный элемент управления текстовым полем:
       If mf.Type = wdFieldFormTextInput Then
'Теперь мы уверены, что сейчас mf'у присвоен именно текстбокс. Но нам нужны определенные тестбоксы, а именно с именами от TextBox47 до TextBox57. Соответственно, мы сверяем имя со строкой "TextBox" & i. В случае, если имя совпадет, мы заносим в него значение нашей переменной MyText, которая содержит текст из нашего файла.
          For i = 47 to 57
               if mf.Name = "TextBox" & i then mf.Result = MyText
          Next i
       End if
   Next mf
End If
End Sub


Уфф! Неужели закончил...

Давно хотел спросить: что означает ник baranich? Уж очень интригует...
Life is what happens to us when we are planning to do something else...

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 12.09.2005 (Пн) 21:04

baranich писал(а):У меня из формы при нажатие на конопку выполняется код выбора файла, открытие его и считывается сначало первая строка, которая записывается в textboxы с номерами 47 и 57. Поэтому буду рада людым пояснениям

Это у тебя так в данный момент работает приложение или этого тебе надо добиться?
Если уже работает, то в чем состоит вопрос?
Если же тебе этого нужно добиться, то в функции GetMyText() вместо GetMyText = f.ReadAll напиши GetMyText = f.ReadLine. Тогда считается строка (если еще раз присвоить GetMyText = f.ReadLine, то считается следующая строка и т.д.)
Life is what happens to us when we are planning to do something else...

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 12.09.2005 (Пн) 21:39

baranich писал(а):Мне надо удалить выходные, но где то в коде происходит сбой, так как удаляются только первые выходные месяца, а остальные остаются, помогите разобраться.


Трудно понять логику. Но из кода видно, что ты ходешь пройтись по всем дням в месяце с помощью цикла For aa = FirstOfNextMonth To EndOfNextMonth, однако при любом аа, ты на первый же день принудительно выходишь из цикла.

А вообще советую в том месте кода, где ты сомневаешься, установить курсор и нажать F9. Строка выделится красным. Во время же выполнения кода, программа остановится на такой строке и позволит тебе увидеть значения интересующих переменных (подведи к ним курсор мыши). Далее, нажимая F8, ты сможешь пошагово исполнять код и контролировать значения.
Life is what happens to us when we are planning to do something else...

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 13.09.2005 (Вт) 8:24

Documents.Open FileName:="шаблон.doc", ConfirmConversions:=False, ReadOnly _
:=False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate _
:="", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="" _
, Format:=wdOpenFormatAuto, XMLTransform:=""
Selection.WholeStory
Selection.Copy
Documents("шаблон.doc").Close SaveChange
Selection.TypeBackspace
Selection.TypeBackspace
Selection.TypeBackspace
Selecion.PasteAndFormat (wdPasteDefault)



Данный код работает когда запускается документ файл1, смысл в том что при открытие документа файл1, открывается шаблон, выделяется и копируется все его содержание и должно быть вставлено в документ файл1, но операция Selecion.PasteAndFormat (wdPasteDefault) вызывает ошибку Object required. Почему или может просто сделать как отдельный макрос и вызывать его при открытие файла?

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 13.09.2005 (Вт) 9:35

А вот ещё вопрос




Код: Выделить всё

Private Sub CommandButton1_Click()
опреции
операции
vizov
end sub

При нажатие кнопки, у меня сначало выполняется процедура vizov, а не операции, почему?

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 13.09.2005 (Вт) 12:16

baranich писал(а):
Код: Выделить всё
Private Sub CommandButton1_Click()
опреции
операции
vizov
end sub

При нажатие кнопки, у меня сначало выполняется процедура vizov, а не операции, почему?

Такого не бывает. VBA выполняет код последовательно. Уверена в том, что перед "vizov" не встречается "On Error.....", "GoTo....", "Select Case..." или "If...". Если да - то проанализируй.
Если не нейдешь ошибку - кидай код - посмотрим...
Life is what happens to us when we are planning to do something else...

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 13.09.2005 (Вт) 12:37

baranich писал(а):операция Selecion.PasteAndFormat (wdPasteDefault) вызывает ошибку Object required

Потому, что опечатка в коде: нужно не Selecion, а Selection
Life is what happens to us when we are planning to do something else...

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 13.09.2005 (Вт) 12:41

baranich, так что же, все-таки означает твой ник? :scratch:
Life is what happens to us when we are planning to do something else...

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 13.09.2005 (Вт) 12:45

Не надо нервничать, всё нормально, я уже во всем разобралась, будут проблемы обязательно обращюсь

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 14.09.2005 (Ср) 9:39

У меня проблема при копирование текста одного документа в другой, мне надо с помощью кода поднять курсив на несколько строк. Как это сделать?

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 16.09.2005 (Пт) 9:44

Вопросик, есть такой, в Comboboxе есть список, периодически выбирается сначало одно число из Comboboxа, потом ещё одно, и надо чтоб эти числа сохранялись в массиве, как это сделать?

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 19.09.2005 (Пн) 9:28

Такой вопросик,
Вопросик, есть такой, в Comboboxе есть список, периодически выбирается сначало одно число из Comboboxа, потом ещё одно, и надо чтоб эти числа сохранялись в массиве, как это сделать?
сделала так массив()=CInt(combobox1.text),
а куда поместить данную операцию, в тело кнопки не получиться, там тогда всем элементам массива будет присваиваться одно и тоже значение, в тело combobox'а или куда?

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 19.09.2005 (Пн) 11:08

Другой вопрос: есть

ThisDocument.TextBox1.Text=FirstOfNextMonth

т.е TextBox получает дату в виде 10.01.05, а мне надо чтобы месяц был написан, т.е не 01, а январь

Пред.

Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 42

    TopList