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

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

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

ShIvADeSt (23-04-2007 01:59): http://forum.ru-board.com/topic.cgi?forum=33&topic=8273  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

RUSmafia



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

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

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами 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.
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов

  • Всего записей: 556 | Зарегистр. 31-07-2002 | Отправлено: 21:40 14-10-2004 | Исправлено: lucky_Luk, 20:44 13-04-2007
    Yuk



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

    Цитата:
    Твой макрос,уважаемый Yuk, почему-то у меня вообще ничего не делает...

    Исходные ячейки выделял?
     

    Цитата:
    Макрос RedPromo выдаёт ошибку...

    в коментах заменить // на '

    Цитата:
    PreStr = PreStr + rw.Cells(1, 1).Value

    Здесь надо & вместо +
     
    Ты писал. что возможны ячейки с текстом. Где они в примере?

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 22:27 25-07-2006
    RedPromo



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

    Цитата:
    Здесь надо & вместо +  

    Не обязательно работает и так.
     
    Мой пример полностью проверен. Единственное что так это коменты их я дописывал после уже я просто подумал что это очевидно тх убрать.
    Да и еще что хорошего макросе Yuk так это проверка на тип возвращаемого значения если в моем примере попадется чило скорее всего будет Exseption.
     
    Добавлено:
    agrippa
    Выложи свой лист с данными котрые нуно обработать а то дествительно ничего не понятно.
    Насчет создать лист это тоже не проблема просто нужно понять конкретно что ты хочеш. А то видиш два человека и поразному понимают посталеную задачу.

    Всего записей: 558 | Зарегистр. 05-04-2006 | Отправлено: 23:58 25-07-2006
    agrippa

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Исходные ячейки выделял.  
    Ячейки с текстом и пустые ячейки можно считать за одно и тоже,т.е. там,где я пропускал строку(оставлял пустой) может быть текст...
     
     
    Коменты,в примере RedPromo вообще удалил..  
     
    А как сюда файл выложить???
     
     
                                
                                            
    0.25
    556.0   516.0   0.0   0.0   0.0  104.0  548.0  2956.0  3048.0  572.0  2696.0  
    0.50
    556.0   520.0   0.0   0.0   0.0  144.0  540.0  2956.0  3048.0  572.0  2692.0  
    0.75
    560.0   524.0   0.0   0.0   0.0  128.0  540.0  2956.0  3044.0  572.0  2708.0  
    1.00
    560.0   520.0   0.0   0.0   0.0  148.0  540.0  2956.0  3052.0  572.0  2692.0  
     
     
    Условия запуска : давление Рн = 735.6 мм.рт.ст.; температура в боксе  Тн =   0.0 °С                    
    T= 0.25 c
     
     
    0.25
    3088.0  772.0  756.0  3076.0   0.0  6180.0  6360.0  3192.0  536.0   0.0   4.0  
    0.50
    3088.0  776.0  748.0  3076.0   0.0  6180.0  6356.0  3188.0  528.0   0.0   0.0  
    0.75
    3088.0  772.0  748.0  3080.0   0.0  6184.0  6360.0  3184.0  536.0   0.0   0.0  
    1.00
    3096.0  784.0  752.0  3088.0   0.0  6200.0  6376.0  3200.0  540.0   0.0   0.0  
     
     
    Примерно так...
     
     

    Всего записей: 17 | Зарегистр. 22-07-2006 | Отправлено: 00:06 26-07-2006 | Исправлено: agrippa, 00:21 26-07-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    agrippa
    Я так понимаю, это реальные данные.
    Во-первых, ты нигде не писал, что у тебя есть другие колонки. Они нужны? Что с ними делать?
    Во-вторых, эксель русский или английский? Что есть десятичный разделитель - точка или запятая? Распознаются ли твои ячейки как числовые в экселе (например функцией СУММА)?
    Если нет, макрос естественно ничего делать не будет, так как он скипывает текст.
     
    Файл обычно выкладывают через какой-нибудь обменник (только не рапида плиз).
     
     
    Добавлено:
    Пока примерно так. Без остальных столбцов.

    Код:
    Sub MergeCells2()
        Dim first As Boolean
        Dim newarea As Boolean
        Dim row1 As Long, row2 As Long
        Dim ur As Range
        Dim c As Range
        Dim tmpstr As String
         
        first = True
        newarea = True
        row1 = 1
        row2 = 1
        Set ur = ActiveSheet.UsedRange.Columns(1).Cells
        For Each c In ur
            If IsNumeric(c) And Not IsEmpty(c) Then
                If newarea Then
                    ActiveWorkbook.Worksheets.Add After:=Worksheets(Worksheets.Count)
                    newarea = False
                    row1 = 1
                    row2 = 1
                End If
                ActiveSheet.Cells(row1, 1).Value = c.Value
                row1 = row1 + 1
                If first Then
                    tmpstr = c.Value
                    first = False
                Else
                    ActiveSheet.Cells(row2, 3).Value = tmpstr & c.Value
                    first = True
                    row2 = row2 + 1
                End If
            Else
                newarea = True
            End If
        Next
    End Sub


    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 00:56 26-07-2006
    agrippa

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    http://dl.axifile.com/37dd99cae046230aa55ed52cb4ff356f/8575559!.xls
     
    вот ссылка на задание

    Всего записей: 17 | Зарегистр. 22-07-2006 | Отправлено: 07:53 26-07-2006
    Yuk



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

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 08:45 26-07-2006
    DeadVillage



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    agrippa
    Вам следует постить не ссылку, которую сайт генерит, а то, что Вам сайтом было дано после закачки.

    Всего записей: 652 | Зарегистр. 05-12-2003 | Отправлено: 18:16 26-07-2006 | Исправлено: DeadVillage, 18:21 26-07-2006
    agrippa

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    http://195.210.38.23:2082//dl/f51a1bfb2e004ed2238ce72123b1b0f6/44c77b66/files/260706/1153923930/LAR.exe  
     
    Там нажать Click Here To Download!
     
     
    Вроде скачивается...

    Всего записей: 17 | Зарегистр. 22-07-2006 | Отправлено: 18:27 26-07-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    agrippa
    Эта ссылка привязана к сессии на твоем компьютере. Больше ни у кого она не откроется.
    После закачки файла сервис должен тебе выдать ссылку, которую можно послать кому угодно. Смотри внимательно.
    Жду ответов на мои вопросы. Последний макрос пробовал?

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 18:37 26-07-2006
    agrippa

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Да,пробовал... Как-то у меня странно работает,не так,как задумано было...
     
    Я может на почту вам скину или на асю,если она у вас есть,Yuk...
     
    Моя ася: 217-355-077
    Моя почта:agrip@pochta.ru

    Всего записей: 17 | Зарегистр. 22-07-2006 | Отправлено: 19:11 26-07-2006
    Yuk



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

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 20:10 26-07-2006
    agrippa

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

    Всего записей: 17 | Зарегистр. 22-07-2006 | Отправлено: 20:39 26-07-2006
    RobinStone

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    спасибо тем кто ответил
    обратиться к элементу по имени я теперь могу:
    NameVar = "someControl"
    Form_MyForm.Controls(NameVar).Value = "Something"
     
    А вот как создать элемент которого не сущестует
    собственно задача:
    есьт таюлица в ней два поля Имя и Значение
    надо на форму вывести некое количество элементов Надпись с Caption=Имя
    И несколько полей с Value=Значение
     
    Пытаюсь делать так
    Application.CreateControl("MyForm", ........)
    не помню как точно там параметры, но указываю по стправке
    в ответ на это выдает ошибку: "...возможно только в режиме конструктора"
     
    как добавить? - подскажите!!

    Всего записей: 14 | Зарегистр. 27-06-2006 | Отправлено: 05:13 27-07-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RobinStone
    Не понял. В Экселе элемент формы создается через Form.Controls.Add, a CreateControl вроде из Аксесса.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 06:21 27-07-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    agrippa
    Файлы получил. Текстовые. Запятые вперемешку с точками.
    Вот как это выглядит на самом деле:
    Код:
    18,07    .06    испыт    ание N    5    Стенд    N 5    уст.N 1    МРЧ    N 8    кол. зон 2
    T= 0,    25 c                                    
     
    0,25                                        
    548    504.0    0.0    0.0    0.0    108.0    540.0    2944.0    3040.0    624.0    2284.0
    0,5                                        
    552    504.0    0.0    0.0    0.0    120.0    536.0    2948.0    3040.0    616.0    2296.0
    ......

    Короче, ты сначала сам разберись с тем, что тебе такую хрень выдает, и что ты из этого хочешь, а потом вопросы здесь задавай. Может, кто и ответит.  

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 17:33 27-07-2006
    zQuatroz

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо за помощь RedPromo & agrippa.
    agrippa
    благодарю за помощь. Записнушка была написана по сходному алгоритму(дали пару советов добрые люди) так что считаю вопрос исчерпаным.
    Еще раз спасибо.

    Всего записей: 31 | Зарегистр. 05-12-2005 | Отправлено: 01:40 28-07-2006
    jtyler



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как проверить формат ячейки и если он не числовой исправить на числовой?
     
    Добавлено:
    Я имею ввиду то, что в ячейках содержаться числа вида 23,2345334   но в формате string
    как их преобразовать в double, чтобы сравнивать
     
    Добавлено:
    При нажатии на кнопку создается chart  с графиком как к нему обратится, чтобы удалит во время события Worksheet_SelectionChange ?
     

    Всего записей: 8 | Зарегистр. 27-07-2006 | Отправлено: 15:14 28-07-2006
    Yuk



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

    Цитата:
    Подскажите как проверить формат ячейки и если он не числовой исправить на числовой?
    Если через формулу:
    Код:
    =ЕСЛИ(ЕЧИСЛО(A1);A1;ЗНАЧЕН(A1))

     
    Добавлено:
    Или просто
    Код:
    =ЗНАЧЕН(A1)
    Проверять не обязательно.
     
    Или вот так.
    Код:
    ЕСЛИ(ЕЧИСЛО(ЗНАЧЕН(A1));ЗНАЧЕН(A1);A1)

     
    Добавлено:
    В макросе
    Код:
    On Error Resume Next 'проигнорировать, если нельзя конвертнуть
    Selection.Value = CDbl(Selection.Value)

     
     
    Добавлено:
    Чет я подумал, может я вопрос не правильно понял.
    Может, это надо?
    Код:
    If Selection.NumberFormat = "General" Then
        Selection.NumberFormat = "0.00"
    End If


    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 18:10 28-07-2006 | Исправлено: Yuk, 03:56 29-07-2006
    agrippa

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
     
     
    Там должны быть только числа.
    0,25                                          
    548    504.0    0.0    0.0    0.0    108.0    540.0    2944.0    3040.0    624.0    2284.0  
    0,5                                          
    552    504.0    0.0    0.0    0.0    120.0    536.0    2948.0    3040.0    616.0    2296.0  
     
     
     
    Просто в первом столбце у меня даты были текстом написаны... Т.е. вместо 0,25 было янв.25
    .... И т.д.
    А разделитель должен быть одинаковым...

    Всего записей: 17 | Зарегистр. 22-07-2006 | Отправлено: 20:46 28-07-2006 | Исправлено: agrippa, 20:48 28-07-2006
    Yuk



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

    Цитата:
    При нажатии на кнопку создается chart  с графиком как к нему обратится, чтобы удалит во время события Worksheet_SelectionChange ?

    Добавляем в начало модуля с твоей функцией
    Код:
    Public crt As String

    Затем в саму функцию
    Код:
    crt = ActiveChart.Parent.Name

    crt - это имя объекта ChartObject текущего листа. Именно его надо удалять.
    Затем в код листа
    Код:
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        On Error Resume Next
        ChartObjects(crt).Delete
    End Sub

    У этого метода есть недостатки. При переходе с графика на другой лист, график не удаляется. Если юзер переходит на туже ячейку, в которой был до создания графика, график не удаляется.  
     
    Другой метод - Создать свой класс типа Chart и прописать там реакцию на событие Deactivate. Использовать этот класс для создания графика. Думаю, наиболее правильное решение.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 21:01 28-07-2006
       

    Страницы: 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

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA
    ShIvADeSt (23-04-2007 01:59): http://forum.ru-board.com/topic.cgi?forum=33&topic=8273


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru