baranich
Постоялец
Offline
|
|
« : 06-09-2005 11:46 » |
|
Такая проблема, у меня есть txt-файл и word-документ, на котором есть 50 textboxов, надо чтоб из файла первая строка перессылалась в 15 textboxов, например с номерами от 10-25, вся проблема в том что в wordе нет массивов.
|
|
|
Записан
|
|
|
|
baranich
Постоялец
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
Постоялец
Offline
|
|
« Ответ #3 : 07-09-2005 09:19 » |
|
Спасибо за совет.
|
|
|
Записан
|
|
|
|
|
Alf
Гость
|
|
« Ответ #5 : 08-09-2005 06:28 » |
|
Что означает фраза "не дает вписывать информацию при загрузке формы"? Пример кода, пожалуйста.
|
|
|
Записан
|
|
|
|
baranich
Постоялец
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
Постоялец
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
Постоялец
Offline
|
|
« Ответ #10 : 08-09-2005 09:15 » |
|
текст1 текст2 т.е я ввожу текст1 и у меня конец textbox и следующая текст переходит на другую строку. Вопрос: введеный текст будет читаться как одна строка или как две строки?
|
|
|
Записан
|
|
|
|
baranich
Постоялец
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
Постоялец
Offline
|
|
« Ответ #13 : 12-09-2005 06:32 » |
|
Такая проблема: У меня в форме при нажатие кнопки, происходит выбор тестового файла, открытие его и чтение. Дальше надо чтоб textboxы, которые находяться на документе заполнялись первой строкой, но не все, а с номера 47-57. Как это сделать подскажите?
|
|
|
Записан
|
|
|
|
Alf
Гость
|
|
« Ответ #14 : 12-09-2005 06:34 » |
|
А в чем проблема-то? Вытащить первую строку или заполнить ее содержимым TextBox?
|
|
|
Записан
|
|
|
|
baranich
Постоялец
Offline
|
|
« Ответ #15 : 12-09-2005 06:40 » |
|
а как вытащить только первую строку, у меня TextBoxы последовательно заполняются разными строками, а нодо только первой
|
|
|
Записан
|
|
|
|
Alf
Гость
|
|
« Ответ #16 : 12-09-2005 06:52 » |
|
Я бы для чтения файла использовал объект TextStream. В нем есть метод ReadLine, который именно это и делает.
|
|
|
Записан
|
|
|
|
baranich
Постоялец
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
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #19 : 12-09-2005 07:19 » |
|
кстати - глюк форума:
русские буквы (я так понимаю) показываются как Ïàïêà
или что это?
|
|
|
Записан
|
|
|
|
baranich
Постоялец
Offline
|
|
« Ответ #20 : 12-09-2005 07:40 » |
|
спасибо за помощь
|
|
|
Записан
|
|
|
|
baranich
Постоялец
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
Постоялец
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
Постоялец
Offline
|
|
« Ответ #25 : 12-09-2005 11:34 » |
|
выходной(date) - эту функцию надо вводить самой, я так понимаю
|
|
|
Записан
|
|
|
|
baranich
Постоялец
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
Постоялец
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++ »
|
Записан
|
|
|
|
|