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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TNR
    Сделать макро и повесить на кнопку. Код примерно такой:

    Код:
    Sub Archive()
    Shell "path\to\your\file.cmd"
    End Sub

    Подробнее о функции Shell смотри в хелпе.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 08:46 05-10-2006
    TNR



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    А можно без указания определённой папки ?
    Или excel не понимает, что файл находиться в этой же папке ?

    Всего записей: 1761 | Зарегистр. 15-03-2004 | Отправлено: 03:13 06-10-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TNR
    Почему бы не попробовать? Только по-моему директория по умолчанию - My Documents.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 03:33 06-10-2006
    TNR



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

    Всего записей: 1761 | Зарегистр. 15-03-2004 | Отправлено: 04:02 06-10-2006
    NeeDiGeo

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Товарищи что можете сказать о книге Уокенбаха по vba для Excel. Если кому надо можно через поиск на spam_detected

    Всего записей: 52 | Зарегистр. 07-09-2006 | Отправлено: 23:45 07-10-2006 | Исправлено: NeeDiGeo, 23:47 07-10-2006
    DONRU1



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возможно ли с помощью макроса создать ярлык для файла Excel на рабочем столе?

    Всего записей: 32 | Зарегистр. 19-04-2006 | Отправлено: 00:05 09-10-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DONRU1
    Making a short cut icon on the desktop

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет всем есть вопросец по копированию массивов в Excel через OLE.
     
    Есть прикладуха использующая OLE (perl).
     
    Пытаюсь через нее копировать данные в excel  
     
    Как и положено создаю в прикладухе массив, задаю в excel range и далее пишем присваивание
     
    Range1.Value = адресс массива
     
    Эта конструкция в Excel 2003 выполняется примерно 5 секунд
    в предыдыщих версиях Excel примерно 159 секунд.
     
    Все это проверялось на разных машинах, т.е. похоже что дело именно в версиях excel, а не в настройках.
     
    Попытался найти ответ в интернете - ничего не нашел.
     
    В чем может быть дело и, главное, можно ли это как то исправить в предыдущих версиях Excel.
     
    Ответы типа - обнови все excel не предлагать. Фирма работает не честно купленном софте.
     
    Один ответ я уже знаю - скопировать все в файл и потом прочитать его из excel. Работает примерно 10 секунд. Но как-то это не красиво и имеет свои проблемы.
     
    С уважением,
    Сергей.
     
    Добавлено:
    В дополнение к предыдущему посту,
     
    а копирую я примерно так
     
    см.  
    Use automation to transfer an array of data to a range on a worksheet
    в http://support.microsoft.com/kb/247412/EN-US/

    Всего записей: 5 | Зарегистр. 30-09-2006 | Отправлено: 16:26 09-10-2006
    skotov

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте!  
     
    Задача такая - нужен макрос, который бы проверял значения всех ячеек на листе, и если значение равно нулю, очищал бы сожержимое этих ячеек. Во всех ячейках на листе имеются ссылки на другую книгу.
     
    Исходная задача - вставить лист из одной книги в другую в виде ссылок. Если делать через paste special, то вставляются ссылки на все ячейки, включая те, которые не заполнены в исходной книге. В итоге полученный лист с ссылками приходится долго вычищать от нулей.
     
    заранее спасибо за помощь.

    Всего записей: 177 | Зарегистр. 10-03-2003 | Отправлено: 20:07 09-10-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    skotov
    Малость по топорному и на скорую руку, но работает
    Код:
      With ActiveSheet
        For i = 1 To .UsedRange.Rows.Count
          For j = 1 To .UsedRange.Columns.Count
            If .Cells(i, j).Value = 0 Then .Cells(i, j).Clear
          Next j
        Next i
      End With



    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 21:13 09-10-2006
    Sergey MSN

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    skotov
     
    PasteSpecial method as it applies to the Range object.
    .............................
    SkipBlanks   Optional Variant. True to have blank cells in the range on the Clipboard not be pasted into the destination range. The default value is False.
     
     
    SkipBlanks = True подойдет?

    Всего записей: 5 | Зарегистр. 30-09-2006 | Отправлено: 21:52 09-10-2006
    Kurbanov



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня вопрос как можно сделать что бы данные записывались в другую книгу а не в другой лист . Спасибо  
     
     
    Private Sub cboSave_Click()
    Dim TBL(135) As String, KUNNumber As Integer, KUNRow As Integer
    Dim i As Integer
    TBL(1) = textbox1
    TBL(2) = cboPlace
    ...              
    ...
    ...
    For i = 1 To 135
    Worksheets("КУН Таблица").Cells(KUNRow, i).Value = TBL(i)

    Всего записей: 4 | Зарегистр. 10-08-2006 | Отправлено: 09:01 10-10-2006
    skotov

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sergey MSN
    Когда вставляешь в виде линка эта опция недоступна.
     
    Troitsky
    Спасибо, работает (правда очень долго). С описанной мной выше задачей справляется, но есть один косяк. Если на исходном листе в ячейке забита формула, которая возвращает ноль, то после применения этого способа на новом листе соответствующая ячейка очищается.  
     
    В связи с этим задачу пришлось немного усложнить. цель та же - скопировать лист в другую книгу в виде ссылок на исходную книгу. Однако копировать ссылки надо только на те ячейки, которые непустые в исходной книге (т.е. в которых либо ссылки / формулы, либо значения.) Также желательно, чтобы копировался формат.
     
    Заранее спасибо

    Всего записей: 177 | Зарегистр. 10-03-2003 | Отправлено: 14:50 10-10-2006
    Yuk



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

    Цитата:
    скопировать лист в другую книгу в виде ссылок на исходную книгу. Однако копировать ссылки надо только на те ячейки, которые непустые в исходной книге (т.е. в которых либо ссылки / формулы, либо значения.) Также желательно, чтобы копировался формат.  

    Примерно так:
    Код:
    Sub MakeLinks()
    For Each c In ActiveSheet.UsedRange.Cells
        If Not IsEmpty(c) Then
            Workbooks("Book2").Sheets(1).Cells(c.Row, c.Column).Formula = _
                "='[" & ActiveWorkbook.Name & "]" & ActiveSheet.Name & "'!" & c.Address( _
                RowAbsolute:=False, ColumnAbsolute:=False)
        End If
    Next
    ActiveSheet.UsedRange.Copy
    Workbooks("Book2").Sheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteFormats
    Application.CutCopyMode = False
    Workbooks("Book2").Sheets(1).Activate
    Cells(1, 1).Select
    End Sub

     
    Kurbanov

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

    Workbooks("Book name").Worksheets("Sheet name").Cells(...
     

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Спасибо, но я видимо что-то делаю не так. На строке  

    Код:
    Workbooks("Book2").Sheets(1).Cells(c.Row, c.Column).Formula = _
                "='[" & ActiveWorkbook.Name & "]" & ActiveSheet.Name & "'!" & c.Address( _
                RowAbsolute:=False, ColumnAbsolute:=False)

    выдает ошибку Subscript out of range.
     
    Перед запуском я создал книгу с именем Book2 в той же директории и открыл ее. Что я сделал не так? Сорри если вопрос слишком глупый..))

    Всего записей: 177 | Зарегистр. 10-03-2003 | Отправлено: 11:40 11-10-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    skotov
    Проблема скорее всего в имени новой книги. Возможно надо "Book2.xls". Или можешь определить имя через код:
    Код:
    Sub CheckBookName()
        MsgBox ActiveWorkbook.Name
    End Sub

     
    Если тебе надо сохранять в новую книгу, используй лучше такой код:
    Код:
    Sub MakeLinks()
    Dim ash As Worksheet
    Dim ab As Workbook, nb As Workbook
    Set ash = ActiveSheet
    Set ab = ActiveWorkbook
    Set nb = Workbooks.Add
     
    For Each c In ash.UsedRange.Cells
        If Not IsEmpty(c) Then
            nb.Sheets(1).Cells(c.Row, c.Column).Formula = _
                "='[" & ab.Name & "]" & ash.Name & "'!" & c.Address( _
                RowAbsolute:=False, ColumnAbsolute:=False)
        End If
    Next
    ash.UsedRange.Copy
    nb.Sheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteFormats
    Application.CutCopyMode = False
    nb.Sheets(1).Activate
    Cells(1, 1).Select
    End Sub

    Новая книга создается автоматом.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 23:40 11-10-2006
    thefrilos



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

    Код:
    Sub Password_Cracker()
       
      Dim i As Integer, j As Integer, k As Integer
      Dim l As Integer, m As Integer, n As Integer
      Dim i1 As Integer, i2 As Integer, i3 As Integer
      Dim i4 As Integer, i5 As Integer, i6 As Integer
      On Error Resume Next
      For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
      For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
      For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
      For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
         
     Kennwort = Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
     ActiveSheet.Unprotect Kennwort
     If ActiveSheet.ProtectContents = False Then
         MsgBox "Done" & vbcr & "enjoy it )"
           Exit Sub
      End If
      Next: Next: Next: Next: Next: Next
      Next: Next: Next: Next: Next: Next
     
    End Sub
     
     

    Всего записей: 79 | Зарегистр. 14-04-2004 | Отправлено: 01:58 12-10-2006 | Исправлено: thefrilos, 02:01 12-10-2006
    skotov

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

    Всего записей: 177 | Зарегистр. 10-03-2003 | Отправлено: 11:34 13-10-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    skotov
    Вставь перед End If:
    Код:
    nb.Sheets(1).Rows(c.Row).RowHeight = c.RowHeight
    nb.Sheets(1).Columns(c.Column).ColumnWidth = c.ColumnWidth

    Не уверен, как это будет работать на листах со сложным дизайном. Пробуй.
     
     
    Добавлено:
    Troitsky
    Спасибо за обновление шапки. Все руки не доходят.
     
    Мемберы, помогайте. Если вы нашли решение, которого нет в шапке и которое может быть полезно другим, поместите ссылку не него в шапку.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 19:45 13-10-2006
    skotov

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Еще раз огромный респект. все работает как часы.

    Всего записей: 177 | Зарегистр. 10-03-2003 | Отправлено: 10:08 16-10-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