Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA (часть 2)

Автор: Artcv
Дата сообщения: 27.04.2007 16:58
А где мне хранить слова(слово и перевод) в каком типе даных(в записи(структура)) или в чем???

Добавлено:
как я уже писал
Я хочу оптионбатон у меня их будет два(для перевода с языка А на Б и наоборот), выбираем нужный перевод в листбокс1 загружаються слова, далише ввожу слово в тексбокс1(Enter) и перевод выводиться в текстбокс2.


Добавлено:
Как это реализовать, может напишет кто-то алгоритм(я не прошу писать прогу)???
просто помогите подсказками

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

очень прошу помоч!!!

Добавлено:
AndVGri


Цитата:
Private Sub ListBox1_Click()
MsgBox ListBox2.List(ListBox1.ListIndex)
End Sub


непонятно
что тут имеется в виду???
Автор: AndVGri
Дата сообщения: 27.04.2007 17:27
Artcv
Заполняешь ListBox1 словами первого языка, заполняешь ListBo2 словами второго языка. При щелчке на слове в ListBox1 выводится сообщение о соответствующем слове второго языка. Если хочешь поисковый алгоритм, то The okk тебе накидал идею с Dicrtionary
Автор: Artcv
Дата сообщения: 27.04.2007 17:33
А чо такое Dicrtionary????
Автор: AndVGri
Дата сообщения: 27.04.2007 17:52
Office - у тебя есть? "c:\Program Files\Microsoft Office\OFFICE11\1049\VBSCRIP5.CHM" почитай. В общем, Dictionary хэш-массив, где данные индексируются по уникальному ключу. Ключ - слово первого языка, значение слово второго языка. Можешь попробовать ещё Combox, он так же поддерживает поиск в списке своих элементов (по мере набора слова предлагает варианты), хотя на больших массивах я не пробовал.
Автор: robinLib
Дата сообщения: 27.04.2007 19:36
Доброе время суток!
Есть следующая проблема: пишу на Excel VBA.
Сделал Help к своей рограмме. Но как его тображать? Пользователь нажал на кнопку, появилось окно Help-a (раздел справки, который нужен), но ОН ПОЯВИЛСЯ ПОСЕРЕДИНЕ экрана.а как сделать следующий вариант: Окно Excel автоатически сжимается (это еще можно сделать как-то) и на свободном месте справа появляется Help. Позователь закрывает Help Окно Help-а справа закрываетя а окно Excel опять на весь экран! Как это сделать?
Автор: The okk
Дата сообщения: 28.04.2007 06:40
К вопросу о словаре:

Код: Sub Dic()
Dim objDic As Object, Cell As Range, strWord As String
Set objDic = CreateObject("Scripting.dictionary")
For Each Cell In Columns(1).SpecialCells(xlCellTypeConstants, xlTextValues)
With Cell
If Not objDic.exists(.Value) Then objDic.Add .Value, .Offset(, 1)
End With
Next Cell
With objDic
Do
strWord = Application.InputBox(Prompt:="Введите слово:", _
Title:="Словарь", _
Type:=2)
If strWord = "False" Then Exit sub
If .exists(strWord) Then
MsgBox Prompt:=objDic.Item(strWord), _
Title:="Словарь"
Else
MsgBox Prompt:="Слово отсутствует в словаре", _
Buttons:=vbExclamation, _
Title:="Словарь"
End If
Loop Until True = False
End With
End Sub
Автор: AndVGri
Дата сообщения: 28.04.2007 08:01
The okk
Угу, осталось только дописать переводчик с синтаксическим разбором и долой Prompt
Автор: The okk
Дата сообщения: 28.04.2007 08:19
AndVGri
да я Prompt уже года два не использую. Гуглевый переводчик вроде нормально работает. Они его еще усовершенствуют.
А мой "переводчик" в принципе даже фразы сможет переводить (будет тупо, криво, но будет) - достаточно добавить цикл по сплиту инпутбокса (с пробелом в качестве разделителя) и Join с пробелом (или просто конкатенация в цикле) всех значений по ключам, полученным от этого сплита.
Автор: Artcv
Дата сообщения: 28.04.2007 08:41
но надо обязательно с формой!!!
пасиб вам, буду разбираться!
еще напишу
Автор: Dsmus
Дата сообщения: 28.04.2007 11:43
Помогите решить простую казалось бы задачу. Может всё очень просто, но в инете ответа я не нашёл.
Нужно объединить данные из 9 .xls файлов в 10-ый отчётный (присвоить значения). Т.е. 9 файлов заполняются определённой информацией, причем неизвестно заранее сколько строк будет заполнено, а затем вся она копируется в ОТЧЕТ.xls Первые 15 строк файла представляют собой шапку с наименованиями, поэтому данные нужно вносить с 16-ой строки.


Что то типа:

Set Res = Workbooks("result.xls").Worksheets(1).Range("A16:X")


Res.Value = Workbooks("r1.xls").Worksheets(1).Range("A16:X").Value ' где X последняя заполненная ячейка

и как то это продолжить
Автор: Dendick
Дата сообщения: 28.04.2007 13:43
Здравствуйте!
Помогите плиз, как можно реализовать импорт баз данных (например БД Access) средствами электронных таблиц EXCEL, и как создать запросы сохранив их в отдельной папке?
Автор: HeT BonpocoB
Дата сообщения: 28.04.2007 14:54
The okk


Цитата:
То же самое без цикла и в одну строчку :


Код: Sub сцеплялка()
Cells(51, 1).Value = Join(WorksheetFunction.Transpose([A1:A50]).Value,";")
End Sub
Автор: Artcv
Дата сообщения: 28.04.2007 15:12
Вопрос:
есть массив А, как считать в него несколько нужных ячеек с листа(какими командами)???
Автор: AndVGri
Дата сообщения: 28.04.2007 16:21
HeT BonpocoB

Код:
Cells(51, 1).Value = Join(WorksheetFunction.Transpose([A1:A50]), ";")
Автор: Artcv
Дата сообщения: 28.04.2007 17:41
описанный массив, например
dim a(1 to 10) as string
мне надо в него считать ячейки с листа: A1,A2,A3,...
какими командами это сделать???
Автор: AndVGri
Дата сообщения: 28.04.2007 17:48
Artcv

Код:
Dim myArray As Variant, i As Long

myArray = Range(Cells(Activesheet.UsedRange.Row, 1&), _
Cells(Activesheet.UsedRange.Rows.Count + Activesheet.UsedRange.Row - 1&, 1&)).Value
For i = 1& To UBound(myArray)
Debug.Pring CStr(myArray(i, 1&))
Next i
Автор: Artcv
Дата сообщения: 28.04.2007 18:12
спасибо

Цитата:
Debug.Pring CStr(myArray(i, 1&))


тут говорит ошыбка!!!
Автор: AndVGri
Дата сообщения: 28.04.2007 18:29
Artcv

Цитата:
Debug.Pring CStr(myArray(i, 1&))

Писал здесь, извини - очепятка.
Тебе так сложно посмотреть методы и свойства объекта Debug? Или клавиша F1 не работает? Да и сообщение об ошибке при вставке кода даёт подсказку - Expected Print Or ? Or Assert

Код:
Debug.Print
Автор: Artcv
Дата сообщения: 28.04.2007 18:59
Я не очень знаю Exel только начел разбираться, извиняй!!!
Автор: robinLib
Дата сообщения: 28.04.2007 19:17
Доброе время суток!
Есть макрос:

Sub TaskHierarchy()
'Ctrl T
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim xlRow As Excel.Range
Dim xlCol As Excel.Range
Dim Proj As Project
Dim T As Task
Dim ColumnCount, Colums, Tcount As Integer

Dim MyFile As String
Dim ff As Integer

'Начальные значения
Tcount = 0
ColumnCount = 0
'Создание экземпляра Excel
Set xlApp = Excel.Application
'

'Подождать
xlApp.Cursor = xWait
'Создание рабочей книги и листа в Excel

xlApp.Workbooks.Open "C:\Budget\TimeData.xls"

Set xlBook = xlApp.ActiveWorkbook


'Расширение первого столбца листа 1
Set xlSheet = xlBook.Worksheets.Item("Лист1")
xlSheet.Cells(1, 1).Select
Columns("A:A").Select
Selection.ColumnWidth = 10

'Присвомить листу название проекта
'xlSheet.Name = ActiveProject.Name

'Выбор 1-ой ячейки в Excel для записи
Set xlRow = xlApp.ActiveCell
'Задается необходимое значение в ячейку А1
xlRow = "Бюджет ФЦП - " & ActiveProject.Name
'Перемещение в следующую ячейку
Set xlRow = xlRow.Offset(1, 0)
xlRow = Date
Set xlRow = xlRow.Offset(2, 0)
' Установка временной оси
Set xlCol = xlRow.Cells(1, 10)
xlCol = "31.01.05"
Set xlCol = xlRow.Cells(1, 11)
xlCol = "28.02.05"
Set xlCol = xlRow.Cells(1, 12)
xlCol = "31.03.05"
Set xlCol = xlRow.Cells(1, 13)
xlCol = "30.04.05"
Set xlCol = xlRow.Cells(1, 14)
xlCol = "31.05.05"
Set xlCol = xlRow.Cells(1, 15)
xlCol = "30.06.05"
Set xlCol = xlRow.Cells(1, 16)
xlCol = "31.07.05"
Set xlCol = xlRow.Cells(1, 17)
xlCol = "31.08.05"
Set xlCol = xlRow.Cells(1, 18)
xlCol = "30.09.05"
Set xlCol = xlRow.Cells(1, 19)
xlCol = "31.10.05"
Set xlCol = xlRow.Cells(1, 20)
xlCol = "30.11.05"
Set xlCol = xlRow.Cells(1, 21)
xlCol = "31.12.05"


'Занесение в Excel информации задач
For Each T In ActiveProject.Tasks
If Not T Is Nothing Then
Set xlRow = xlRow.Offset(1, 0)
Set xlCol = xlRow.Offset(0, T.OutlineLevel - 1)
xlCol = T.Name
'Занесение суммарных затрат по каждой работе
Set xlCol = xlRow.Range("i1")
xlCol = T.Cost
'Полужирное выделение
'If T.Summery Then
'xlCol.Font.Blod = True
'End If
Tcount = Tcount + 1
End If
Next T
OutlineShowTasks OutlineNumber:=pjTaskOutlineShowLevel2
SelectTaskField Row:=0, Column:="Название"
ViewApply Name:="Использование задач"
PaneNext
SelectTimescaleRange Row:=0, StartTime:="31.01.06", Width:=12, Height:=1000
'MsgBox "gggg"
EditCopy
xlSheet.Cells(5, 10).Select
'Перевод курсора
xlApp.Cursor = xlDefault


'Сделать видимым Excel
xlApp.Visible = True
'Ативизация Excel
'AppActivate "Microsoft Excel"
ActiveWorkbook.Save
ActiveWorkbook.Saved = True

'
xlApp.Quit

Set xlApp = Nothing
Set xlBook = Nothing
Set xlSheet = Nothing

End Sub


Он написан под Microsoft Project для переноса данных в Excel. Вопрос: после выполнения данного макроса при нажатии Ctrl+ALT+Del вижу процесс Microosft Excel - незавершенный процесс!!! Как же его завершить?
Автор: AndVGri
Дата сообщения: 28.04.2007 19:40
robinLib

Цитата:
Создание экземпляра Excel
Set xlApp = Excel.Application

Вообще то, должно быть

Код:
Set xlApp = New Excel.Application
Автор: stanzdor81
Дата сообщения: 29.04.2007 17:33
У меня есть задачка по раскрою линейного материала, которую на данный момент решаю в excel(пример тут http://rapidshare.com/files/28555228/raskroy.zip.html ):
Размер стандартной заготовки 6200 мм.
В ячейки A4:A11 забиваются длины необходимых отрезков, а в B4:B11 - их необходимое количество.
В ячейки D4:O10 вручную приходиться вручную забивать количество отрезков, следя за тем, чтобы их количество не превышало количество необходимых(B4:B11), а сумма всех отрезков не превышала размера стандартной заготовки(6200).
В ячейке B2 - получается конечный результат.Х
отелось бы средствами VBA автоматизировать процесс. Но как это сделать не представляю. Помогите советом или примером пожалуйста.
Автор: AndVGri
Дата сообщения: 29.04.2007 19:27
stanzdor81
Это задачка для Excel FAQ, но всё же
[more]
Задача относиться к оптимизационным. Меню сервис/надстройки включи пакет "Поиск решения" (если в надстройках не отображается то до установи Office)
Дополнительно формула в строке 12 меняется (пример для ячейки D12 =Если(D11=0;0;1)
Решение (для выложенного тобой примера) выполняется вызовом диалога в меню сервис/Поиск решения)
В диалоге заполняешь
Установить целевую ячейку: B1
Равной: максимальному значению
Изменяя ячейки: D4:F7
Ограничения: (вызываются кнопкой добавить)
для каждой ячейки в диапазоне D4:F7 два ограничения: D4>=0 и D4 - целое; и т. д.
для ячеек D11:F11 ограничения D11 <= 6200 и т. д. (для общего решения длину пластины помести в отдельную ячейку и указывай её вместо 6200)
для ячеек C4:C7 ограничения С4 = 0 и т. д.

Нудно, заполнять для каждой ячейки условия вручную, но подбирать самостоятельно ещё нуднее
Всё заполнено нажимаешь кнопку выполнить для получения ответа
Естественно, для больших значений количества полос каждого типа всё это нужно проколотить для расширенных диапазонов. Это можно сделать и сразу, только в остальных ячейках D4:O7 будут ноли и на решение не скажется. Можешь записать в макрос свои действия, чтобы потом формировать это программно (может это будет быстрее, если знаешь VBA)
[/more]
Автор: stanzdor81
Дата сообщения: 29.04.2007 20:42
AndVGri
я в принципе так пробовал. Но может у кого то есть решение в VBA без применения Поиска решений? И еще не понятна целевая ячейка B1->max. Она ведь должна быть Минимальной?
Автор: AndVGri
Дата сообщения: 29.04.2007 21:24
stanzdor81

Цитата:
Она ведь должна быть Минимальной?

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

Цитата:
Но может у кого то есть решение в VBA без применения Поиска решений

Как я писал, запиши минимально настройки Поиска решения в макрос (перед вызовом поиска решения Сервис/Макрос/Начать запись) после заполнения пунктов поиска решения - останови запись и отредактируй макрос под свои нужды (не всё ж "ручками" условия прописывать). Вряд ли кто-то специально будет писать спецкод для решения этой задачи, если только ты сам не предложишь развёрнуто алгоритм решения
Автор: stanzdor81
Дата сообщения: 29.04.2007 22:47
AndVGri
спасибо большое. буду пробовать
Автор: aks_sv
Дата сообщения: 30.04.2007 11:47
Помогите решить задачу. Имеются две книги, допустим Книга1 и Книга2. В каждой книге на Листе1 в столбце А перечень организаций, причем в Книге2 могут быть организации, которые есть в Книге1. Как поместить в конец столбца А Книги1 недостающие организации из Книги2 ? Как в Книге1 так и в Книге2 организации не повторяются.
Автор: AndVGri
Дата сообщения: 30.04.2007 13:55
aks_sv
Твой вопрос для Excel FAQ. Комбинация ВПР и автофильтра в Книга2
Автор: oadmail
Дата сообщения: 30.04.2007 16:28
Подскажите, пожалуйста:
есть данные:
2007-04-28 => 10р
2007-04-29 => 20р
2007-04-29 => 30р
2007-04-29 => 40р
2007-04-30 => 50р
включаю фильтр, отбираю
2007-04-29 => 20р
2007-04-29 => 30р
2007-04-29 => 40р
получаю сумму ПРОМЕЖУТОЧНЫЕ.ИТОГИ()
90р
Подскажите, как получить 20р (значение самой верхней ячейки)?
Пожалуй, в формулировке (значение ПЕРВОЙ верхней видимой ячейки) и кроется ответ, но не знаю как.
Заранее спасибо.
-----------------------------------
Задавал этот несложный вопрос
Ru-Board/Excel FAQ (часть 2) = 17:17 30-04-2007
Ru-Board/Excel VBA (часть 2) = 17:28 30-04-2007
excel.1gb.ru = 01.05.2007 02:53
planetaexcel.ru = 01.05.2007 04:12
Огромное спасибо за помощь Евгению А., Platinum Boarder форума excel.1gb.ru за исчерпывающий и оперативный ответ и пример в Excel с использованием ИНДЕКС() и ПОИСКПОЗ(). На всех этих четылех форумах отписал ответ Евгения А. с excel.1gb.ru, полагаю, этот полезный прием работы понадобится и другим пользователям. Также спасибо за подсказку Николаю Павлову (planetaexcel.ru).
Хочется отметить контент сайта planetaexcel.ru: много полезных tips, отлично оформлены, бесплатные советы по сабжу от автора сайта. Но сайту не хватает форума, поэтому автор сайта Николай Павлов "на сайте один", как он пишет. Очень жаль, что пока один, будем надеяться на улучшения. Успехов ему!
Всем спасибо!
Автор: aks_sv
Дата сообщения: 30.04.2007 16:32
AndVGri
Спасибо, конечно, но мне желательно макросом. У меня в Книгах не по одному столбцу, а большие таблицы с данными, которые потом надо будет обрабатывать. Мне нужна только эта часть кода.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

Предыдущая тема: Написание своего HyperTerminal для считывания данных


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.