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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    Привет. Да так - и отдыхал и работал.
    Меня тут оказывается помнят, что не может не радовать

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 11:26 07-08-2007
    vasiliy74



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    фот решил написать функцию для фифо, и чего то он ругается на первое next говорит что next c1 используется без for  
    code
     
    Добавлено:
    Необходимо считать полученную разницу от реализации по методу первый пришел первый ушёл.
    В таблице есть два основных заполняемых столбца, это курс и кол-во, курс это то по какой цене за одну штуку мы покупали или продавали, а кол-во соответственно количество. Так вот, напротив ячеек с продажей, т.е. где кол-во <0 необходимо считать реализованную прибыль, для этого ….. у самое сложное … считается она как разница между курс * на кол-во приобретения –курс * на кол-во продажи, так вот покупать мы могли частями меньшими по кол-ву чем одна продажа, в этом случае необходимо это учесть и посчитать частями, вот такая замечательная функция, а может она уже есть в Excel? Я зря её пишу?
     
     
    Добавлено:
    а использовать думаю так =Realized(B$2:B2;A$2:A2) где в столбце A курсы а в столбце B кол-во. И мы её протягиваем
     
    Добавлено:
    Тема про цвета у кого есть возможность код вот так раскрашивать?  

    Всего записей: 289 | Зарегистр. 21-02-2006 | Отправлено: 15:17 07-08-2007 | Исправлено: vasiliy74, 16:41 07-08-2007
    SERGE_BLIZNUK

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

    Цитата:
    он ругается на первое next говорит что next c1 используется без f

    потерял одно End If (перед next c1)
     

    Цитата:
    Тема про цвета у кого есть возможность код вот так раскрашивать
    похоже на работу какого-то документатора - программа, которая на вход получает исходный текст - на выходе - либо красиво оформленный код (типа как на рисунке), либо блок-схемы и т.п....
     
     
     
    Добавлено:
    например, по поиску нашёл - Doc-O-Matic версия 3 - система документирования исходных текстов...

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 16:51 07-08-2007
    vasiliy74



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    спасибо что помог с моим первым затыком, их там ещё тьма пока вроде получается отлаживать жудкий код
     
    Добавлено:
    Public Function Realized(operation As Range, rate As Range) As Long
     
    On Error GoTo Err
     
    If operation.Row <> rate.Row Then
    GoTo Err
    End If
     
    Dim index As Byte
    Dim c1 As Range
    Dim in_r As Range
    Dim finish As Long
    Dim sum_minus As Single
    Dim start_cell As Long
    Dim finish_cell As Long
    Dim ostatok As Single
    Dim minus As Single
     
    Set in_r = operation
     
    index = 1
    For Each c1 In rate.Cells
        in_r(index, 2).Value = c1 вот тут вылетатет! не осилил это потомучто проецируется прям в таблицу? не может создать так просто столбец 2?
     
     
        index = index + 1
    Next c1

    Всего записей: 289 | Зарегистр. 21-02-2006 | Отправлено: 17:05 07-08-2007
    SERGE_BLIZNUK

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

    Цитата:
    For Each c1 In rate.Cells  
        in_r(index, 2).Value = c1 вот  

    я не знаю, ЧТО ты хочешь сделать, но ты, наверное, хотел так:
    For Each c1 In rate.Cells  
        in_r(index, 2).Value = c1.Value

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 22:42 07-08-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vasiliy74
    хм.. честно говоря, не совсем понял, что ты хочешь сделать.

    Цитата:
    считается она как разница между курс * на кол-во приобретения –курс * на кол-во продажи

    Было бы намного понятней, если бы ты выложил лист или скриншот, где было бы показано, что надо получить.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 07:43 08-08-2007
    SERGE_BLIZNUK

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

    Цитата:
    Было бы намного понятней, если бы ты выложил лист или скриншот, где было бы показано, что надо получить.

     
    угу. Именно! Телепаты всё опять в отпуске ;-)))
    Причём рекомендую сделать нескольно вариантов с разными вариантами курсов и количества, сделать расчёт ручками и расписать, как и что считается
    (можно прямо в том же листе описать словами, можно в ячейку записать, опять же ручками, что на что умножается и из чего вычитается...)
    я алгоритм по макросу восстановить НЕ СМОГ.
     
    Хотя по описанию ("полученную разницу от реализации по методу первый пришел первый ушёл") - интуитивно чувствую, ЧТО Вам надо получить...

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 09:33 08-08-2007
    aks_sv

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как в Excel добавить свой пункт в контекстном меню? Это, скорее не в VBA, может кто подскажет где?

    Всего записей: 109 | Зарегистр. 18-12-2006 | Отправлено: 11:54 08-08-2007
    vasiliy74



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    конечно в первую очередь, я так и сделал, на листе всё разложил по полочкам потом написал алгоритм и записал его в код, а синтаксисом у меня проблемы это 99% всех моих ошибок... как правило отлаживаю синтаксис, нужно бы подучить, но что то всё время выделить жалко
    суть алгоритма заключается в том чтобы скинуть всё во временный массив и там произвести расчёты, выложить не могу потомучто доступа нет но примерно обяснить попробую...
    1 у нас есть столбец с кол-вом.  где по знаку - мы понимаем что продаём а свё что положительное то покупаем.
    2 цель нашего расчёта найти тот приход из которого мы будем так сказать продавать
    3 ищем ячейки следующим образом:
    3.1 сторим дополнительный столбец в значения которого заводим сумму всех покупок по текущею стороку (назавём её столбец сумм). например:
    12 12
    -2 12
    4 16
    1 17
    -11 17

    3.2 ищем общюю сумму всех продаж (те все кто с -) из предидущего примера значение будет равно -13  
    3.3 теперь чтобы определить из каких приходов (ячеек) мы будем продавать и сколько производим следующее действие:  
    3.3.1 во первых считаем сумму всех продаж без учёта последней из нашего примера это -2  
    3.3.2 затем полученное значение всех продаж без учёта последней поочерёдно начинаем складывать со столбцом сумм, и если значение положительное значит это первая ячейка с остатком того кол-ва что мы получили в результате сложения из которой мы будем продавать.
    3.3.3 чтобы найти последнюю ячейку мы опять складываем значения из столбца сумм с общим кол-вом продаж, с учётом последей в нашем примере это -13 и ищем первое положительное значение это будет наша последняя ячейка.
    3.4 теперь необходимо нашу продажу разнести по частям, то есть разложить на суммы (в том случаее если она болше чем один приход).  
    3.4.1 (условимся что мы предерживаемся итерационного процесса те в пункте 3.4 мы начинаем движение с верху заново) итак для того что бы посчитать кол-во продоваемое из первой покупки (ячейке которую мы определили в пункте 3.3.2) нам необходимо определить то кол-во товара сколько там осталось, это достигаетя как я и писал в пункте 3.3.2 путём сложения ячейки из столбца сумм и сумыы всех продаж за исключением последей (для которой мы и считаем реализованную прибль) у нас получается 10 это то кол-во которое у нас осталось
    3.4.1.1 теперь проверяем если сумма 10 и наша последняя продажа -11 меньше нуля то отсюда мы продаём всё оставшееся кол-во те 10, а та разница что мы получили в результате сложения это -1 переноситься на другую покупку
    3.4.2 следющею покупку мы считаем что отсюда продаж небыло и по этому мы берём значение из столбца 1 (только покупки те положительное) это 4 суммируем её с -1 и получем 3 это значит отсюда мы продаём 1
    3.5 теперь зная откуда чего мы продаём считаем по следующей формуле (на примере выше нет столбца с курсами)10 умножаем на курс из первой покупки и вычитаем 10 умножкнное на курс продажи (можно упростить курс покупки минус курс продажи умноженное на 10), далее тоже самое для 1 умножаем на курс второй покупки(кур по которому мы купили 4 шт.) и вычитаем 1 уноженное на курс нашей продажи (11 шт. что мы продали)  
     
    ну вот навернное и все описал если непонято то обясню ещё раз
     
    ПОВТОР:
    а использовать думаю так С2=Realized(B$2:B2;A$2:A2) где в столбце A курсы а в столбце B кол-во. И мы её протягиваем, ну там ещё условие нужно чтобы она считалась только для значений из столбца B отрицательных.  
     
     
    Добавлено:
    Переменные как я вижу:
     
    массив три столбца колонки из входящих данных
      1 входящие курс
      2 входящие кол-во
      3 расчёт сумма всех покупок по текущею запись
     
    по хранению суммы всех минусов
    по хранению номера строки для начала расчётов
    по хранению номера строки для окончания расчётов – можно обойтись без неё
     
    нумератор столбцов для цикла
    переменная для присвоения ячеек из массива для цикла
     
     
    Добавлено:
    основня проблема в том что я незнаю как содать временные переменные с которыми буду работать, пробовал по разному SERGE_BLIZNUK

    Цитата:
    in_r(index, 2).Value = c1.Value  
    это не помогает много чего перепробовал, вообще как правильно сделать так и непонял через матрицу пробовал но она задаётся только явно как быть? как правельно в теле функции передать значения во временные переменные для расчётов..

    Всего записей: 289 | Зарегистр. 21-02-2006 | Отправлено: 12:52 08-08-2007
    nick7inc



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

    Цитата:
    основня проблема в том что я незнаю как содать временные переменные с которыми буду работать

    Цитата:
    как правельно в теле функции передать значения во временные переменные для расчётов..

    Какие переменные нужны, одиночные или массив? Если заносить таблицу, то нужен массив:

    Код:
    Dim AA (1 TO 20) as Double ' - для чисел с плавующей точной, двойная точность
    Dim BB (1 TO 20) as Long ' - для целых больших чисел  

     
    Если создавать одиночные переменные, то так:  

    Код:
    Dim i as Integer 'одиночная переменная с коротким целым типом (от -32767 до - 32767, примерно, лучше глянуть в Help).

     
    Потом можно к массиву обращаться следующим образом, так, например, заполнить его с клавиатуры:
     

    Код:
    For i=1 to 20: AA(i)=inputBox("Введите число"):Next i

     
    Если неизвестен размер рассива, то надо по-другому это делать. Сначала его создать командой Dim, а затем - поменять размер, ReDim. Может есть ещё способы через Variant - Array, если кто напишет, с удовольствием почитаю.
     
    Добавлено:
    SERGE_BLIZNUK

    Цитата:
    а ещё быстрее (и удобнее) будет копирование не через буфер, а через метод диапазона Range

    Цитата:
    Range(Cells(i, 1), Cells(i, 10)).Copy w2.Cells(j, 1)

     
    Спасибо, не знал.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 23:50 08-08-2007 | Исправлено: nick7inc, 00:05 09-08-2007
    CEMEH



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The okk
    ComboBox??? А х.. ее знает...
    OptionButton нагляднее....
    Возможно... Однако не плохой опыт для дальнейших разработок. А я то где ошибся? Что не так записал? надо присвоить пременной А одно из семи возможных значений в зависимости от OptionButton... Как это сделать? Теория = если OptionButton1=1 то переменная="первое", если OptionButton2=1 то переменная="Второе"
    Собственно говоря синтаксис If Then  

    Цитата:
      If <условие> Then  
        <оператор>  
        ...  
        <оператор>  
      [Else  
        <оператор>  
        ...  
        <оператор>]  
      End If

    Надо пологать, что после Then, else надо писать с новой строки? А значки "[", "]"??
    А что значит End if?

    Цитата:
    ну, это не проблема.  
    dim A As String

    Что это значит? переменная А - текст? А просто, с первой строки (без этого объявления)я не могу написать Let А= "Вася Пупкин"? Выдаст ошибку?
     

    Цитата:
    Что значит "если не выбрано значение"? Если ListBox пустой?

    Нет, листбокс заполнен, но при выполнении программы я не тыкал в него мышкой (не выбирал из него значение)  

    Цитата:
    Во-первых, чтобы показать форму, надо использовать метод Show.  

    Тогда спрошу проще:
    Если выбранное значение (не выбрано) листбокс ="" тогда вывести на экран сообщение "Выберите из списка" и вернуться назад для выбора значения из листбокс.
     
    Вообще бы почитать хороший справочник по по VBA... (русский)

    Всего записей: 237 | Зарегистр. 17-09-2006 | Отправлено: 00:51 09-08-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    CEMEH
    Цитата:
    Надо полагать, что после Then, else надо писать с новой строки? А значки "[", "]"??  
    А что значит End if?  

    1) ВНИМАТЕЛЬНЕЕ читайте сообщения! Цитирую сам себя:
     "в [] то, что может быть опущено... "
    разжевываю - квадратными скобочками я обозначил необязательные элементы, т.е. то, что может быть убрано (опущено)...
     
    2) очень, очень, очень рекомендую открыть данный топик -  
    Версия для печати и почитай примеры чужого кода. Поверьте, что процентов на 80% того, что я знаю и умею в VBA, это благодаря чтению/анализу чужого кода...
     
    3) End if - это завершение условной конструкции. Подумайте сами, ведь нужно же компилятору языка узнать, что закончилась ветка, которую нужно выполнять при соблюдения условия if <условие> then.
    В синтасисе языков программирования существует только нескольк способом указать, какой блок попадает в if then - либо операторные скобки (в Pascal/Delphi - begin ... end,
    в Си,Java - { .. } ... ) либо завершающий оператор, который указывает, что всё, баста, веточка закончилась. в данном случае это и есть end if
     

    Цитата:

    Цитата:
    ну, это не проблема.  
    dim A As String  

    Что это значит? переменная А - текст? А просто, с первой строки (без этого объявления)я не могу написать Let А= "Вася Пупкин"? Выдаст ошибку?  

    это выдаст ошибку, если в опциях VBA у вас стоит обязательно требовать описания переменных (меню Tools - Options - [ ] Require Variable Declaration)
    Кстати, может Ваша проблема в том, что вы путаете русские/английские буквы!??!?!!!!
    в данном примере Let А= "Вася Пупкин" - А - набрана в русской расскадке!
    разумеется, что когда Вы пишете Cells(Lastrow, 8).Value = А, то А ДОЛЖНА БЫТЬ ТОЖНО ТАКАЯ ЖЕ!!!
    Кстати, включение опции "Требовать описание переменных" как раз эту проблему и решит! Т.к. либо как вы опишете переменную, так Вы её будете использовать, либо, если описали в английской, а использовать пытаетесь русскую - компилятор остановится в месте использования и справедливо обматерит Вас!!
    и вообще, использование русских букв в именах переменных - это грубо и некультурно. и уж, как минимум, Вы должны делать это осознанно:
      Let МоеНовоеЗначение = "Вася Пупкин" 'кстати, Let можно опускать-оно не обязательно
      cells(1,1).Value = МоеНовоеЗначение
     
    vasiliy74
    могу сказать только одно - АФИГЕТЬ... то ли я такой тупой, то ли задача у Вас стоит ОЧЕНЬ не стандартная.... ;-(((((((( Перечитал раза три, пока не вкурил....
    Ладно, почитаю ещё пару/другую раз. Пока вопросы -  вашем примере что представляет себя второй столбец (ну, который 12 12 16 17 17)? Вы его назвали "столбец сумм" - это что количество * курс ? но это невероятно, т.к. для последних двух строчек для 1 и -11 одна и та же сумма... ;-(((( и ещё, у вас таблица заполняется сверху вниз, т.е сначала вы купили 12 штук, потом продали 2, потом купили 4 и т.д... Так?
    И что надо в конце концов найти?? я про вашу фразу "цель нашего расчёта найти тот приход из которого мы будем так сказать продавать"??
     
    попытайтесь ещё раз объяснить, теперь ЛОГИКУ вычислений - примерно так  
    -  купили x1 по курсу у1
    -  потом продали  x2 по курсу y2
    -  потом продали x3 по курсу y3
    итого, наша реализация составляет RRR
     
    новый пример (т.е. всё забыли, с нового года начали заново):
    -  купили x1 по курсу у1
    -  купили x2 по курсу у2
    -  купили x3 по курсу у3
    -  потом продали  x4 по курсу y4
    -  потом продали x5 по курсу y5
    итого, наша реализация составляет RRR
     
    Похоже у Вас тот случай, когда Вы сами всё прекрасно понимаете, а вот втолковать "невтыкающим" не можете... Обычно в таких случаях проще самому сделать, чем другому объяснить ЧТО же надо делать...
     
    [offtop]анекдот в тему. Беседуют два молодых учителя математики. Один другому: - Представляешь, ну и тупой класс мне попался!! Объясняю им доказательство теоремы - не понимают! Ещё раз объясняю - не понимают! Третий раз объясняю, уже сам понимать начал, а они всё равно не понимают!!!
     
     
     
     
     
     
     
    Добавлено:
     
    vasiliy74
    Ещё вопрос/совет. Задача стоит так - напротив ячеек с продажей, (где кол-во <0) необходимо считать реализованную прибыль ?
    Тогда Вам лучше (эффективнее) сделать функцию на VBA, которая будет вычислять эту прибыль и будем сама заполнять столбец... Чем вставлять туда функцию =Realized(..., протягивать ещё и т.д....
    просто каждый раз в каждой ячейке будет запускать один и тот же процесс вычислений... мне кажется, это неэффективно!
    впрочем, разумеется, об этом можно будет говорить, только после того, как алгоритм заработает!
     

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 03:11 09-08-2007
    vasiliy74



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

    Всего записей: 289 | Зарегистр. 21-02-2006 | Отправлено: 11:06 09-08-2007 | Исправлено: vasiliy74, 11:37 30-08-2007
    CEMEH



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    Во первых - ОГРОМНОЕ СПАСИБО!!! за помощь в познании языка программирования
    99,9% я беру с форума, остальное - с книг.
    Цитата:
    это выдаст ошибку, если в опциях VBA у вас стоит обязательно требовать описания переменных (меню Tools - Options - [ ] Require Variable Declaration)  

    Нет. я такую опцию не ставил, и сегодня попробовал:
        Фамилия = Range("C65536")
        Имя = Range("D65536")
        Отчество = Range("E65536")
        Адрес = Range("F65536")
        Телефон = Range("G65536")
        НомерКолонны = Range("H65536")
        Должность = Range("I65536")
        Однолиц = Range("J65536")
        Образование = Range("K65536")
        ВидДвижения = Range("L65536")
        Выз = Range("M65536")
        ГрДоп = Range("N65536")
        Класс = Range("O65536")
        ТалонБД = Range("P65536")
        ТалонТБ = Range("Q65536")
        ПоследнийКИП = Range("R65536")
        СобеседТЧ = Range("S65536")
        Дрожд = Range("T65536")
        Дпост = Range("U65536")
        НазначДвиж = Range("V65536")
        НазначДолжн = Range("W65536")
        Дувол = Range("X65536")
        СлМед = Range("Y65536")
        СлПсих = Range("Z65536")
        СлЭБ = Range("AA65536")
        СлТБ = Range("AB65536")
        СлОТ = Range("AC65536")
        Прим = Range("AD65536")
        ВидТяги = Range("AE65536")
     
    И все прекрасно фунциклирует и потом эти переменные (русские) очень даже хорошо вставляются в нужные ячейки.
     
     
    C If then разберусь позже
     
    А теперь!
     ПлюсАдин тому, кто подскажет, как в VBA сделать автозаполнение в поле для ввода текста
     
     
    пс Завтра на служебном принтере распечатаю "версию для печати", буду осваивать....

    Всего записей: 237 | Зарегистр. 17-09-2006 | Отправлено: 22:38 09-08-2007
    CEMEH



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

    Цитата:
    А теперь!  
     ПлюсАдин тому, кто подскажет, как в VBA сделать автозаполнение в поле для ввода текста

    Плюсадин уходит ко мне! Эта мулька есть в ComboBox
     
    Задача другого плана:
    1. Есть список работников предприятия, строка - работник (табельный, фамилия, имя, должность) и т д по столбцам.
    Есть форма, в которой ComboBox-ы табельный, фамилия, должность.
    Каким образом сделать, что бы после набора табельный, фамилия сама подставилась, и наоборот?
     
    2. А еще лучше - несколько ComboBox-ов, в которых раскрывающийся список будет уменьшаться, в зависимости от выбора в других ComboBox. Т е если я выбрал в ComboBox-е должность "бригадир" то в ComboBox-е "фамилии" вылезут только фамилии бригадиров.
     
    Хотя бы первую задачку решить.
     
    Заранее Спасибо!
     
     
     
    Добавлено:
    Как написать?
     
    А = номер выбранной строки из ComboBox1
     
    (не выбранное значение, а именно номер строки)
    Заранее благодарен!

    Всего записей: 237 | Зарегистр. 17-09-2006 | Отправлено: 18:56 10-08-2007
    Anton T

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Наконец-то данных из Аксес в Екселе, передачи очень быстрые ))
    Этот код в екселе:

    Код:
     
    Sub Test()
     
    Dim XL As Object
    Dim WB As Workbook
    Dim WS As Worksheet
    Dim sql As String
     
    Set XL = CreateObject("excel.application")
    XL.SheetsInNewWorkbook = 1
    Set WB = XL.Workbooks.Add
    Set WS = WB.Worksheets(1)
    sql = "SELECT * FROM Артемовская"
    Call TXLOut(sql, 1, 1, 1, 1, False)
    WB.Close False
    XL.Quit
    End Sub
     
     
    Public Function TXLOut(sql As String, Optional ByRef x As Long = 1, Optional ByRef y As Long = 1, Optional ByRef n As Long = 1, Optional ByRef m As Long = 1, Optional Headers As Boolean = True) As Worksheet
    Objects Library
    Dim a As Variant
    Dim rs As New ADODB.Recordset
    Dim con As New ADODB.Connection
    Dim c() As Variant
    Dim i, j, l, k As Integer
    rs.Open sql, "Driver={Microsoft Access Driver (*.mdb)};Dbq=c:\1.mdb;", adOpenForwardOnly, adLockOptimistic
    a = rs.GetRows()
    ReDim c(UBound(a, 2), UBound(a, 1))
    For k = 0 To UBound(a, 1)
    For j = 0 To UBound(a, 2)
    c(j, k) = a(k, j)
    Next j
    Next k
    n = UBound(a, 2) + 1
    m = UBound(a, 1) + 1
    Range(Cells(y, x), Cells(n + y - 1, m + x - 1)) = c
    If Headers Then
    Range(Cells(y, x), Cells(n + y - 1, m + x - 1)).Rows(1).Insert
    For j = 0 To m - 1
    Cells(y, j + x).Value = rs.Fields(j).Name
    Next j
    End If
    rs.Close
    Exit Function
    whoops:
    Resume Next
    End Function

    Всего записей: 325 | Зарегистр. 12-04-2006 | Отправлено: 15:33 11-08-2007
    Vitalik_Atas

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The Bat! Что он из себя предстовляет,ваши советы о нем!

    Всего записей: 10 | Зарегистр. 01-08-2007 | Отправлено: 22:58 12-08-2007
    CEMEH



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

    Всего записей: 237 | Зарегистр. 17-09-2006 | Отправлено: 23:28 12-08-2007 | Исправлено: CEMEH, 00:43 13-08-2007
    Xelag

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос закрыт. Спасибо.

    Всего записей: 1 | Зарегистр. 14-08-2007 | Отправлено: 11:53 14-08-2007 | Исправлено: Xelag, 13:55 14-08-2007
    ol7ca

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет, авторитеты! Я в VBA новичок. Подскажите, как в VBA выполнить функцию ВПР или СУММЕСЛИ. т.е. надо найти значение на пересечении конкретных строк и столбцов а затем это значение вставить на пересечении конкретных строк и столбцов в другом файле. спасибо.

    Всего записей: 125 | Зарегистр. 01-02-2007 | Отправлено: 19:01 14-08-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