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

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    hackman
    Значение в цикле for меняется. Вот к циклу как раз претензий нет... кроме самого факта его существования.
    А проблема скорее всего в абсолютной адресации. R1C1 - это первая ячейка первого столбца, а R[1]C[1] - это ячейка со смещением в 1 столбец и 1 строку. У тебя у всех ячеек адресация абсолютная. Т.е. во все ячейки будет помещен одинаковый результат (впрочем, по этим иероглифам судить довольно сложно).

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    Большое спасибо, все работает. Просто я с html еще не работала, зато теперь научилась. еще раз спасибо.

    Всего записей: 9 | Зарегистр. 16-04-2007 | Отправлено: 16:49 20-04-2007
    hackman



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    http://forum.ru-board.com/topic.cgi?forum=33&topic=3961&start=2000#18
     
    Виложил просто ето почему то плохо скопировалося из VBA редактора.
    значения data не меняєтся в цикле For а менять все формули и вручну прописовать не хочу.

    Всего записей: 185 | Зарегистр. 22-09-2003 | Отправлено: 17:13 20-04-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    hackman
    А какое значение не меняется? Если data, то во внутреннем цикле по fnum стоит выход

    Цитата:
    If fnum = 17 Then Exit Sub

    так что data принимает только одно значение 105, а значения fnum изменяются от 1 до 16
     

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 17:49 20-04-2007 | Исправлено: AndVGri, 17:50 20-04-2007
    hackman



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AndVGri  
    Но там стоить коментарий. ето я сделал потому что сделано только 17 файлов

    Всего записей: 185 | Зарегистр. 22-09-2003 | Отправлено: 18:10 20-04-2007 | Исправлено: hackman, 18:16 20-04-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    hackman
    За комментарий прошу прощения, проглядел. Так, всё таки какое значение в цикле не меняется? Что получается в ячейках - не ошибка? Пожалуйста, по подробнее
    Да, и такую конструкцию

    Цитата:
     
        If Len(fnum) = 1 Then t = "0" & CStr(fnum): GoTo 5 Else GoTo 10
    10
        t = CStr(fnum)
    5  
     

    замените на t = Format$(fnum, "00")

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 18:17 20-04-2007 | Исправлено: AndVGri, 18:28 20-04-2007
    MORB_id

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот статья по созданию меню. Там не сказано где писать обработчик событий для пункта меню.
    Всё разобрался ответ тут.
    Как на английском будет меню Cервис->Макрос ?

    Всего записей: 1377 | Зарегистр. 13-11-2005 | Отправлено: 11:54 21-04-2007 | Исправлено: MORB_id, 14:47 21-04-2007
    aks_sv

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Может кто подскажет, что сдесь лишнее?
     
    Sub Конвертировать()
    '
        Application.ScreenUpdating = False
        ActiveWindow.TabRatio = 0.335
        Sheets("TDSheet").Name = "Ведомость"
        Sheets.Add
        Sheets("Лист1").Move After:=Sheets(2)
        Sheets("Лист1").Name = "Остаток"
        Worksheets("Остаток").Range("A1").Value = "Наименование"
        Worksheets("Остаток").Range("B1").Value = "Номенклатурный номер"
        Worksheets("Остаток").Range("C1").Value = "Остаток кол-во"
        Worksheets("Остаток").Range("D1").Value = "Остаток цена"
        Worksheets("Остаток").Range("E1").Value = "Приход количество"
        Worksheets("Остаток").Range("F1").Value = "Приход цена"
        Sheets.Add
        Sheets("Ведомость").Select
        ActiveWindow.DisplayOutline = False
        Rows("1:11").Select
        Selection.Delete Shift:=xlUp
        Range("A:A,D:D,F:F,G:G,H:H").Select
        Range("G1").Activate
        Selection.Delete Shift:=xlToLeft
        Range("A1").Select
     
        Dim r As Long, LastRow As Long
        LastRow = Worksheets("Ведомость").Range("A65536").End(xlUp).Row
        For r = 1 To LastRow
            If Cells(r, 1).Font.Bold = True Then
            Rows(r + 1).Delete Shift:=xlUp
            End If
            If Cells(r, 1).Font.Bold = True Then
            Rows(r).Delete Shift:=xlUp
            End If
        Next r
        Dim pSource As Worksheet, pCell As Range
        Dim pDest As Worksheet
        Dim i As Long, pos As Long
         
        Set pSource = ActiveSheet
        Set pDest = Worksheets("Остаток")
        pos = 1&
        For i = 1& To pSource.UsedRange.Rows.Count - 3& Step 4&
            pos = pos + 1&
            Set pCell = pSource.Cells(i, 1&)
            pDest.Cells(pos, 1&).Value = pCell.Value
            pDest.Cells(pos, 2&).Value = pCell.Offset(2&, 0&).Value
            pDest.Cells(pos, 3&).Value = pCell.Offset(1&, 1&).Value
            pDest.Cells(pos, 4&).Value = pCell.Offset(0&, 1&).Value
            pDest.Cells(pos, 5&).Value = pCell.Offset(1&, 2&).Value
            pDest.Cells(pos, 6&).Value = pCell.Offset(0&, 2&).Value
            pDest.Cells(pos, 7&).Value = pCell.Offset(1&, 3&).Value
            pDest.Cells(pos, 8&).Value = pCell.Offset(0&, 3&).Value
        Next i
        Worksheets("Остаток").Activate
        Columns("A:A").ColumnWidth = 40
        Columns("B:B").ColumnWidth = 15.83
        Columns("C:C").ColumnWidth = 11
        Columns("D:D").ColumnWidth = 11
        Columns("E:E").ColumnWidth = 11
        Columns("F:F").ColumnWidth = 11
        Columns("B:B").Select
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
        End With
        Columns("C:C").Select
        Selection.NumberFormat = "#,##0.000"
        With Selection
            .HorizontalAlignment = xlRight
            .VerticalAlignment = xlBottom
            .WrapText = False
        End With
        Columns("D:D").Select
        Selection.NumberFormat = "#,##0.00"
        With Selection
            .HorizontalAlignment = xlRight
            .VerticalAlignment = xlBottom
        End With
        Columns("E:E").Select
        Selection.NumberFormat = "0.000"
        With Selection
            .HorizontalAlignment = xlRight
            .VerticalAlignment = xlBottom
        End With
        Columns("F:F").Select
        Selection.NumberFormat = "#,##0.00"
        With Selection
            .HorizontalAlignment = xlRight
            .VerticalAlignment = xlBottom
            .WrapText = False
        End With
        Rows("1:1").RowHeight = 29.25
        Range("A1:F1").Select
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
        End With
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .WrapText = True
        End With
        Dim FinalRow As Long
            FinalRow = Worksheets("Остаток").Range("D65536").End(xlUp).Row + 1
            Cells(FinalRow, 4).FormulaR1C1 = "=SUM(R2C4:R[-1]C)"
            Cells(FinalRow, 6).FormulaR1C1 = "=SUM(R2C6:R[-2]C)"
            Cells(FinalRow, 4).Font.Bold = True
            Cells(FinalRow, 6).Font.Bold = True
     
        Range("A1").Select
    End Sub

     
     
     
     
     

    Всего записей: 109 | Зарегистр. 18-12-2006 | Отправлено: 15:55 21-04-2007 | Исправлено: aks_sv, 16:00 21-04-2007
    AndVGri

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

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 17:17 21-04-2007 | Исправлено: AndVGri, 18:38 21-04-2007
    aks_sv

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

    Всего записей: 109 | Зарегистр. 18-12-2006 | Отправлено: 20:05 21-04-2007 | Исправлено: aks_sv, 20:06 21-04-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