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

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    кто использовал ScreenUpdating для ускорения выполнения макроса?
     
    Добавлено:
    а так же Application.Calculation = xlCalculationManual а может ещё чего есть?
     
    Добавлено:
    эти две штуки просто в разы нереальные разы увеличели выполнение макроса!!! я очень доволен!

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



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

    Цитата:
    ScreenUpdating для ускорения выполнения макроса

    Главное не забыть вернуть назад. А так - да, ускоряет. А интересно, что будет, если до восстановления значения true макрос завершится по ошибке? Или завершит своё выполнение скажем END или EXIT (SUB/Function/FOR/DO/While)?
     

    Цитата:
    Application.Calculation

    Это лучше не трогать, если не особый случай. У тебя не будут пересчитываться формулы.
     
     
    Добавлено:
    vasiliy74

    Цитата:
    Код:With Worksheets("Total_E")  
        Set start_cell = .Cells(1, "O")  
        Set out_r1 = Range(start_cell.End(xlDown).Offset(3, 0), start_cell.End(xlDown).Offset(65000, 0))  
        Set out_r = Range(Cells(start_cell.End(xlDown).Row + 3, "B"), "B65000")  
    End With

     
    В  "Set out_r1 = ..." данные берутся из листа, указанного в start_cell . With влияет только на ".cells()" и ".range()".
    В строчке "Set out_r =" у тебя "Cells()" указывает на текущий лист (ты что-то забыл такое маленькое поставить...) , а также вторая ячейка твоего диапазона "B65000" тоже указывает на текущий лист, поскольку использован "Range()" без ссылки на книгу/лист. В общем, надо эту строчку переписать заново, так запутаться недолго.
     
    Добавлено:
    With у тебя влияет только на следующую за ним строку, а 2 другим на него наплевать.
     
    Добавлено:
    А ещё выполнение макроса ускоряется, когда ты избегаешь выделений и активаций (*.Select, *.Activate).

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 16:01 03-08-2007 | Исправлено: nick7inc, 16:19 03-08-2007
    dummy84

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    Application.ScreenUpdating = False больше в цикл засовывать не буду спасибо,  
    а как мне скопировать этот диапазон? я просто частенько импортирую с нашего програмного обеспечения SAP в ексель таблицы с данными о платежах, структура импортированого листа такая что сначала идет заголовок таблицы, всякие значки валют и все такое, а вот только потом таблица и просто каждый раз величина диапазона разная и начинаеться он с разных ячеек, например в ячейке D10 или h30, ну допустим правый нижний угол диапазона я найду, а вот верхний левый не знаю как найти, ведь перед ним есть не пустые ячейки. Тоесть я хочу что бы макрос сам открывал этот файл и из него вытягивал эту таблицу и обрабатывал. Это конечно можно сделать и вручную, но так было бы приятней.  
    правда тут еще есть момент в верхнем левом углу таблицы содержиться текст "код валюты", можно ли как то привязаться к кординате этой ячейки и потом копировать этот диапазо как range(cells(левый верхний угол), cells(lastrow, lastcolumn))?  
    если кто-нибуть знает как это реализовать пожалуста помогите. Спасибо...

    Всего записей: 29 | Зарегистр. 11-07-2007 | Отправлено: 17:47 03-08-2007
    nick7inc



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

    Цитата:
    копировать этот диапазо как range(cells(левый верхний угол), cells(lastrow, lastcolumn))

    Если известны 2 диагональные ячейки, то можно сознать объект Range и его копировать.
    Здесь есть пример копирования.
     
    Добавлено:
    Если source объект типа Range, то можно написать:

    Код:
     
    set source = Range( SomeWorksheet.cells(r1,c1), SomeWorksheet.cells(r2,c2))
     

    Где SomeWorksheet - объект, указывающий на лист, с которого копировать будем,
    r1,c1, r2,c2 - индексы ячеек. Можно координаты и в буквенной форме задать, но чуть иначе.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 18:24 03-08-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dummy84
    nick7inc
    а ещё быстрее (и удобнее) будет копирование не через буфер, а через метод диапазона Range (кусочек - пример из другого кода, поэтому на i и j внимания не обращаем ;-)))
      Set w1 = ThisWorkbook.Worksheets("Work") 'Nazvanie lista, na kotorom vvodatsay dannye'  
      Set w2 = ThisWorkbook.Worksheets("DB") 'Nazvanie lista, kuda budem kopirovat'  
      w1.Activate  
      ...  
      Range(Cells(i, 1), Cells(i, 10)).Copy w2.Cells(j, 1)
     
     
    Добавлено:
     
    dummy84

    Цитата:
    в верхнем левом углу таблицы содержиться текст "код валюты", можно ли как то привязаться к кординате этой ячейки  

    Так находите (хоть поиском, хоть перебором ) ячейку с текстом "код валюты",
    правый нижний угол, по Вашим словам, Вы уже умеете искать,
    а потом  
      Range( Cells(<левый верхний угол>), Cells(<правый нижний угол>).Copy <КудаКоп-ть>

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Каким образом реализовать такую задачку:
     
    Есть лист1 в котором столбец а содержит фамилия_имя_отчество
    Каким образом заставить UserForm в поле для ввода текста подставлять возможные фамилия_имя_отчество из столбца A:A?
    Что то подобное происходит при наборе имени адресата в Outlook. Если фамилия меня устраивает (Я набрал всего две-три буквы) я жму CommandButton1 и в ячейку A1 на Лист2 подставилась фамилия_имя_отчество целиком.  
     
    VBA только начал изучать, осваиваю запись макросов )))

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ладно, фиг с ней, с автоподстановкой...
     
    Вопрос 2:
    Создается база данных, в которую очередной строкой записываем данные из формы после нажатия кнопки ввод. Но для начала считаем непустые строчки
    Sub FormsRun()
        Dim r As Range ' где у нас последняя заполненная строчечка в столбце А:А ?
        Set r = Range("A:A")
        конец = (r.Columns.End(xlDown).Address)
        UserForm1.Show ' идем выполнять форму
    End Sub
     
    Тупо данные занести в указанные ячейки можно так:
    Private Sub CommandButton2_Click()
        Range("A2").Value = UserForm1.TextBox1.Text
        Range("C2").Value = UserForm1.Calendar1
        Range("D2").Value = UserForm1.CheckBox1
        Range("E2").Value = UserForm1.OptionButton5
        Range("F2").Value = UserForm1.OptionButton4
        Range("G2").Value = UserForm1.ListBox1
    End Sub
     
    Отсюда вопрос: Как обозвать ячейку для записи в столбце А и строкой "конец+1" ? (собственно какой синтаксис для такой команды)
     
    Вопрос 3:
    Как данные из ListBox вставить в ячейки?  меня в  ListBox пять столбцов и если я пишу:
     
    Range("G2").Value = UserForm1.ListBox1' то естественно у меня в ячейку G2 вставляется только из первого столбца ListBox. Может через запятую? Сейчас попробую.
     
    Пока все.
     
    Добавлено:
    Нет. через запятую в указанные ячейки вставляется одно и тоже значение первого столбца ListBox/
     
    Добавлено:
    И еще вопрос 4:
    Как заставить TextBox писать не в одну строчку, а переносить слова?

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

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    CEMEH
    ответ на Вопрос 2) каждый раз по нажатию кнопки определяйте последнюю ячейку в столбце и заполняйте от неё

    Цитата:
    Private Sub CommandButton2_Click()  

      Ваш код вернёт объект типа Range (грубо говоря ссылку на ячейку), причём это не  
         последняя использованная, а первая после пустой - если в столбце A есть пустоты -     будут проблемы ;-))
      Мне больше нравится такой вариант определения последней занятой строки
      ' Определить число используемых рядов:  
      nr = ActiveSheet.UsedRange.Rows.Count  
      ' Прыгаем вверх до последней заполненной ячейки:  
       lastrow = Cells(nr,col).End(xlUp).Row  
        ' где col - номер нужного столбца  
     
    т.о. можно использовать код
      Private Sub CommandButton2_Click()
      Dim Lastrow as Long
      lastrow = Cells(ActiveSheet.UsedRange.Rows.Count,1).End(xlUp).Row  
    дальше уже совсем просто:
      Cells(LastRow + 1, "A").Value = UserForm1.TextBox1.Text  
      Cells(LastRow + 1, "C").Value = UserForm1.Calendar1  
      ....
    Правда, Вас подстерегает одна засада! Вы определяете последний занятый ряд в столбце A - а пишете в столбцы C, D, E, F, G ... а там может быть больше строчек занято, чем в столбце A
    впрочем, это Ваше дело...
       
    полуответ на Вопрос 3)  
      никогда не работал с элементами управления... сорри... %-(( но кое-что скажу, куда копать - а дальше Вы уж сами!
      если у Вас пять столбцов, то как Вы хотите их вставить в ОДНУ бедную ячейку G2 ?!
      всё значения через запятую?!
    ну, можете использовать такой код
      Dim AllListBox As String
      Dim i as Integer
      AllListBox = ""
      For i = 0 To ListBox1.ColumnCount - 1
       AllListBox = AllListBox & "," & ListBox1.Column(i)
      Next i
      Cells(2, "G").Value = AllListBox
       

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    По ответу 2
    Поиск следующей пустой строки
    У меня создается таблица - некая база данных. При очередном занесении в базу данных (заполняется в строку) ячейки в столбце A:A будут заполнятся обязательно (отсальные в строке не все и не всегда) Если вдруг появляется пустая ячейка в A:A(удалял из базы данных ранее) то ничего страшного - пусть пишет в эту строку. Разумеется вычислять последнюю не пустую строку надо каждый раз по щелчку CommandButton2 (вычисляем пустую, заносим данные).
     
    Сейчас буду пробовать ваш совет. Спасибо огромное.
     
     
    пс
    Сильно не пинайте, я сегодня второй день как программист )))

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    спасибо вам теперь мой макрос работает вродибы коректно, пока еще чего нибуть не найду всегда что-то появляеться то идеи то ошибки. спасибо вам за активную помощь.

    Всего записей: 29 | Зарегистр. 11-07-2007 | Отправлено: 14:39 05-08-2007
    CEMEH



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Напишите мне макрос!
     
    Я прекрасно понимаю, что подобная форма не приветствуется в этой теме но...
    Для изучения современных языков программирования нужна Хорошая(!) литература. А я ее так и не нашел. Авторы лезут в какие то дебри, прыгают с одной темы на другую так и не сумев донести до читателя суть написанного. (Книги должен писать писатель, а не программист)!
     
    Итак Задача: Надо из текстового поля в форме вставить значение в столбец А в первую непустую ячейку по нажатию кнопки.
    Испробывал свой способ, испробовал способы из темы
    пробовал циклы, операторы If then Y=Y+1 все ГЛЮЧИТ!!!
     
    Что такое Dim ? Как поставить метку на которую ссылается оператор условия?
    Короче труба! авторы книжулек либо не знали о чем пишут, либо слишком много знают, поэтому пишут не то.
     
    ПС
    Раньше программировал, и довольно лихо. На Бэйсике. На компах с процом Z80
    И литература была не то что сегодняшняя!
     
    Короче накипело.
    Извиняюсь за флейм. Выходные убил на х. И результат=0
     
    Добавлено:
    Вот как это выглядит на нормальном бэйсике
    10 Dim A%(10,1000): Rem значком % заменил обозначение текстовой переменной какой нужен, той нет на клавиатуре.
    20 For Y=0 to 1000
    30 If A%(0,y)<>"" then 50
    40 Input "Введите очередное значение" А%(0,Y)
    50 Next
    60 Print "Все, база заполнена, свободного места нет"
    70 End

    Всего записей: 237 | Зарегистр. 17-09-2006 | Отправлено: 21:11 05-08-2007
    aks_sv

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

    Цитата:
    Set w1 = ThisWorkbook.Worksheets("Work") 'Nazvanie lista, na kotorom vvodatsay dannye'  
      Set w2 = ThisWorkbook.Worksheets("DB") 'Nazvanie lista, kuda budem kopirovat'  
      w1.Activate  
      ...  
      Range(Cells(i, 1), Cells(i, 10)).Copy w2.Cells(j, 1)  

     
    Так не правильней?

    Код:
    Range(Cells(i, 1), Cells(i, 10)).Copy Destination:=w2.Cells(j, 1)

     
     
    Добавлено:
    CEMEH

    Цитата:
    Итак Задача: Надо из текстового поля в форме вставить значение в столбец А в первую непустую ячейку по нажатию кнопки.


    Код:
    Sub CmdOK_Click()
    Dim LastRow As Long
        LastRow = Range("A65536").End(xlUp).Row + 1
        Cells(LastRow, 1).Value = TextBox1.Value
    End Sub


    Всего записей: 109 | Зарегистр. 18-12-2006 | Отправлено: 09:03 06-08-2007 | Исправлено: aks_sv, 09:05 06-08-2007
    vasiliy74



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    nick7inc
    Спасибо, я понял как правельно With использовать, а про завершение ошибкой не подумал а что если закрыть и открыть файл? в случае ошибки? начнуться считать? а вообще то ошибку надо придумать, понять так сказать, как может быть такое что макрос не выполинтся?
     
     
     
    Добавлено:
    есть вопрос про for как сделать шаг через один? Ну если не считать if чётные не чётные...
    например  

    Код:
    For c1 = index_start To index_finish
    но нужно слеать не с1= 1,2,3,4,5... а с1=1,3,5,7,... или с1=1,4,7,10,13... в таком духе можно ли задать шаг?
     
    Добавлено:
    на уровни модели данных, для екселя как кто представляет структуру данных, вычисления функции, макросы и т.п. или может кто в книге какой читал про это?

    Всего записей: 289 | Зарегистр. 21-02-2006 | Отправлено: 12:12 06-08-2007 | Исправлено: vasiliy74, 12:16 06-08-2007
    DavidKATS

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет! Принимайте в свои стройные ряды! Надеюсь, буду активно поститься вместе с вами.  
    И вот сразу вопрос: МОЖНО ЛИ сделать так, чтобы книга работала в многопользовательском режиме? То есть, чтобы одновременно с рабочей книгой по сети работало несколько пользователей. Причем, чтобы каждый из них мог бы вносить в нее изменения. чтобы программа не сообщала, что мол книга уже используется, так что юзай ее теперь только для чтения.

    Всего записей: 10 | Зарегистр. 06-08-2007 | Отправлено: 14:05 06-08-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DavidKATS
     
    ответил Вам там, где положено - ответ в теме Excel FAQ (часть 3)
     
    Добавлено:
     
    vasiliy74
    Цитата:
    For c1 = index_start To index_finish  
    но нужно слеать не с1= 1,2,3,4,5... а с1=1,3,5,7,... или с1=1,4,7,10,13... в таком духе можно ли задать шаг?  

     
    два варианта:
    1) есть цикл while ... wend
      i=1
      while i<=1000
        i = i + 3
      wend
     
    2) если так хочется через For (ну, или если какие-то действия нужны для каждого i )- то можно так
      For i = 1 To 1000
        If (i Mod 3) = 1 Then
          ... тут действие при i=1,4, 7, 10.... (т.е. где остаток от деления на 3 равен 1)
        End If
      Next i

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vasiliy74
    СУПЕР!!!! ОГРОМНОЕ СПАСИБО!
    Иду брать "0/5" надо это дело отпраздновать!!
     
    Вопрос:
    Какую галку надо поставить, чтобы ListBox можно было крутить колесом мышки?
    (испробовал вроде все, единственное, что смог сделать это изменить вид указателямышки)
     
     
    Добавлено:
    И еще:
    Что не так?
     
        If OptionButton1 = 1 Then A = "Первое"
        If OptionButton2 = 1 Then A = "Второе"
        If OptionButton3 = 1 Then A = "Третье"
        If OptionButton4 = 1 Then A = "Четвертое"
        If OptionButton5 = 1 Then A = "Пятое"
        If OptionButton6 = 1 Then A = "Шестое"
        If OptionButton7 = 1 Then A = "Седьмое"
        Cells(Lastrow, 8).Value = A
    Я не знаю, каким образом из семи OptionButton выбрать значение и вставить его в ячейку. У меня что то не то с синтаксисом... Если вместо "Первое", "второе" ... написать "1". "2". "3" (с кавычками) то значение подставляется, а если оставить слова то пустота (ошибки не выдает) Может надо в начале как нить объявить переменную А, что дескать она текстовая?
     
    Пока возможный вариант такой:
    Cells(Lastrow, 8).Value = OptionButton1.Value
    Cells(Lastrow, 9).Value = OptionButton2.Value
    Cells(Lastrow, 10).Value = OptionButton3.Value
    Cells(Lastrow, 11).Value = OptionButton4.Value
    Cells(Lastrow, 12).Value = OptionButton5.Value
    Cells(Lastrow, 13).Value = OptionButton6.Value
    Cells(Lastrow, 14).Value = OptionButton7.Value
     
    А потом эти столбы скрыть и в другом столбце добавить формулу если ИСТИНА то "первое" и так далее. Но я думаю, есть более простой вариант
     
    Добавлено:
    И еще открытый вопрос:
    Как TextBox сделать, что бы писать не в одну строку, а переносилось по словам?
     
    Добавлено:
    Ответ на последний вопрос будет таким: В свойствах элемента TextBox надо MultiLine перевести в True!
    (метод Научного Стыка рулит)
     
    Добавлено:
    И еще:
    Какой синтаксис у If then ? (особенно, если два оператора после then)
     
    В коде CommandButton1 записал вот так:
        If ListBox1.Column(0) = 0 Then UserForm1
    ругается )))
    То есть, если из списка не выбрано значение то переходим на UserForm1 т.е. вводим все заново (остальные введенные данные из формы никуда не делись) А еще, перед переходом поставить MsgBox "дескать про выбрать из списка забыли"
     
     
    Добавлено:

    Цитата:
    есть вопрос про for как сделать шаг через один?

    Мне еще рано быть советчиком, но в старые добрые времена в Basic-е цикл For Next можно было снабдить мулькой step (т.е. шаг) И синтаксис выглядел так:
     
    For X=0 to 1000 step 2
    .....
    next
     
    Т.е цикл от 0 до 1000 с шагом 2
    Есть ли эта мулька в VBA - не знаю,  
    ...... посмотрел, мулька эта есть. смотри книжульку в шапке темы "Первые шаги с Excel VBA"  Шаг №22.
    ..... испытал, синтаксис правильный, работает.

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

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

    Цитата:
    For X=0 to 1000 step 2  

    ая-я-яй... позор мне... Ну, разумеется, шаг же можно задавать!!!!!!!
    вот к чему приводит долгое программирование на Дельфи...
    в своё оправдание хочу сказать, что предложенные мною способы тоже рабочие...
     

    Цитата:
    объявить переменную А, что дескать она текстовая

    ну, это не проблема.
    dim A As String
     
    вот только мне кажется, что у вас проблема не в этом!
    что даст прямое присвоение
      Cells(Lastrow, 8).Value = "Test Only"
    появится в столбце H текст?
    Может для столбца/ячейки задан формат (например, числовой)?
     

    Цитата:
    Какой синтаксис у If then  

      If <условие> Then
        <оператор>
        ...  
        <оператор>
      [Else
        <оператор>
        ...  
        <оператор>]
      End If
    в [] то, что может быть опущено...
     

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



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

    Цитата:
        If OptionButton1 = 1 Then A = "Первое"  
        If OptionButton2 = 1 Then A = "Второе"  
        If OptionButton3 = 1 Then A = "Третье"  
        If OptionButton4 = 1 Then A = "Четвертое"  
        If OptionButton5 = 1 Then A = "Пятое"  
        If OptionButton6 = 1 Then A = "Шестое"  
        If OptionButton7 = 1 Then A = "Седьмое"  
        Cells(Lastrow, 8).Value = A  

    ИМХО, рациональней в таком случае сделать один ComboBox с семью вариантами, чем клепать 7 OptionButton. Нет?
    Тогда код можно было бы упростить до Select Case либо вообще до:
    Cells(lastrow,8) = Combobox.Value
     

    Цитата:
    В коде CommandButton1 записал вот так:  
        If ListBox1.Column(0) = 0 Then UserForm1  
    ругается )))  
    То есть, если из списка не выбрано значение то переходим на UserForm1 т.е. вводим все заново (остальные введенные данные из формы никуда не делись) А еще, перед переходом поставить MsgBox "дескать про выбрать из списка забыли"  

    Во-первых, чтобы показать форму, надо использовать метод Show.
    Во-вторых, ListBox сейчас помню смутно, но по-моему такое условие проверяет первую колонку на равенство нулю..
    Что значит "если не выбрано значение"? Если ListBox пустой?

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



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

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

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The okk Ура! The okk вернулся!!! С возращением!!!! Отдыхал?... ;-))
     
    сорри за оффтоп.

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 10:50 07-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