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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
    Да, действительно, именно этого и не хватало!
     
    Troitsky
    The okk
    Yuk
    Спасибо Вам Всем За Помощь!

    Всего записей: 683 | Зарегистр. 05-08-2004 | Отправлено: 17:26 11-01-2007 | Исправлено: alin, 17:28 11-01-2007
    WWWovan



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Праздники прошли...
    Попытаю счастья еще раз...
    Каким образом подставить данные с определенного поля(Счет номер...) в диалог сохранинеия файла, а точнее как имя файла? Документ перед этим сохранять нельзя.
     


    ----------
    Не несу ответственность за случайно допущенные орфографические ошибки.

    Всего записей: 578 | Зарегистр. 15-11-2003 | Отправлено: 17:32 11-01-2007
    vzbzdnov



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

    Цитата:
    FileFormat := xlTextWindows (Текстовые файлы с разделителями табуляции)  

    Тогда сохраняется не текст, а кракозябры. Версия EXCELа - англицкая
     
    Добавлено:
    SERGE_BLIZNUK
    Весь текст выглядит так

    Цитата:
    "рус          717,424,640  avi   01  я купил папу"
    "рус        3,664,581,648  avi  10  я не вернусь"
    "рус          729,561,088  avi   01  я обьявляю вам войну"
    "рус          722,585,600  avi   01  я русский солдат"
    "рус        3,652,987,456  avi  10  я тебя люблю"
    "рус          735,672,320  avi   01  я тебя обожаю"
    "рус          767,226,768  mpg  01  я шагаю по москве"


    ----------
    |^^^пиво^^\\|""\\_,_
    |___________||___|__|)
    (@)(@)""*|(@)(@)**(@)

    Всего записей: 3960 | Зарегистр. 27-03-2002 | Отправлено: 06:38 12-01-2007 | Исправлено: vzbzdnov, 06:44 12-01-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vzbzdnov
    Другими словами, надо выгрузить плэйлист из xls в txt? Или другой формат файла тоже подойдет? Просто у меня проблем никаких не возникает. Даже в Юникод выгружаю - никаких проблем. Табуляцию ставит нормально, никаких лишних кавычек.
     
    WWWovan

    Цитата:
    Каким образом подставить данные с определенного поля(Счет номер...) в диалог сохранинеия файла, а точнее как имя файла?


    Код:
    Application.GetSaveAsFilename InitialFileName:=Cells(1, 1)

    Оно? (будет выводить диалог сохранения, где имя берется из ячейки A1)

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



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

    Код:
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
        Dim bFirstSave As Boolean
        Dim sInitialFileName As String
        Dim vReturnedName As Variant
       
      bFirstSave = ThisWorkbook.Path = ""
       
      If bFirstSave Then
        sInitialFileName = "êíèãà-ñ÷åò " & CStr(ActiveSheet.Range("b2").Value)
        vReturnedName = Application.GetSaveAsFilename(InitialFileName:=sInitialFileName,  _  
                fileFilter:="excel (*.xls), *.xls")
         
        If vReturnedName <> False Then
       
          Application.EnableEvents = False
          ThisWorkbook.SaveAs Filename:=vReturnedName
          Application.EnableEvents = True
           
        End If
         
         Cancel = True
      End If
       
    End Sub
     

     
    Добавлено:
     
    sInitialFileName  - произвольно задаёшь как раз,... с определённого поля

    Всего записей: 324 | Зарегистр. 20-05-2005 | Отправлено: 08:04 12-01-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто-нибудь, вставьте в шапку ссылку Daily Dose of Excel. Там полезные вещи периодически пишут. Вчера, например, писали, как в листбоксе менять местами элементы перетаскиванием (DragDrop).

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 10:15 12-01-2007
    giash



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

    Цитата:
    так может в этом и есть ключ к решению?на открытие вашего документа код в VBA, который проверяет доп.листы и при необходимости корректирует фильтр

    Абсолютно с вами согласен. Но, к сожалению, создание кода выходит за рамки моих возможностей. Увы...

    Всего записей: 10 | Зарегистр. 18-12-2006 | Отправлено: 10:41 12-01-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The okk просто маленький комментарий к вчерашней фразе...

    Цитата:
    Он должен быть открыт (если и должен), только когда ты меняешь ссылку.  

    Это не так.
    =ДВССЫЛ о котором речь шла выше, требует открытой книги (из хелпа):

    Цитата:
     
    Если ссылка_на_ячейку является ссылкой на другую рабочую книгу (внешней ссылкой), другая рабочая книга должна быть открытой. Если это не так, функция ДВССЫЛ возвратит значение ошибки #ССЫЛКА!.  
     

    vzbzdnov

    Цитата:
    "рус          717,424,640  avi   01  я купил папу"  

    как я понял, в Excel кавычек нет - они появляются при сохранении в файл?
    попробуйте такой макрос:
    Код:
     
    Sub WriteToFileTXT()
      Open "C:\Test1.txt" For Output As 1
      Row1 = ActiveWorkbook.ActiveSheet.UsedRange.Row
      Row2 = Row1 + ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count - 1
      MsgBox "Сохраняем строки от " & Str(Row1) & " до " & Str(Row2) & _
         " в файл C:\Test1.txt"
      For I = Row1 To Row2
          Print #1, Cells(I, 1).Value
      Next I
       
      Close 1 ' Закроем файл
       
    End Sub
     

     
     
    Добавлено:
    The okk
    Цитата:
    вставьте в шапку ссылку Daily Dose of Excel.
    Сделал. Спасибо. очень интересно!
     
    giash

    Цитата:

    Цитата:
    так может в этом и есть ключ к решению?на открытие вашего документа код в VBA, который проверяет доп.листы и при необходимости корректирует фильтр
     
    Абсолютно с вами согласен. Но, к сожалению, создание кода выходит за рамки моих возможностей. Увы...  
    ну так помогут... Вы начните с того, что сделайте тестовый файл образец с несколькими (буквально парочкой листов) данными + файлик сводной таблицы (как я понял, он же отдельно у вас лежит) + файлик solme.txt - в котором опишите где файлы, где в файлах что лежит, что нужно получить в итоге. Как этого можно добиться изменяя фильтр (а может кто-то найдёт другой способ, более удобный/эффективный...) - всё запакуйте и положите на хостинг (slil.ru/rapidshare/mytempdir/a.c....)

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто-нибудь знает, где в текстбоксе задается шаблон (если он вообще задается)?
    Надо сделать ##.##.#### (dd.mm.yyyy)
    Или подскажите какой-нибудь похожий контрол, позволяющий задавать шаблоны. Наверняка такой есть. А то лень велосипед изобретать.

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



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Друзья,
    мне помогли с решением моей задачи
    Вот решение:  

    P.S.Может кому понадобится

    Всего записей: 342 | Зарегистр. 08-10-2005 | Отправлено: 11:49 12-01-2007 | Исправлено: ZORRO2005, 14:38 12-01-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZORRO2005
    Посмотрел. Имена диапазонов и использование формул массивов ({}) - вообще сильная штука. Я их недооценивал. Надо будет обязательно изучить.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 14:33 12-01-2007 | Исправлено: The okk, 14:34 12-01-2007
    SERGE_BLIZNUK

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

    Решение красивое! Спасибо, что не поленились поделиться с нами..
    А столбец D как обновлять - ручками?
    При использовании учтите, что ОБЯЗАТЕЛЬНА сортировка в FG !!

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



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

    Цитата:
    При использовании учтите, что ОБЯЗАТЕЛЬНА сортировка в FG  

    Для чего?


    Нашел среди дополнительных контролов массу полезных. Например, календарь (а я уж было его руками делать собрался), причем весьма цивильный и без багов (что для мелко-мягкого вообще фантастика!).
    Нашел нужный мне контрол (TextBox с маской) - зовется Microsoft Masked Edit Control. Полезнейшая штука! Только ошибку выдает при попытке его выложить на форму. Видите ли, с лицензией проблемы.
    У кого-нибудь он нормально на форму выкладывается?
    Microsoft SpreadSheet Control - добавляет на форму подобие листа Excel! Красиво.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 14:46 12-01-2007 | Исправлено: The okk, 15:47 12-01-2007
    SERGE_BLIZNUK

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

    Цитата:
    При использовании учтите, что ОБЯЗАТЕЛЬНА сортировка в FG
     
    Для чего?  

    а вы пробаволи? формулу для валидации столбца B смотрели (вот эту
    Код:
     
    =СМЕЩ($G$1;ПОИСКПОЗ(A2;$F:$F;0)-1;;СЧЁТЕСЛИ($F:$F;A2))
    список берётся от найденной позиции и в количестве сколько в столбце F есть значений месяца...
    попробуйте, что будет для месяца Март, если в поставить в столбце FG
    Код:
     
    Март    3303
    Апрель    4441
    Апрель    4445
    Март    3233
     

     

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 16:19 12-01-2007 | Исправлено: SERGE_BLIZNUK, 16:23 12-01-2007
    NPC



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK спасибо большое работает!
    но иногда бывают 3,2 значные числа, а в шеснатеричном формате надо что бы было всегда по 4 цифры с двух колонок.
    привожу код что бы не искать

    Код:
    Sub Макрос1()
    '
    ' Макрос1 Макрос
    '
    ' Сочетание клавиш: Ctrl+n
    '
      ColumnOfDigit1 = 3 ' константа - номер столбца с первым числом
      ColumnOfDigit2 = 4 ' константа - номер столбца со вторым числом
      ColumnOfMainText = 11 ' константа - номер столбца с текстом
      Row1 = ActiveSheet.UsedRange.Row
      Row2 = Row1 + ActiveSheet.UsedRange.Rows.Count - 1
      For i = Row1 To Row2
        Workbooks("Книга2").Worksheets("Лист1").Cells(i, 1).Value = _
             Hex(Cells(i, ColumnOfDigit1).Value) + Hex(Cells(i, ColumnOfDigit2).Value) + "25002"
        Workbooks("Книга2").Worksheets("Лист1").Cells(i, 2).Value = _
             Cells(i, ColumnOfMainText).Value
      Next i
    End Sub

    Всего записей: 8943 | Зарегистр. 17-02-2005 | Отправлено: 16:21 12-01-2007 | Исправлено: NPC, 16:31 12-01-2007
    ZORRO2005



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

    Всего записей: 342 | Зарегистр. 08-10-2005 | Отправлено: 17:50 12-01-2007 | Исправлено: ZORRO2005, 17:54 12-01-2007
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZORRO2005
    Спасибо за решение. Красиво. Я и забыл, что при наименовании диапазона можно тоже формулу использовать.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 23:13 12-01-2007
    vzbzdnov



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

    Цитата:
    Другими словами, надо выгрузить плэйлист из xls в txt? Или другой формат файла тоже подойдет? Просто у меня проблем никаких не возникает. Даже в Юникод выгружаю - никаких проблем. Табуляцию ставит нормально, никаких лишних кавычек

    Ну, вроде того. Какой другой формат? Хотелось бы, чтоб в конце получился простой текстовый файл. Если у тебя такое работает, то как ты это делпаешь? И какой EXCEL - английский или русский?

    ----------
    |^^^пиво^^\\|""\\_,_
    |___________||___|__|)
    (@)(@)""*|(@)(@)**(@)

    Всего записей: 3960 | Зарегистр. 27-03-2002 | Отправлено: 02:55 13-01-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vzbzdnov
    восьмью постами выше я вами написал программку выгрузки в текстовый файл. Она работает?  
     
    ghost3k

    Цитата:
    добавить в лист/книгу НАПОМИНАНИЕ?  
    Что бы срабатывало при открытии Excel. Например, напоминание изменить в книге/листе что либо

    Так всё таки при открытии книги, или при открытии Excel ?
    Если книги, то в WorkBook_Open :
    Код:
     
    Private Sub Workbook_Open()
      MsgBox "Исправь начисления на втором листе!"
    End Sub
     

    Если Excel - то создай всё тоже самое и сохрани книгу (с любым именем в папке
    "C:\Documents and Settings\...\Application Data\Microsoft\Excel\XLSTART"  
    макрос будет запускаться при открытии Excel
    Таймер тоже можно легко задействовать - что нужно получить то - чтобы сообщение выдалось в заданый день/время?...
     
     
    Добавлено:
    NPC
    попробуйте замените код в цикле на

    Код:
    For i = Row1 To Row2
        sHex1 = Hex(Cells(i, ColumnOfDigit1).Value)
        sHex1 = String(4 - Len(sHex1), "0") & sHex1
        sHex2 = Hex(Cells(i, ColumnOfDigit2).Value)
        sHex2 = String(4 - Len(sHex2), "0") & sHex2
        Workbooks("Книга2").Worksheets("Лист1").Cells(i, 1).Value = _  
            sHex1  +  sHex2 + "25002"  
        Workbooks("Книга2").Worksheets("Лист1").Cells(i, 2).Value = _  
             Cells(i, ColumnOfMainText).Value  
      Next i  
     


    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 09:00 13-01-2007 | Исправлено: SERGE_BLIZNUK, 09:05 13-01-2007
    vzbzdnov



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

    Цитата:
     я вами написал программку выгрузки в текстовый файл. Она работает?  

    Спасибо, работает!!!!

    ----------
    |^^^пиво^^\\|""\\_,_
    |___________||___|__|)
    (@)(@)""*|(@)(@)**(@)

    Всего записей: 3960 | Зарегистр. 27-03-2002 | Отправлено: 21:34 13-01-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

    Компьютерный форум 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