Новости:

Название темы должно отражать суть задачи.
Темы типа "ПОМОГИТЕ!!!", "Срочно!" и т.п. будут удаляться без объяснения причин

Главное меню

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.

Просмотр сообщений

Сообщения - IgorStorm

#1
Это уже будет не важно. Нужно для хотя бы одного значения поля. а не для всех. В моей работе наиболее часто получается так, что когда строишь сводные, там еще очень маленькие значения, а не в % полях не бывает значений меньше 1.
#2
Всем привет. Сегодня несколько нестандартный вопрос, пытаюсь автоматизировать настройку сводных, застрял на проблеме - словами могу, кодом нет:
"Если хотя бы одно из значений поля сводной меньше 1 (и больше 0) тогда - формат полю  - процентный". Поля перебрать смогу, нужна подсказка как условие закодить.
#3
Всем привет. Давно не заходил. Все сам :) Тут возникла проблема, собственно вопрос в теме. Как обновить все сводные в книге знаю, но как не трогать при этом сводные из внешних источников (OLAP, MS SQL, Access)? Есть какие-то свойства отвечающие за это? Или может как-то можно на время отключить все соединения (запомнить, удалить и снова восстановить)?
#4
Всем привет. Возник вопрос по теме. Так получается, что в выводные обработки срабатывают по 2 раза. Подозреваю, что из-за того, что макрос вызова основных процедур тоже сам себя вызывает. Т.е. в этом случае может стоит убрать из конца основных процедур эти строчки?. Протес тировать толком не могу - вариант проверить представляется раз в неделю.

Вот код:

Sub Робот()
Application.AutoRecover.Enabled = False
Application.OnTime TimeValue("07:20:00"), "Старт"
MsgBox "Робот запущен, не закрывайте файл и не выключайте ПК"
End Sub

Sub Старт()
ActiveWorkbook.RefreshAll
     lastrow = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
Worksheets(1).Range("B4").AutoFill Destination:=Worksheets(1).Range("B4:B" & lastrow - 1), Type:=xlFillDefault
Application.Calculate
r = Application.WorksheetFunction.Max(Worksheets(1).Range("B4:B" & lastrow - 1))
If r < DateValue(Now) - 1 Then
Send_For_Robot
Application.OnTime TimeValue("07:20:00"), "Старт"
Exit Sub
Else
Application.OnTime TimeValue("07:30:00"), "Обновить_проверки"
Application.OnTime TimeValue("07:35:00"), "Обработка_цикл"
Application.OnTime TimeValue("07:45:00"), "Обработка_цикл_TOP"
End If
Application.OnTime TimeValue("07:20:00"), "Старт"
End Sub


Запуск по расписанию выполняется макросом Робот. который запускает Cтарт. Если все задано в таком виде, то в конце процедур "Обновить проверки", "Обработка_цикл" и далее не нужно писать след. строчки вызова?

Application.OnTime TimeValue("07:30:00"), "Обновить_проверки"
Application.OnTime TimeValue("07:35:00"), "Обработка_цикл"
Application.OnTime TimeValue("07:45:00"), "Обработка_цикл_TOP"

#5
Вот черновой набросок, того чего хочу. Понимаю что вышел за рамки темы, но подскажите как допилить  -  вниз вставить, то что скопировал? Сейчас он не копирует, а вырезает, и вставляет не в тот столбец в котором находится активная ячейка, а в тот из которого скопировали.

Dim CntS, rn As Range
Sub Копирование()
Set rn = Selection
Selection.Copy
  CntS = Selection.Rows.Count
End Sub

Sub Вставка()
Dim Cntt As Long
Cntt = ActiveCell.Row
  Rows(Cntt).Resize(CntS).Insert
  Range(ActiveCell.Address).Select
    rn.Insert Shift:=xlDown
End Sub
#6
Да, но он сдвигает конкретный столбец, а нужно чтобы вставлялись новые целые строки на месте вставки.
#7
Да, нужны как бы новые строки в таблице для этих значений. Типа вставить с разрывом. Т.е. строка будет целая, а данные будут только в том столбце(ах) куда вставляли скопированное.

Стандартный метод просто поверх записывает
#8
Я вам недопонял, Дмитрий, вы  имеете ввиду скопировать 10 строк целиком? Тогда да, там просто. Я имею ввиду когда пользователь копирует 10 ячеек в каком нибудь столбце таблицы и хочет их перенести с соот. место в другой таблице, т.е. не строку целиком, а только значения из конкретного столбца - тогда придется самому вставлять новые строки заранее.
#9
Я понял, что такое достать не получиться на желаемом этапе. Нужно две процедуры на задумку, как и в макросах копирования только видимых.

Задумал впрочем простую но удобную штуку - копирование со вставкой новый строк - столбцов, т.е. пользователь хочет перенести данные в какой-то уже заполненный массив, в новые строки, чтобы их отдельно не вставлять и не подсчитывать, макрос сам считает кол-во строк копирования, вставляет их от текущего положения курсора  и в столбец курсора вставляет скопированные ячейки. Довольно частая операция.
#10
Число строк нет. Просто когда выделение сброшено, метод подсчета выделения вернет что выделено сейчас (текущую ячейку), а не то что скопировано. А момент подсчета возможен только когда пользователь уже перешел на другую ячейку для вставки. Может как-то из буфера достать можно?
#11
Всем привет. Как получить кол-во в выделении знаю. Но вот для одной задумки нужно узнать число строк в том выделении, которое остается после того, как пользователь перевел курсор с диапазона копирования (то что остается обведенным змейкой).Рекодер по нему очень мало информации дал. Только то что его можно снять строчкой  Application.CutCopyMode = False.
Намекните как это называется, дальше буду рыть сам.
#12
Опять я первый нашел ответ и опять на англицком форуме. Все оказалось не так линейно.
Во-первых нужне обработчик обновления ленты, во вторых нужно обрабатывать не только editbox.gettext но и editbox.change, в третьих нужно вставлять обработчик обновления editbox в сам макрос расчетов по событию Workbook_SheetSelectionChange, в четвертых нужно не забыть в XML схеме указать на макрос обновления ленты.
Писать код лень :)
Дам ссылку на первоисточник, там код верный, за исключением строчки Stop в первой процедуре, не знаю за чем она нужна, может опечатка, но VBA ругался.

....Работает четко.

http://www.xtremevbtalk.com/excel/312119-ribbonx-update-editbox-text-worksheet-range-button-custom-tab.html
#13
Всем привет. Добиваю уже свою ленту с формулами, возникла небольшая идейка - хочу создать ряд Боксов, в которые будут выводиться значения расчетов, которые происходят по событию Workbook_SheetSelectionChange (у меня там рассчитываются суммы с НДС и без НДС для текущего выделения - в боксы, чтобы удобно было копировать). Но вот проблема - editbox сам обновляться не хочет, несмотря на то, что переданная ему глобальная переменная меняется вместе с выделением, а принимает только первое переданное значение. Как победить?

Код который сейчас простой:

Public Sub EditBox(control As IRibbonControl, ByRef NDS)
   NDS = Summ1
End Sub
#14
Так родной принцип Excel работает точно также - сначала вставляет в ячейку функцию без аргументов, а потом вызывает мастер, который автоматически переходит на 2-й шаг - то что нужно.
#15
О, спасибо за вариантик покороче :) Что-то в русскоязычном инете не нашел ответа, с какого-то англицкого сайта переписал. Ваша тоже работает, и с Selection. А то что выше работает и с ActiveCell. Правда вашу пока потестил только с одним аргументом функции. Завтра потестю основательно. Аргументы в окошке задаются легко и там и там.
Яндекс.Метрика Рейтинг@Mail.ru