Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2012, 17:05   #11
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Если высылать клиенту - то с макросами могут быть проблемы. Не всюду они разрешены политикой фирмы.
Всё же тут думаю нужно делать формулами - на 1000 строк ещё реально сделать.
Но в формулах я пас.
Если Вы хотите получить решение, а не беседу на тему - думаю пора Вам показать файл. Что есть и что нужно получить.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 08.10.2012, 02:02   #12
TorLink
Пользователь
 
Регистрация: 06.10.2012
Сообщений: 23
Радость

Во вложении, xls не кушает, положил в рар.
Шаблон примерный... ещё буду корректировать... лишнюю инфу удалил... там где большая ячейка во второй колонке будет картинка.
Что нужно получить описал выше.
Не представляю как это сделать формулами если нужно событие... еслиб количество строк было одинаковым на обоих страницах, другое дела а так...
Если у клиентов будут проблемы с макросами думаю это их проблемы... да и вряд ли.. т.к. это в основном магазины а не крупные компании с политикой безопасности...
Вложения
Тип файла: rar Брюки.rar (11.4 Кб, 13 просмотров)
TorLink вне форума Ответить с цитированием
Старый 08.10.2012, 09:28   #13
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Например так - код в модуль листа "Сумма заказа":
Код:
Private Sub Worksheet_Activate()
    Dim a(), i&, ii&
    Cells.Clear
    a = Sheets("Лист заказа").UsedRange.Columns(1).Resize(, 5).Value
    ReDim b(1 To UBound(a), 1 To 2)
    For i = 1 To UBound(a)
        If Len(a(i, 1)) Then
            If IsNumeric(a(i, 1)) Then
                If a(i, 1) > 0 Then
                    ii = ii + 1
                    b(ii, 1) = a(i, 1)
                    b(ii, 2) = a(i, 1) * a(i, 5)
                End If
            End If
        End If
    Next
    [a1].Resize(ii, 2) = b
End Sub
Проставляет количества и суммы - так нагляднее для проверки работы. Потом можно количества убрать - думаю в коде всё понятно, что где происходит

Можно для скорости очистку листа вынести на другое событие (это если данных тысячи):

Код:
Private Sub Worksheet_Deactivate()
    Cells.Clear
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 08.10.2012 в 09:58.
Hugo121 вне форума Ответить с цитированием
Старый 08.10.2012, 12:58   #14
Djeki
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Код:
    a = Sheets("Лист заказа").UsedRange.Columns(1).Resize(, 5).Value
Как перевести на человеческий язык эту строку кода :
Копируем в переменную: с такого то листа, пользовательский диапазон (UsedRange) , начиная с первого столбца UsedRange , количество столбцов = 5 ??
Правильно я понимаю ??
Спасибо за ответ..
Djeki вне форума Ответить с цитированием
Старый 08.10.2012, 13:20   #15
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
a = Sheets("Лист заказа").UsedRange.Columns(1).Resize(, 5).Value
берём в массив a() данные использованной области листа "Лист заказа" от первого столбца этой области и на 5 столбцов правее (возможный мусор правее нам совершенно не нужен).
Для проверки можно на "Лист заказа" выполнить такой код:

Код:
Sheets("Лист заказа").UsedRange.Columns(1).Resize(, 5).select
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 08.10.2012, 13:27   #16
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Как перевести на человеческий язык эту строку кода
1) берем лист с именем «Лист заказа»
2) на этом листе берем все используемые ячейки
3) из этих заполненных ячеек берем 1-й столбец
4) расширяем этот первый столбец вправо до 5 столбцов
5) считываем значения массива ячеек, и помещаем в переменную a

опоздал с ответом)
EducatedFool вне форума Ответить с цитированием
Старый 08.10.2012, 13:29   #17
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Зато красиво ответил
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 08.10.2012, 14:32   #18
Djeki
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 136
Хорошо

Разобрался . Спасибо всем ответившим..
Djeki вне форума Ответить с цитированием
Старый 08.10.2012, 17:22   #19
TorLink
Пользователь
 
Регистрация: 06.10.2012
Сообщений: 23
По умолчанию

Кул, вроде пашет. Спс.
Ещё вопрос, я так понял с каждым нажатием лист очищается(Cells.Clear), а как сделать статичкую шапку чтобы верхняя строчка не удалялась, или просто каждый раз добавлять её программно? Нормально настроить отображение шапки по ширине и стилю возможно?
TorLink вне форума Ответить с цитированием
Старый 08.10.2012, 18:04   #20
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Шапку можно не трогать так:

Код:
Sub test()
ActiveSheet.UsedRange.Offset(1).Clear
End Sub
Так область очистки сдвигается на строку вниз.
Если лист будет заполнен полностью - будет ошибка. Обойдём:

Код:
Sub test2()
With ActiveSheet.UsedRange
.Resize(.Rows.Count - 1).Offset(1).Clear
End With
End Sub
Ну а внешний вид проще заранее настроить вручную.
Но можно и кодом - запишите рекордером настройку вручную - получите код
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С# Обработчик события yulshaz Помощь студентам 7 24.09.2012 08:12
Обработчик события окна 3StYleR Паскаль, Turbo Pascal, PascalABC.NET 0 25.04.2012 16:54
Обработчик события yardie Общие вопросы .NET 3 26.03.2011 18:30
Динамический обработчик события SKYDOS Помощь студентам 2 11.04.2008 06:46
Обработчик события... Flash_ Gamedev - cоздание игр: Unity, OpenGL, DirectX 12 12.03.2007 21:24