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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
     
    большое спасибо
    еще, если можно
    Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
     Dim slovE As String
     Dim i As Long
     
     If KeyCode.Value = KeyCodeConstants.vbKeyReturn Then
      slovE = UserForm1.TextBox1
      For i = 1 To n
        If slovL = slov1(i) Then
         TextBox2.Text = slov2(i)
         Exit For
        End If
       Next i
     End If
    End Sub
     
    ничего не выводит в ТексБокс2....???где может быть ошыбка???

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

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

    Цитата:
     
      slovE = UserForm1.TextBox1
      For i = 1 To n
        If slovL = slov1(i) Then  

    Присваиваешь slovE, а сравниваешь с slovL - где логика? Чему равно slovL? И чем тебя не устроил предложенный The okk Dictionary?

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



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

    Цитата:
    Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)  
     Dim slovE As String  
     Dim i As Long  
       
     If KeyCode.Value = KeyCodeConstants.vbKeyReturn Then  
      slovE = UserForm1.TextBox1  
      For i = 1 To n
        If slovL = slov1(i) Then  
         TextBox2.Text = slov2(i)  
         Exit For  
        End If  
       Next i  
     End If  
    End Sub  
     
    ничего не выводит в ТексБокс2....???где может быть ошыбка???

    А где у тебя n задается? Это не Static, она нигде не устанавливается и не объявляется. Скорее всего, ты пытаешься сделать цикл от 1 до 0.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 08:12 02-05-2007 | Исправлено: The okk, 08:12 02-05-2007
    Artcv

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

    Цитата:
    Присваиваешь slovE, а сравниваешь с slovL

    когда печатал сделал ошыбку

    Цитата:
    А где у тебя n задается?

    задаю глобально, это константа
     
    но все равно ничего не выводит:

    Цитата:
     Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
     Dim slovE As String
     Dim i As Long
     
    If KeyCode.Value = KeyCodeConstants.vbKeyReturn Then
      slovE = UserForm1.TextBox1
      For i = 1 To n
       If OptionButton1.Value Then
        If slovE = slov1(i) Then
         TextBox2.Text = slov2(i)
         Exit For
        End If
       ElseIf OptionButton2.Value Then
        If slovE = slov2(i) Then
         TextBox2.Text = slov1(i)
         Exit For
        End If
       End If
      Next i
    End If
    End Sub

     
    хоть так все работает
     

    Цитата:
     Private Sub CommandButton1_Click()
     slovE = UserForm1.TextBox1
      For i = 1 To n
       If OptionButton1.Value Then
        If slovE = slov1(i) Then
         TextBox2.Text = slov2(i)
         Exit For
        End If
       ElseIf OptionButton2.Value Then
        If slovE = slov2(i) Then
         TextBox2.Text = slov1(i)
         Exit For
        End If
       End If
      Next i
    End Sub

    Всего записей: 124 | Зарегистр. 07-12-2006 | Отправлено: 12:09 02-05-2007
    The okk



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

    Цитата:
     Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
     Dim slovE As String
     Dim i As Long
     
    If KeyCode.Value = KeyCodeConstants.vbKeyReturn Then  

    KeyUp - это не совсем то событие, которое нужно использовать в данной ситуации. Попробуй BeforeUpdate и AfterUpdate.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 15:03 02-05-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artcv
    The okk
    Проблема в этом, как гласит Office Forms 2

    Код:
     
    EnterKeyBehavior Property
    ...
    Remarks
     
    The EnterKeyBehavior and MultiLine properties are closely related. The values described above only apply if MultiLine is True. If MultiLine is False, pressing ENTER always moves the focus to the next control in the tab order regardless of the value of EnterKeyBehavior.
     

    То есть, если в TextBox1 не установлен режим MultiLine, то нажатие Enter всегда приводит к перемещению к другому элементу управления.
     
    Artcv
    Вставь код по анализу слова в процедуру обработки события (потеря фокуса элементом управления)
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        'Cancel.Value = True - не ставь, а то в другой элемент управления фокус не передашь
        'Далее твой код
    End Sub
     
    Добавлено:
    Хотя, что бы фокус снова был на TextBox1, нужно в событии TextBox2 AfterUpdate передать фокус TextBox1.SetFocus
    Ну, и The okk, как всегда прав, можно и комбинацией
    TextBox1_AfterUpdate
    TextBox2_AfterUpdate

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 17:23 02-05-2007 | Исправлено: AndVGri, 17:25 02-05-2007
    Artcv

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

    Цитата:
    Попробуй BeforeUpdate и AfterUpdate.

     

    Цитата:
    Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
     Dim slovE As String
     Dim i As Long
     
     If KeyCode.Value = KeyCodeConstants.vbKeyReturn Then

     
    тогда место этого  
     
    Цитата:
    If KeyCode.Value = KeyCodeConstants.vbKeyReturn Then

    что написать, это не подходит под это событие
     
    Добавлено:
    все зделал не надо писать, спасибо
     
    Добавлено:
    AndVGri
    спасибо за пояснение

    Всего записей: 124 | Зарегистр. 07-12-2006 | Отправлено: 18:03 02-05-2007
    NugnaPomosh

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Такая проблемка, что я никогда не сталкивался с VBA. но пришлось(((
    Есть таблица ФИО, год рождения, №цеха, нужно создай макрос, который выбирал от того то года по такой всех, кто принадлежит к указанному цеху. Нарисовал форму, где три текстовых поля 1)год от... 2)год до... 3)номер цеха, ну еще, конечно, командную кнопку, на этом все мои знания и кончились))) Помогите, пожалуйста, не дайте грешной душе пропасть) Очень буду признателен)))

    Всего записей: 3 | Зарегистр. 02-05-2007 | Отправлено: 18:07 02-05-2007
    AndVGri

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

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 18:11 02-05-2007
    DYBINA

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте люди добрые!!!помогите глупенькой девушке-несмышленышу,очень нужна ваша помощь,когда нашла этот форум чуть от счастья не упала,но не об этом,я учусь на 1-ом курсе у меня программирование,т.к. я девушка мне это очень и очень далеко....помогите мне пожалуйста сделать пару лабораторок....я буду вам ооооооооооочччччччееееень благодарна,значит так:
    1В основной программе создается файл со значениями фунции  y=sin(x) на интервале a<=x<=b с шагом изменения аргумента hx. Функция вычисляет среднее арифметическое элементов файла с номерами от m до n. Файл и результат вычислений печатаются в основной программе.
    2Создать процедуру, формирующую матрицу путем умножения элементов исходной матрицы на индекс строки в которой имеется максимальный элемент. Исходная матрица формируется и печатается в основной программе по ее запросу, новая матрица печатается там же.
    Заранее спасибо
    P.S. т.к. я не шарю в этом практически вообще то очень прошу вас написать поподробн

    Всего записей: 3 | Зарегистр. 02-05-2007 | Отправлено: 18:15 02-05-2007
    NugnaPomosh

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

    Цитата:
    [/q]
    Чтобы все записи, которые подходят под условия, полностью (т.е. ФИО, год рождения, №цеха) копировались на отдельный лист (Скажем Лист2)))).
     
    Добавлено:
    AndVGri
    [q]И куда выбирал?

    Это по предыдущему сообщению)))

    Всего записей: 3 | Зарегистр. 02-05-2007 | Отправлено: 18:22 02-05-2007
    pila007

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    вот что-то написал, но никак не получается правильно сделать.  
    задача такова:  
    Вычислить произведение положительных и суммы отрицательных элементов каждого столбца массива A(N,M)  
    Вот что сделал:  
    Sub k()  
        Dim a(10, 2) As Double  
        For i = 1 To 10  
        For j = 1 To 2  
          Cells(i, j) = Int(Rnd * 2-1)  
        a(i, j) = Cells(i, j)  
        If a(i, j) <= 0 Then  
              Cells(12, 1) = a(i, j) + a(i, j)  
        Else: Cells(14, 1) = a(i, j) * a(i, j)  
    End If  
        Next j  
        Next i  
    End Sub  
    как сделать чтобы он отриц числа складывал в ячейку cells(12,1), а положительные умножал и вписывал в ячейку cells(14,1)

    Всего записей: 24 | Зарегистр. 24-04-2007 | Отправлено: 19:10 02-05-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NugnaPomosh
    Эх, грешник
    Подробнее...
     
    Добавлено:
    pila007
    Cells(12, 1).Value = 0
    Cells(14, 1).Value = 1
    For ...
        ...
        Cells(12, 1).Value = Cells(12, 1).Value + ...
        ...
        Cells(14, 1).Value = Cells(14, 1).Value * ...

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 19:15 02-05-2007
    NugnaPomosh

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    Спасибо большое))) Буду молиться за нас обоих)))

    Всего записей: 3 | Зарегистр. 02-05-2007 | Отправлено: 19:33 02-05-2007
    Artcv

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
     ты мне писал но я не все понял
     
     значит ситуация такая когда я нажимаю Ентер в ТекстБоксе1 то фокус переходит на    ЛистБокс, но это не чего но когда я хочу переключить на другой язык(ОптионБаттон) то выходит ошибка, хоть в процедуре

    Цитата:
    Private Sub TextBox1_AfterUpdate()
           ' мой код
           UserForm1.TextBox1.SetFocus
         End Sub

    я фокус указал на текстбокс1
     
    где грабли???
     
    Добавлено:
    ще  
    например, я хочу сделать чтоб с ЛистБокса тоже мог выбирать слова выделивши и нажавши Ентер
    каким событием это можно сделать???

    Всего записей: 124 | Зарегистр. 07-12-2006 | Отправлено: 23:21 02-05-2007 | Исправлено: Artcv, 23:22 02-05-2007
    AndVGri

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

    Цитата:
    Private Sub TextBox1_AfterUpdate()
           ' мой код
           UserForm1.TextBox1.SetFocus
         End Sub

    Не совсем правильно. Ты же вводишь в TextBox1 слово для поиска, после Enter фокус передаётся TextBox2 (если не так, то настрой на форме порядок перхода). Чтоб можно было вводить следующее слово, нужно вернуть фокус в TextBox1 (или щёлкнуть в нём мышкой. Но зачем лишние телодвижения?)

    Код:
     
    Private Sub TextBox1_AfterUpdate()
        'Ваш код
    End Sub
     
    Private Sub TextBox2_AfterUpdate()
        TextBox1.SetFocus
    End Sub
     


    Цитата:
    чтоб с ЛистБокса тоже мог выбирать слова выделивши и нажавши Ентер

    С теми же KeyUp и Click для ListBox поэксперементируй

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 02:11 03-05-2007
    Vitus_Bering



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    To All
    Как программно задать формат даты вида: Чт. 03 Май 2007?

    Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 11:27 03-05-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Vitus_Bering
    Так трудно макрос записать, чтоб посмотреть какой формат будет присвоен ячейке при ручном выборе?

    Код:
     
    Activecell.NumberFormat = "ddd/ [$-FC19]d mmmm yyyy"
     

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 11:48 03-05-2007
    pila007

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    спасибо AndVGri
    вот еще одна задачка:
    Ввести массив A(N,M).Найти сумму элементов двух главных диагоналей.  
    как там найти сумму двух главных диагоналей

    Всего записей: 24 | Зарегистр. 24-04-2007 | Отправлено: 11:54 03-05-2007
    Vitus_Bering



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

    Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 12:00 03-05-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