Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2 3 4  Все   Вниз
  Печать  
Автор Тема: VBA и WORD  (Прочитано 98999 раз)
0 Пользователей и 1 Гость смотрят эту тему.
baranich
Постоялец

ru
Offline Offline

« : 06-09-2005 11:46 » 

Такая проблема, у меня есть txt-файл и word-документ, на котором есть 50 textboxов, надо чтоб из файла первая строка перессылалась в 15 textboxов, например с номерами от 10-25, вся проблема в том что в wordе нет массивов.
Записан
baranich
Постоялец

ru
Offline Offline

« Ответ #1 : 07-09-2005 05:43 » 

Вот ещё вопросик,
есть папка, в которой лежит еще несколько папок и txt-файл, в котором будут прописаны названия этих папок, можно ли сделать так чтоб на VBA прописать код с помощью которого читался бы этот txt-файл и прочитав первую строку с названием папки направлялся бы в неё и читал её содержимое(в этой папке тоже будет справочный файл, но уже с названиями word-документов)
Записан
Alf
Гость
« Ответ #2 : 07-09-2005 06:24 » 

Конечно, можно. Подключи COM-объект Microsoft Scripting Runtime, в нем есть объекты TextStream (с его помощью прочитаешь текстовый файл), а также FileSystemObject, File, Folder и т.п. для работы с файлами и директориями. Пожалуй, для данной задачи этого достаточно.

See MSDN for details.
Записан
baranich
Постоялец

ru
Offline Offline

« Ответ #3 : 07-09-2005 09:19 » 

Спасибо за совет.
Записан
baranich
Постоялец

ru
Offline Offline

« Ответ #4 : 08-09-2005 05:40 » 

Вопросик на засыпку, почему у меня Listbox на форме не дает вписывать информацию при загрузке формы, т.е открыли форму и я хочу вписать информацию, разве нельзя?Не понялНе понял
Записан
Alf
Гость
« Ответ #5 : 08-09-2005 06:28 » 

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

ru
Offline Offline

« Ответ #6 : 08-09-2005 07:23 » 

Кода нет, я не хочу чтобы при инициллизации формы в ListBoxе появлялся список, а надо чтобы  форма загрузилась и я кликаю мышкой и хочу внести сама туда данные, а у меня не получается. Почему? может надо копаться в свойствах  ListBox?
Записан
Alf
Гость
« Ответ #7 : 08-09-2005 07:46 » 

Насколько я знаком с ListBox'ом, копаться в его свойствах бесполезно - данный элемент управления позволяет вручную только выбирать из списка, сам список заполняется программно.

Если нужно, чтобы пользователь помимо выбора мог и сам вводить значения, нужно воспользоваться элементом управления ComboBox. В одном из режимов отображения он очень похож на ListBox, однако имеет свойство Locked; оно разрешает либо запрещает пользовательский ввод.
« Последнее редактирование: 20-12-2007 16:46 от Алексей1153++ » Записан
baranich
Постоялец

ru
Offline Offline

« Ответ #8 : 08-09-2005 08:02 » 

А в ComboBox можно вводить списком, я ввела одну строку, а на вторую он не переходит,  это можно сделать и кстати можно такое же сделать с textbox?
Записан
Alf
Гость
« Ответ #9 : 08-09-2005 08:35 » 

По пунктам:

1.
А в ComboBox можно вводить списком, я ввела одну строку, а на вторую он не переходит, это можно сделать

Нет, списком вводить нельзя. Нужно добавлять элементы в список по одному методом AddItem.

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

2.
и кстати можно такое же сделать с textbox?

"Такое же" - это вводить несколько строк в одном окне?

Вполне. Для этого необходимо установить свойство MultiLine в True. Для удобства имеет смысл также установить свойство ScrollBars, чтобы не искать потом убежавший за пределы окошка текст.
Записан
baranich
Постоялец

ru
Offline Offline

« Ответ #10 : 08-09-2005 09:15 » 

текст1
текст2
т.е я ввожу текст1 и у меня конец textbox  и следующая текст переходит на другую строку.
 Вопрос:
 введеный текст будет читаться как одна строка или как две строки?
Записан
baranich
Постоялец

ru
Offline Offline

« Ответ #11 : 08-09-2005 09:34 » 

Private Sub UserForm_Initialize()
TextBox1.MultiLine = True
TextBox1.EnterKeyBehavior = True
End Sub
теперь вводиться нормально, но если я присваевую переменной

Dim q As String
q = TextBox1.Text

и если я ввожу
текст1
текст2
то q присваевается "текст1 текст2"
а надо только текст1, а текст2 другой переменной
Что делать?
Записан
Alf
Гость
« Ответ #12 : 08-09-2005 10:00 » 

Независимо от того, сколько строк отображается в окне TextBox, для программы это - одна строка (String). Экранные строки в ней разделены символами возврата каретки (десятичный код 13) и перевода строки (код 10). Если нужно выделить экранные строки, придется добавить немного кода. Совсем чуть-чуть. Например, так:

Код:
Private Sub Command1_Click()
Dim I As Integer
Dim S As String
    S = Text1.Text
    While (Len(S) > 0)
        I = InStr(S, vbCrLf)
        If (I = 0) Then I = Len(S) + 1
        Debug.Print Left(S, I - 1)
        S = Mid(S, I + 2)
    Wend
End Sub

Данная процедура выводит каждую из строчек на отладочную печать. Думаю, переделать ее по своему вкусу не составит труда.
Записан
baranich
Постоялец

ru
Offline Offline

« Ответ #13 : 12-09-2005 06:32 » 

Такая проблема:
 У меня в форме при нажатие кнопки, происходит выбор тестового файла, открытие его и чтение. Дальше надо чтоб textboxы, которые находяться на документе заполнялись первой строкой, но не все, а с номера 47-57. Как это сделать подскажите?
Записан
Alf
Гость
« Ответ #14 : 12-09-2005 06:34 » 

А в чем проблема-то? Вытащить первую строку или заполнить ее содержимым TextBox?
Записан
baranich
Постоялец

ru
Offline Offline

« Ответ #15 : 12-09-2005 06:40 » 

а как вытащить только первую строку, у меня  TextBoxы последовательно заполняются разными строками, а нодо только первой
Записан
Alf
Гость
« Ответ #16 : 12-09-2005 06:52 » 

Я бы для чтения файла использовал объект TextStream. В нем есть метод ReadLine, который именно это и делает.
Записан
baranich
Постоялец

ru
Offline Offline

« Ответ #17 : 12-09-2005 07:04 » 

    Set file1 = Ïàïêà.GetFile("C:\òàëîíû\ñèíèå\ÎÈÒ\ÎÈÒ.txt")
    Set zx1 = file1.OpenAsTextStream(ForReading)
        ThisDocument.TextBox47.Text = zx1.ReadLine
        ThisDocument.TextBox48.Text = zx1.ReadLine
       ThisDocument.TextBox49.Text = zx1.ReadLine
          zx1.Close
И получается в TextBox47 - первая строка, в TextBox48 - вторая строка, TextBox49 - третия строка, а  надо чтоб в этих трех TextBoхах была первая строка
Записан
Alf
Гость
« Ответ #18 : 12-09-2005 07:14 » 

Само собой. Надо немного по-другому:

Код:
 
Dim firstString as String;
...
Set file1 = Ïàïêà.GetFile("C:\òàëîíû\ñèíèå\ÎÈÒ\ÎÈÒ.txt")
Set zx1 = file1.OpenAsTextStream(ForReading)
firstString = zx1.ReadLine
ThisDocument.TextBox47.Text = firstString
ThisDocument.TextBox48.Text = firstString
ThisDocument.TextBox49.Text = firstString
zx1.Close
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #19 : 12-09-2005 07:19 » 

кстати - глюк форума:

русские буквы (я так понимаю) показываются как Ïàïê&#224

или что это?
Записан

baranich
Постоялец

ru
Offline Offline

« Ответ #20 : 12-09-2005 07:40 » 

спасибо за помощь
Записан
baranich
Постоялец

ru
Offline Offline

« Ответ #21 : 12-09-2005 09:25 » 

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
Помогите не пойму где происходит сбой в циклах, смысл такой когда Деньнедели = 7(суббота), то textboxу присваеватся дата = 2, т.е понедельник,  Деньнедели = 1, то textboxу присваеватся дата = 2, но у меня первые выходные убираются, а остальные не убираются.
Записан
Alf
Гость
« Ответ #22 : 12-09-2005 10:07 » 

Что должен делать этот фрагмент?
Записан
baranich
Постоялец

ru
Offline Offline

« Ответ #23 : 12-09-2005 10:19 » 

у меня с 70 по 92 textbox, должны заполняться датами месяца, но надо исключить выходные, а у меня исключаются только первые выходные, но код немного кривой, если есть другие идеи буду только рада.
Записан
Alf
Гость
« Ответ #24 : 12-09-2005 11:14 » 

Я в виде псевдокода идею набросаю, перевести на VBA труда не составит, полагаю:

Код:
date = начальная_дата
for I = 70 to 92 ' цикл по всем полям
  ' пропускаем выходные
  while выходной(date)
    date = date + 1 ' пропускаем этот день
  wend
  поле(I) = date
next I

P.S. Как-то все слишком сложно получается. Если в форме больше десятка текстовых полей, это наталкивает на мысль, что интерфейс программы не подуман как следует. Действительно удобные программы имеют небольшое число элементов управления.

Придется либо добавить функцию выходной(date), либо явно вписать условие определения выходного.
« Последнее редактирование: 20-12-2007 16:48 от Алексей1153++ » Записан
baranich
Постоялец

ru
Offline Offline

« Ответ #25 : 12-09-2005 11:34 » 

выходной(date) - эту функцию надо вводить самой, я так понимаю
Записан
baranich
Постоялец

ru
Offline Offline

« Ответ #26 : 12-09-2005 11:38 » 

Я сделала так:
For ii = 70 To 92
   Деньнедели = Weekday(FirstOfNextMonth)
        If FirstOfNextMonth = EndOfNextMonth Then
         Exit For
         Unload Me
        ElseIf Деньнедели = 7 Then
         FirstOfNextMonth = FirstOfNextMonth + 2
        Поле(ii) = FirstOfNextMonth
        ElseIf Деньнедели = 1 Then
         FirstOfNextMonth = FirstOfNextMonth + 1
        Поле(ii) = FirstOfNextMonth
        Else
         FirstOfNextMonth = FirstOfNextMonth
        Поле(ii) = FirstOfNextMonth
        End If
      FirstOfNextMonth = FirstOfNextMonth + 1
Next ii
но после того как я убрала цикл по первому и последнему дня месяца, появилось ошибка, достигнув последнего дня машина начинает заполнять даты на следующий месяц, а этого нельзя.
Записан
Alf
Гость
« Ответ #27 : 12-09-2005 11:49 » 

А зачем этот клубок городить? Чем он лучше варианта, который я предложил?

выходной(date) - эту функцию надо вводить самой, я так понимаю

Если функция нигде больше не понадобится, можно заменить ее вызов условием

Код:
(Weekday(date) = 1) or (Weekday(date) = 7)
Записан
baranich
Постоялец

ru
Offline Offline

« Ответ #28 : 12-09-2005 12:05 » 

Нет, этот код делает так что все тестбокс, получается заполнены датой=date и она постояна, а мне надо чтоб были все рабочие дни, кроме выходных.
Записан
Alf
Гость
« Ответ #29 : 12-09-2005 12:08 » 

Пардон, конечно же, пропустил последнюю строчку цикла. Нужно в конце перейти на следующую дату. Поспешил. Вот так:

Код:
date = начальная_дата
for I = 70 to 92 ' цикл по всем полям
  ' пропускаем выходные
  while выходной(date)
    date = date + 1 ' пропускаем этот день
  wend
  поле(I) = date
  date = date + 1
next I
« Последнее редактирование: 20-12-2007 16:56 от Алексей1153++ » Записан
Страниц: [1] 2 3 4  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines