Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 След.
Как в Excel изменить междустрочный интервал, vba
 
Цитата
Ігор Гончаренко написал:
каждую строку в новый текстбох
Если мне не изменяет память (под рукой не нужной версии Excel), начиная с 2007 в текстбоксе можно менять межстрочный интервал. Достаточно одного текстбокса
Передача свойств объекта в процедуру на запись
 
Цитата
Андрей VG написал:
А они, в данном случае что-то решают?
Согласен, в данном случае нет, просто было предположение. Все равно ошибка  - для "обыкновенных" переменных:
Код
Option Explicit

Sub change(ByRef V As Long)
  V = 100
End Sub


Sub test()
  Dim V1 As Long
  Dim V2 As Long
  change V1
  change (V2)
  Debug.Print V1
  Debug.Print V2
End Sub


Цитата
sokol92 написал:
использовании в качестве фактического параметра вызова макроса Public переменной модуля класса создается копия фактического аргумента
Вероятно, что при реализации Property Get/Let происходит подобное - создается копия возращенного Property Get значения и передается в процедуру.
Передача свойств объекта в процедуру на запись
 
Цитата
Vitek885 написал:
SaveProperty(Obj.X)
А разве скобки при вызове процедуры нужны?
VBA. Объявление большого числа переменных с одинаковым типом, Укоротить строки с объявлением однотипных переменных
 
Я так понимаю, что переменные у Вас имеют последовательные значения (как минимум, большинство). А что мешает использовать Enum ?
Код
Enum MyConstants
  cDateOtgruz = 1 'начальное значение, если не указать, будет 0
  cDateOplaty ' автоматически = 2 (предыдущее + 1)
  cSomeConst ' автоматически = 3 (предыдущее + 1)
'......... и т.д.
  cPriceOpt3
'.........
  cLastCol
End Enum
Изменено: Alec Perle - 1 авг 2020 17:24:34
Искажение графических фигур при печати
 
Это, к сожалению, не лечится. Но можно попытаться убрать симптомы. Попробуйте выделить все объекты, скопировать, и, через специальную вставку, вставить как "расширенный метафайл". Это, возможно (зависит от версии Excel, параметров экрана, принтера), может помочь избежать "разбегания" объектов от растровой картинки при печати (но не от искажения масштаба по горизонтали и вертикали).
И да, не лучший выбор инструмента для совмещения растровой и векторной графики...
Решение уравнения с дробями!
 
Нет ошибки в предложенных формулах. Они вычисляют ровно то, что было в условиях задачи. А вот на картинке с решением - совершенно другие условия. В чем, по Вашему, отличие 100% от просто 100?

PS. Ігор Гончаренко, в Вашей, похоже есть, крайний делитель должен быть (R[1]C[2]+4)
Изменено: Alec Perle - 17 май 2020 11:19:25
Формула определеяющая тип контрагента (как сделать из макроса функцию)
 
Можно тут же упростить
Код
Function Category(s$) As String
    s = " " & Trim(s)
    Select Case True
    Case s Like "* ООО *": Category = "Юр.лицо"
    Case s Like "* АО *": Category = "Юр.лицо"
    Case s Like "* ИП *": Category = "ИП"
    Case Else: Category = "Физ.лицо"
    End Select
End Function
Только вот что делать с ПАО (тот же Газпром), НАО, ФКУ, НОУ, ДОУ и т.д. Целый справочник получается...
как поменять в ячейке формулу на ее значение
 
Код
=If(g1<=0;функция(аргументы);значение)

И обратите внимание, чем отличается оформление кода (здесь, на форуме) у Вас и у других участников.
Можно ли ускорить работу Excel, заменив HDD на SSD?
 
Цитата
Jack Famous написал:
VBA очень шустрый
пока не загнать обработку ячеек в цикле. Еще лучше выделяя каждую.
Полагаю речь идет об обработке данных максимально возможно без обращения к объектной модели Excel, кроме как для получения данных и сохранения результата.
Вывести список уникальных значений используя коллекции VBA
 
Цитата
Mershik написал:
Collection.Add(Object, String, Object, Object)
Не так. Первый - может быть любым, второй - строка, третий и четвертый - число или строка.
Вывести список уникальных значений используя коллекции VBA
 
Цитата
Mershik написал:
без него
Имеется ввиду так?
Код
    If Not IsEmpty(cell) Then Kolekciya_unik.Add cell.Value
Второй параметр при добавлении в коллекцию - это ключ, он должен быть уникальным. Если пытаемся добавить элемент с уже имеющимся ключом, возникнет ошибка, которая в приложенном коде игнорируется и элемент (который не уникальный) не добавляется.
Если второй параметр не используется, никакой ошибки не возникает и элемент добавляется,  
Как можно организовать передачу значений переменных между процедурами.
 
Цитата
Фарит написал:
как организовать проверку условия и выполнять обработку данных 1 или 2 процедурой
Как это связано с темой сообщения?
И что, все-таки, Вы подразумеваете под передачу значений между процедурами? Процедура не живут сами по себе - она или выполняется, или нет, когда Вы вызвали вторую процедуру, первая продолжит выполняться только после завершения  второй.
У Вас в обеих процедурах организован цикл от 23 до 5000.  То есть вторая процедура будет при каждом вызове выполнять цикл от 23 до 5000. Даже если Вы ей каким-нибудь способом передадите переменную nrs.
Вам нужно переделать логику работы программы, например так (и, кстати, вариант обмена значениями между процедурами):
Код
Sub Макрос1()
  Dim nrs As Integer

  For nrs = 23 To 5000
    if (проверка условия) Then
      Call Обработка1(nrs)
'сюда вернется обработка после выполнения процедуры Обработка1
    Else
      Call Обработка2(nrs)
'сюда вернется обработка после выполнения процедуры Обработка2
    End If
  Next
End sub

Sub Обработка1(nrs As Integer)
'не используем For nrs ...!

End Sub

Sub Обработка2(nrs As Integer)
'не используем For nrs ...!

End Sub

Как можно организовать передачу значений переменных между процедурами.
 
Цитата
Фарит написал:
а второй затирает значения первого значения npp не передал во второй
Ну так пусть не затирает. У Вас в каждой процедуре  идет присваивание npp=1. Оставьте это присваивание только в той процедуре, которая вызывается первой.
Вопрос по определению последней строки vba, ActiveSheet.UsedRange.Rows.Count - 1 зачем вычитать единицу?
 
Цитата
artemkau88 написал:
Возник вопрос: для чего в выражении
Возник встречный вопрос - для чего выражение?
В Вашем случае - количество занятых ячеек минус один.
На самом деле такое вычитание используется, когда необходимо получить последнюю строку занятого диапазона, и выражение выглядит как:
Код
ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
То есть первая строка плюс количество строк минус один. Если не вычитать - получится первая незанятая строка.
Цитата
artemkau88 написал:
То есть здесь  
ActiveSheet.UsedRange.Rows.Count = 12 мая
а  ActiveSheet.UsedRange.Rows.Count-1 = 11 мая
Верно?
Не совсем. В предложенном примере
Код
ActiveSheet.UsedRange.Rows.Count = 3 дня - длительность отпуска
ActiveSheet.UsedRange.Row = 9 мая - начало отпуска
ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count = 9 + 3 = 12 - день выхода из отпуска
ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1 = 9 + 3 - 1 = 11 - последний день отпуска
СЧЕТЕСЛИ неправильно считает длинные числовые значения
 
Цитата
iVVS написал:
что я делаю не так
Как минимум, не пользуетесь поиском
PS. И да, поиск дает вполне разумное решение:
Код
=СЧЁТЕСЛИ($N$3:$N$14;"*"&N3)
Изменено: Alec Perle - 4 май 2020 17:28:35
О чем ошибка: Expression too complex (Err 16)
 
У Вас в коде используется Not Not ИмяМассива для проверки инициализации динамического массива. Это, к сожалению, не фича VB (VBA), а баг, использование которого приводит к ошибкам. Попробуйте проверку проводить по-другому - через перехват ошибки при обращении к массиву.
Варианты округления в VBA, Поиск самого быстрого
 
Цитата
Jack Famous написал:
вычисление d - вообще ни в какие ворота
А что с ним не так? Ведь закомментировано же)) А скрин не раскомментируется никак, чтоб самому проверить...
Варианты округления в VBA, Поиск самого быстрого
 
Можно и WorksheetFunction.Round ускорить, правда на доли процента. Нужно второй параметр передавать сразу как Double:
Код
d = .Round(1 + i / nMax, 2#)
Варианты округления в VBA, Поиск самого быстрого
 
Можно еще чуть ускорить (своеобразный "дизельгейт"), если каждый раз не вычислять множитель:
Код
Public Function MyRoundFixStatic(X As Double, R As Long) As Double
  Static OldR As Long
  Static D As Double
  Dim i As Long
  If R <> OldR Then
    D = 1
    For i = 1 To R
      D = D * 10#
    Next i
    OldR = R
  End If
  MyRoundFixStatic = Fix(X * D + 0.5) / D
End Function

Результаты:
Код
WorksheetFunction.Round      5,78125 
VBA.Round                    0,203125 
MyRoundFix                   0,4375 
MyRoundFixStatic             0,296875 
И да, округление математическое, проверял с ОКРУГЛ() сравнением результатов на листе))
Изменено: Alec Perle - 18 апр 2020 16:48:42
Варианты округления в VBA, Поиск самого быстрого
 
Цитата
МатросНаЗебре написал:
Как вариант, ещё есть функции Int()
Цитата
Jack Famous написал:
Fix пошустрее вроде,
Код
Public Function MyRoundFix(X As Double, R As Long) As Double
  Dim D As Double
  Dim i As Long
  D = 1
  For i = 1 To R
    D = D * 10#
  Next i
  MyRoundFix = (Fix(X * D + 0.5)) / D
End Function

Результаты по тесту из #3:
Код
WorksheetFunction.Round      5,765625 
VBA.Round                    0,203125 
MyRoundInt                   0,375 
MyRoundFix                   0,359375 

Правильное обращение к нужной книге/листу при нескольких открытых файлах
 
Цитата
Klavka1993 написал:
Первую часть с with он проходит хорошо
А вот на второй сбивается
Обратите внимание, что в первом случае Вы используете .Range - с точкой, а во втором Cells - без точки.  
Заливка фигур цветом условного форматирования формулой
 
Может, инструмент "камера" подойдет?
Удалить строку из двухмерного массива по условию VBA
 
Цитата
Duke2 написал:
какая-то проблема с размерностью массива
Обратите внимание на строку 16 кода, предложенного doober.
Склеить дату и время.
 
Цитата
Exo написал:
Как сравнить я понимаю.
То есть, Вы понимаете, как хранится дата/время? Достаточно сложить значение ячейки, содержащей дату, и ячейки, содержащей время. В результирующей ячейке выставить формат, отображающий дату и время ("ДД.ММ.ГГГГ ч:мм")
Указывать дату, в зависимости от времени печати документа
 
Off
Цитата

глория написал:
Все, уже не надо
Убивать?..
Указывать дату, в зависимости от времени печати документа
 
L7 был как пример дополнительного столбца на листе Лист2, чтобы растянуть и увидеть, как в зависимости от времени меняется и дата.
Во вновь выложенном файле у Вас в ячейку Лист1!E8 подтянуто время погрузки, поэтому в формулу можно подставить эту ячейку, т.е. в ячейку Лист1!C7
Код
=СЕГОДНЯ()+ОКРУГЛ((ЧАС(ТДАТА())-ЧАС(E8))/24;0)
PS. Пока писал, Вы выложили новый файл, но суть та же - в ячейку Лист1!B5
Код
=СЕГОДНЯ()+ОКРУГЛ((ЧАС(ТДАТА())-ЧАС(B6))/24;0)
Изменено: Alec Perle - 28 фев 2020 13:40:01
Указывать дату, в зависимости от времени печати документа
 
Код
=СЕГОДНЯ()+ОКРУГЛ((ЧАС(ТДАТА())-ЧАС(F2))/24;0)
Формулу можно вставить в ячейку L2 и растянуть вниз
Указывать дату, в зависимости от времени печати документа
 
Тогда без условий:
Код
=ТДАТА()+ВРЕМЯ(4;0;0)

Некорректно открывается файл - в фомулах, появляется префикс _xlfn.IFS.
 
Цитата
Galina15 написал:
Некорректно открывается
Открывается, вероятно, максимально корректно в данных условиях. Дело в том, что функция IFS (ЕСЛИМН) появилась в Excel 2016.
Указывать дату, в зависимости от времени печати документа
 
Здесь макрос и не нужен (раз используется =сегодня()+1).
Страницы: 1 2 3 4 5 6 След.
Наверх