Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 2)

Модерирует : ShIvADeSt

ShIvADeSt (11-01-2010 10:17): http://forum.ru-board.com/topic.cgi?forum=33&topic=10903  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
 
Обсуждаем вопросы только по Excel VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.
 
Вопросы по работе с MS Excel, не относящиеся к программированию, задаем в теме Excel FAQ

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Предыдущие ветки топика: Часть 1
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format (eng.)
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами Excel (об этом можно уточнить здесь) или требующая автоматизации, попробуйте для начала записать макрос самим Excel через меню Сервис (Tools) - Макрос (Macro) - Начать запись (Record New Macro). Подробнее здесь. В большинстве случаев получившийся код (Сервис-Макрос-Макросы-Изменить) Вас не удовлетворит, но подскажет, какие объекты-методы-свойства использовать.  
    Другой Ваш помощник - Просмотр объектов (Object Browser). Ну и встроення помощь (F1), естественно.
     
    Если Вы в тупике, покажите Ваш код (или часть кода) здесь.  Если вылазит ошибка, цитируйте ее полностью. Если код слишком большой, используйте тeг [more].
    Используйте отладчик - Breakpoints (F9), Watches (Shift-F9), Steps (F8 и др.) Сильно облегчает поиск ошибок.

     
    Рекомендуется к прочтению:
  • Первые шаги с Excel VBA
  • Excel VBA: Приёмы программирования
  • WinApi. Лекция из курса "Основы офисного программирования и язык VBA" (для продвинутых)
  • Daily Dose of Excel (eng.) - тематический блог: советы по работе с Excel и прочие материалы
  • Excel Macros & Excel VBA Code Tips, Tricks (eng.) - советы, трюки и уловки
  • Mr. Excel (forum) (eng.) - весьма оживленный форум по Excel&VBA.
  • Приемы, хитрости, трюки и нюансы работы в Microsoft Excel - сайт "Планета Excel", целиком посвященный Excel и всему, что с ним связано.
  • Microsoft Excel: Таблицы и VBA. Справочник. Вопросы и Ответы. Советы. Примеры.  
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2, часть 3
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов
    Найти "чужое" окно и нажать в нем кнопку (вписать текст в текстовое поле)
    Работа с UNICODE-символами в VBA: запись, чтение из ячейки, перевод в ASС и обратно
    Как программно подключить дополнительные библиотеки (например, "Microsoft Scripting Runtime" или "Microsoft ActiveX Data Objects 2.8 Library) через References

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:58 23-04-2007 | Исправлено: JekG, 22:32 10-01-2010
    Artcv

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А где мне хранить слова(слово и перевод) в каком типе даных(в записи(структура)) или в чем???
     
    Добавлено:
    как я уже писал
    Я хочу оптионбатон у меня их будет два(для перевода с языка А на Б и наоборот), выбираем нужный перевод в листбокс1 загружаються слова, далише ввожу слово в тексбокс1(Enter) и перевод выводиться в текстбокс2.
     
     
    Добавлено:
    Как это реализовать, может напишет кто-то алгоритм(я не прошу писать прогу)???
    просто помогите подсказками
     
    и кстати а как сделать, когда я ввожу слово в текстбокс1 чтоб в листбокс1 менялся позиция в соответствии с фрагментом введенного слова и чтоб можно было с самого листбокса1 выбирать слова для перевода?????
     
    очень прошу помоч!!!
     
    Добавлено:
    AndVGri
     

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

     
    непонятно
    что тут имеется в виду???

    Всего записей: 124 | Зарегистр. 07-12-2006 | Отправлено: 17:58 27-04-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artcv
    Заполняешь ListBox1 словами первого языка, заполняешь ListBo2 словами второго языка. При щелчке на слове в ListBox1 выводится сообщение о соответствующем слове второго языка. Если хочешь поисковый алгоритм, то The okk тебе накидал идею с Dicrtionary

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 18:27 27-04-2007
    Artcv

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А чо такое Dicrtionary????

    Всего записей: 124 | Зарегистр. 07-12-2006 | Отправлено: 18:33 27-04-2007 | Исправлено: Artcv, 18:37 27-04-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Office - у тебя есть? "c:\Program Files\Microsoft Office\OFFICE11\1049\VBSCRIP5.CHM"  почитай. В общем, Dictionary хэш-массив, где данные индексируются по уникальному ключу. Ключ - слово первого языка, значение слово второго языка. Можешь попробовать ещё Combox, он так же поддерживает поиск в списке своих элементов (по мере набора слова предлагает варианты), хотя на больших массивах я не пробовал.

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 18:52 27-04-2007
    robinLib

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброе время суток!
    Есть следующая проблема: пишу на Excel VBA.  
    Сделал Help к своей рограмме. Но как его тображать? Пользователь нажал на кнопку, появилось окно Help-a (раздел справки, который нужен), но ОН ПОЯВИЛСЯ ПОСЕРЕДИНЕ экрана.а как сделать следующий вариант: Окно Excel автоатически сжимается (это еще можно сделать как-то) и на свободном месте справа появляется Help. Позователь закрывает Help Окно Help-а справа закрываетя а окно Excel опять на весь экран! Как это сделать?

    Всего записей: 138 | Зарегистр. 24-07-2005 | Отправлено: 20:36 27-04-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    К вопросу о словаре:

    Код:
    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
     

    А вообще все это формулами делается безо всяких форм и VBA - чисто ПОИСКПОЗ.
     
    Если принципиально надо сделать с формами, то у ListBox наверняка есть RowSource - чтобы кодом его не заполнять. Один раз руками поставил, что нужно и все.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 07:40 28-04-2007 | Исправлено: The okk, 08:35 28-04-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The okk
    Угу, осталось только дописать переводчик с синтаксическим разбором и долой Prompt

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 09:01 28-04-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    да я Prompt уже года два не использую. Гуглевый переводчик вроде нормально работает. Они его еще усовершенствуют.
    А мой "переводчик" в принципе даже фразы сможет переводить (будет тупо, криво, но будет) - достаточно добавить цикл по сплиту инпутбокса (с пробелом в качестве разделителя) и Join с пробелом (или просто конкатенация в цикле) всех значений по ключам, полученным от этого сплита.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 09:19 28-04-2007 | Исправлено: The okk, 09:23 28-04-2007
    Artcv

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    но надо обязательно с формой!!!
    пасиб вам, буду разбираться!
    еще напишу

    Всего записей: 124 | Зарегистр. 07-12-2006 | Отправлено: 09:41 28-04-2007 | Исправлено: Artcv, 09:43 28-04-2007
    Dsmus

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите решить простую казалось бы задачу. Может всё очень просто, но в инете ответа я не нашёл.
    Нужно объединить данные из 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 последняя заполненная ячейка
     
    и как то это продолжить

    Всего записей: 2 | Зарегистр. 28-04-2007 | Отправлено: 12:43 28-04-2007
    Dendick



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте!  
    Помогите плиз, как можно реализовать импорт баз данных (например БД Access) средствами электронных таблиц EXCEL, и как создать запросы сохранив их в отдельной папке?

    Всего записей: 19 | Зарегистр. 30-01-2007 | Отправлено: 14:43 28-04-2007
    HeT BonpocoB



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    The okk
     

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

    Код:
    Sub сцеплялка()  
    Cells(51, 1).Value = Join(WorksheetFunction.Transpose([A1:A50]).Value,";")  
    End Sub

     
    Ёксель 2003 - Run-time error '424' Object required
    (Transpose менял на ТРАНСП - тож самое)
     
    какие будут предложения?

    Всего записей: 1342 | Зарегистр. 30-03-2003 | Отправлено: 15:54 28-04-2007
    Artcv

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос:
     есть массив А, как считать в него несколько нужных ячеек с листа(какими командами)???

    Всего записей: 124 | Зарегистр. 07-12-2006 | Отправлено: 16:12 28-04-2007 | Исправлено: Artcv, 17:10 28-04-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    HeT BonpocoB

    Код:
     
    Cells(51, 1).Value = Join(WorksheetFunction.Transpose([A1:A50]), ";")
     

     
    Добавлено:
    Dendick
    Поставь компонент Office Microsoft Query  и запиши макрос для команд меню Данные/Импорт внешних данных/Создать вопрос. Выполнишь диалог выбора базы и таблицы Access полей, параметров запроса и т. д.. В записанном коде и посмотришь пример работы

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 17:21 28-04-2007
    Artcv

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    описанный массив, например
     dim a(1 to 10) as string  
    мне надо в него считать ячейки с листа: A1,A2,A3,...
    какими командами это сделать???

    Всего записей: 124 | Зарегистр. 07-12-2006 | Отправлено: 18:41 28-04-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    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
     

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 18:48 28-04-2007 | Исправлено: AndVGri, 18:52 28-04-2007
    Artcv

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    спасибо

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

     
    тут говорит ошыбка!!!

    Всего записей: 124 | Зарегистр. 07-12-2006 | Отправлено: 19:12 28-04-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artcv

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

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

    Код:
     
    Debug.Print
     

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 19:29 28-04-2007
    Artcv

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я не очень знаю Exel только начел разбираться, извиняй!!!

    Всего записей: 124 | Зарегистр. 07-12-2006 | Отправлено: 19:59 28-04-2007 | Исправлено: Artcv, 20:00 28-04-2007
    robinLib

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброе время суток!
    Есть макрос:  
     
    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 - незавершенный процесс!!! Как же его завершить?

    Всего записей: 138 | Зарегистр. 24-07-2005 | Отправлено: 20:17 28-04-2007
       

    Страницы: 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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 2)
    ShIvADeSt (11-01-2010 10:17): http://forum.ru-board.com/topic.cgi?forum=33&topic=10903


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru