Текущее время: Пт, июн 27 2025, 00:38

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 63 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 12 2006, 08:47 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Макрос в студию!
Будем оптимизировать :lol:
думаю в итоге в 5-10 сек уложимся... 8)

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 11:59 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пн, фев 21 2005, 00:50
Сообщения: 10284
Откуда: г.Мышуйск
Пол: Женский
Code:
Sub SAPBEXonRefresh(queryID As String, resultArea As Range)

Dim i, j As Double
Dim RRow, RCol, RRowCount, RColCount As Long
 
 
  RRow = resultArea.Row                 ' начальная строчка вывода области значений
  RCol = resultArea.Column              ' начальный столбец вывода области значений
  RRowCount = resultArea.Rows.Count     ' кол-во строк
  RColCount = resultArea.Columns.Count  ' кол-во столбцов

'в том случае, если данных нет,
' т.е RRowCount = RColCount = 1 - выходим
If resultArea.Rows.Count = 1 Then
    Exit Sub
  End If


'удаляем лишние строки
For i = RRow + 2 To RRow + RRowCount - 1
If Cells(i, RCol).Value = Cells(i + 1, RCol).Value Then
   For j = i + 1 To RRow + RRowCount
   If Cells(j, RCol).Value <> Cells(i + 1, RCol).Value Then
   Range(Cells(i + 1, RCol), Cells(j - 1, RCol + 20)).Select
   Selection.Delete Shift:=xlUp
    Exit For
   End If
  Next j
End If
Next i


'Результаты
For i = RRow + 1 To RRow + RRowCount - 1

If Cells(i, RCol + 14).Value <> 0 Then
  Cells(i, RCol + 18).Value = Cells(i, RCol + 15).Value / Cells(i, RCol + 14).Value
  Cells(i, RCol + 18).NumberFormat = "0.00%"
End If

If Cells(i, RCol + 15).Value <> 0 Then
  Cells(i, RCol + 19).Value = Cells(i, RCol + 16).Value / Cells(i, RCol + 15).Value
  Cells(i, RCol + 19).NumberFormat = "0.00%"
End If

If Cells(i, RCol + 15).Value <> 0 Then
  Cells(i, RCol + 20).Value = Cells(i, RCol + 17).Value / Cells(i, RCol + 16).Value
  Cells(i, RCol + 20).NumberFormat = "0.00%"
End If

Next i

 
End Sub


Типа вот. Виснет кусок "удаляем лишние строки"


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 12:56 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Я не понял смысла вырезки строк :(
Можно словами пояснить принцип?
я прогнал скрипт, он работает по разному для подавленных повторяющихся ключей, оставляя по 2 строчки на ключ, а если ключи повторяются, то по одному виду каждого ключа.
И вообще, было бы неплохо, если бы ты подробнее описала что ты хочешь сделать.

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 13:14 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пн, фев 21 2005, 00:50
Сообщения: 10284
Откуда: г.Мышуйск
Пол: Женский
Есть отчет

Признак1Знач1 Результат Сумма1+Сумма2+Сумма3
Признак1Знач1 Признак2Знач1 Сумма1
Признак1Знач1 Признак2Знач2 Сумма2
Признак1Знач1 Признак2Знач3 Сумма3
Признак1Знач2 Результат Сумма4+Сумма5
Признак1Знач2 Признак2Знач1 Сумма4
Признак1Знач2 Признак2Знач2 Сумма5

Должно остаться
Признак1Знач1 Результат Сумма1+Сумма2+Сумма3
Признак1Знач2 Результат Сумма4+Сумма5

Просто отчет без Признак2 - не канает, т.к. Сумма1+Сумма2+Сумма3 это не агрегация по кубику, а "Расчет результата как... " суммирование, и первый вариант отчета сделан с условием скрытия некоторых строк.
Использование расчетных и ограниченных показателей нужный результат также не даст.

_________________
Пушномолочная свинья-несушка (тест)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 13:35 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, авг 10 2005, 09:24
Сообщения: 1023
может, иерархию сделать?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 14:09 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Да, логично, сделать 2 признака как иерархию в дизайнере, а по надобности треугольнички-раскрывалки поудалять нафик...

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 14:10 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пн, фев 21 2005, 00:50
Сообщения: 10284
Откуда: г.Мышуйск
Пол: Женский
Нельзя по полит.соображениям. :)

_________________
Пушномолочная свинья-несушка (тест)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 15:01 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Вот такое сочинилось:
Code:
Dim DelRng As Range

For i = 2 To resultArea.Rows.Count - 1
' Условие для подавленных повтороений ключа
    If resultArea.Cells(i, 1).Value = Empty Then
' Условие для разрешенных повтороений ключа
'    If  resultArea.Cells(i, 1).Value = _
'       resultArea.Cells(i - 1, 1).Value Then
        If DelRng Is Nothing Then
            Set DelRng = resultArea.Rows(i)
        Else
           Set DelRng = Union(resultArea.Rows(i), DelRng)
        End If
    End If
Next i

If Not DelRng Is Nothing Then
   DelRng.Delete Shift:=xlUp
End If


ЗЫ Удаление внутри циклов for делать НЕЛЬЗЯ. А если надо, то только while.

_________________
Глаза боятся, а руки крюки


Последний раз редактировалось G Пт, дек 15 2006, 15:18, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 15:14 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
LadyWind написала:
Нельзя по полит.соображениям. :)

а какие политсоображения-то?
пользователь буде в Query Designer'е копаться что ли?

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 15:31 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пн, фев 21 2005, 00:50
Сообщения: 10284
Откуда: г.Мышуйск
Пол: Женский
G написал:
LadyWind написала:
Нельзя по полит.соображениям. :)

а какие политсоображения-то?
пользователь буде в Query Designer'е копаться что ли?
не "будет копаться", а "копается и будет копаться".

_________________
Пушномолочная свинья-несушка (тест)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 15:40 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
LadyWind написала:
не "будет копаться", а "копается и будет копаться".

пофик :)
все-таки САП придуман, чтобы вместо программирования ставить галочку...
вот если бы поставила эту галочку, то не было бы треда на кучу постов и VB-макросов :)

ЗЫ Стало быстрее работать-то?

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 15 2006, 15:58 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пн, фев 21 2005, 00:50
Сообщения: 10284
Откуда: г.Мышуйск
Пол: Женский
Если бы все всегда имели возможность вопреки ставить галочки - не было бы сапфорума. Спор беспредметен ;)
О результатах тестирования макроса сообщу отдельно.

_________________
Пушномолочная свинья-несушка (тест)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, дек 18 2006, 15:00 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пн, фев 21 2005, 00:50
Сообщения: 10284
Откуда: г.Мышуйск
Пол: Женский
Собственно говоря, макрос то, что должен делать - не делает. Строки не удаляет :cry:
Насчет
Цитата:
ЗЫ Удаление внутри циклов for делать НЕЛЬЗЯ. А если надо, то только while.

Всегда делала и работало. Только ме-е-едленно

_________________
Пушномолочная свинья-несушка (тест)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, дек 18 2006, 15:10 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, авг 10 2005, 09:24
Сообщения: 1023
LadyWind написала:
ме-е-едленно


Может, перед стартом макроса скрывать окно excel, а при окончании - показывать? Макрос должен быстрее отрабатывать...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, дек 18 2006, 15:38 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
LadyWind написала:
Собственно говоря, макрос то, что должен делать - не делает. Строки не удаляет :cry:

Ну я ж его гонял, тестировал.
Специально, раз уж не признавалась, стоит ли подавление повторяющихся ключей сделал два варианта :cry:.
Попробуй закоментируй блок
Code:
  If resultArea.Cells(i, 1).Value = Empty Then

и раскоментируй
Code:
'    If  resultArea.Cells(i, 1).Value = _
'       resultArea.Cells(i - 1, 1).Value Then n


LadyWind написала:
Насчет
Цитата:
ЗЫ Удаление внутри циклов for делать НЕЛЬЗЯ. А если надо, то только while.

Всегда делала и работало. Только ме-е-едленно

Не верю! (с)
У тебя в отчете, например 100 строк, в цикл for от 1 до 100, если в процессе происходит удаление, то 100 строка вне отчета, но цикл ее обработает. Поэтому и нельзя, поэтому и скорость не при чем.

Vitaly V.V. написал(а):
LadyWind написала:
ме-е-едленно


Может, перед стартом макроса скрывать окно excel, а при окончании - показывать? Макрос должен быстрее отрабатывать...


Лучше делать
Code:
Application.ScreenUpdating = False
и при этом BEx так уже делает заранее, так что дело, все же, в алгоритме.

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 63 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB