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

Страницы: 1 2 3 4 След.
vba Создать объект где все свойства только для чтения, где свойства Class1 есть экземпляры Class2
 
Ах вот для чего нужен это Friend, читал же недавно и не вник.
Спасибо, как всегда!
vba Создать объект где все свойства только для чтения, где свойства Class1 есть экземпляры Class2
 
Здравствуйте.
Посоветуйте, пожалуйста, в следующем.

Есть Class1, в нём определено свойство. Это свойство является экземпляром Class2.
В Class2 также определено свойство, но оно только для чтения.
Я не могу понять, как можно при создании экземпляра Class1 задать значение для свойства из Class2, при условии, что значение для свойства Class2 известно только на этапе создания объекта от Class1.

Для чего это: я хочу собрать объект, где все данные определены в момент инициализации и больше не должны изменяться извне - объект для просмотра только (ну за исключением пары методов).

Я вымучил только через глобальную переменную, поднося на лопате в момент new. Но это ужасно коряво и не годится для большого кол-ва свойств, как можно сделать нормально? Может оставить Property Let, но после создания объекта как-то блокировать попытки записи, вполне сгодилось бы, но как это реализовать?
vba Установить значение UDT-свойства экземпляра класса
 
Будьте добры, ещё такой дополняющий вопрос.
Можно ли создать для класса метод по умолчанию, наподобие, как я могу обращаться к элементу в Dictionary минуя .Item(), т.е. Dic("key") = ... ?

Добавлено:

Со вторым вопросом разобрался, инструкция
А с первым всё ещё интересно: есть ли (академическая) разница между Private d_ As New Class2 и Class_Initialize() Set d_ = New Class2
Изменено: vladjuha - 13 Авг 2017 03:17:59
vba Установить значение UDT-свойства экземпляра класса
 
AAF, спасибо за конкретное решение.
А есть какой нюансик, между вариантами
Код
Private d_ As Class2
...
Private Sub Class_Initialize()
  Set d_ = New Class2
...
и, если сразу:
Код
Private d_ As New Class2
Может в скорости где выигрыш (если в цикле в большом кол-ве создаются экземпляры, например), или ещё что?
Изменено: vladjuha - 13 Авг 2017 02:26:36
vba Установить значение UDT-свойства экземпляра класса
 
ZVI, спасибо, теперь стало понятно
Изменено: vladjuha - 12 Авг 2017 11:12:08
vba Установить значение UDT-свойства экземпляра класса
 
Спасибо. Иначе говоря достичь написания кода по типу "ActiveCell.Borders.Color = ..." нельзя(
Плюс теряются инициализированные предзначения.
vba Установить значение UDT-свойства экземпляра класса
 
Здравствуйте.
Подскажите, пожалуйста, как в примере установить требуемое значение для свойства пользовательского типа для созданного экземпляра.
vba Логика проверки нескольких условий в IF .. THEN
 
Да, так ещё быстрее, согласен, но я с проверками InStr(1, t, "ааа", 1) возюкаться буду, посему тестовый  прогон был применителен к моему случаю  
Изменено: vladjuha - 1 Май 2017 07:04:33
vba Логика проверки нескольких условий в IF .. THEN
 
Михаил С., да, с select case в моём случае наглядней и быстрее if eseif получается, спасибо.
Скрытый текст
vba Логика проверки нескольких условий в IF .. THEN
 
Всё понятно, благодарю
vba Логика проверки нескольких условий в IF .. THEN
 
Здравствуйте!
Просветите, пожалуйста, в блоке
Код
If a = 1 or b = 2 then
  Statements
End If
если выполнилось условие a = 1 (True), будет ли осуществляться проверка b = 2 или руль отдаётся сразу в statements?

А вообще у меня прикладная задачка: соотнести экземпляры текста к определённым, своим, группам. Делаю путём простой проверки через InStr (не использую RegExp - хочу добиться максимальной скорости проверки). Будет ли выигрышнее в варианте "А"?
Вариант "А":
Код
If InStr(1, t, "ааа", 1) Then
    ...
ElseIf InStr(1, t, "ббб", 1) Then
    ...
ElseIf InStr(1, t, "ввв", 1) Then
    ...
End If
Вариант "Б":
Код
If InStr(1, t, "ааа", 1) Or InStr(1, t, "ббб", 1) Or InStr(1, t, "ввв", 1) Then
    ...
End If
(заместо ... одинаковый блок операторов)

Или может другие методы/способы быстрой проверки текста подскажите?
vba Передать аргументы полученные by ParamArray в другую процедуру
 
Да, как массив, вариант, спасибо. Просто не хотелось конечную f3 перетачивать (противоречит её "идейности)".
vba Передать аргументы полученные by ParamArray в другую процедуру
 
JeyCi, спасибо, но дело в том, что заранее неизвестно сколько будет передано аргументов из f1
vba Передать аргументы полученные by ParamArray в другую процедуру
 
Их *нескольких* f1 я передаю выбранные по определённому критерию листы книги (в каждой f1 свой набор) в процедуру f2, где сами листы не нужны, но f2 аккумулирующая: в ней выполняется общий код, который иначе я вынужден был бы мультиплицировать в каждой f1 (f2, по сути, используется из эстетических соображений).
После результат работы f2  (один/два аргумента, наряду с полученными аргументами-листами) передается уже в конечную f3.
Изменено: vladjuha - 8 Мар 2017 09:23:22
vba Передать аргументы полученные by ParamArray в другую процедуру
 
Здравствуйте.
Подскажите, пожалуйста, как элегантно передать все полученные аргументы далее (без дикости с их перечислением и проверкой на существование каждого).
Код
Sub f1()
    f2 1, 2, 3
End Sub

Sub f2(ParamArray a())
'    f3 a()
    f3 a(0), a(1), a(2)
End Sub

Sub f3(ParamArray a())
    Dim c
    Debug.Print TypeName(a), UBound(a) + 1
    For Each c In a
        Debug.Print c
    Next
End Sub
vba Регулярное выражение преобразования строки в нумерованный список
 
heso, премного благодарен! Ох и много же я не знаю от регулярках:)
vba Регулярное выражение преобразования строки в нумерованный список
 
Добрый день.
Помогите, пожалуйста, с регулярным выражением.
Необходимо все вхождения типа 1. asdf. 2. xv cb-1. 3. uio №1 uio. преобразовать в список:
1. asdf.
2. xv cb-1.
3. uio №1 uio.

Написал такое, но оно не работает, как надоть:
Код
Public Function NormPhrase(ByVal s As String) As String
    On Error Resume Next
    Dim re As Object, mtchs As Object, i As Integer, p As String
    Set re = CreateObject("VBScript.RegExp"): re.Global = True: re.MultiLine = True
    re.Pattern = "(.+\.\s)([0-9]{1,2}\.\s.*)"
    
    Do While s Like "*  *"
        s = Replace(s, "  ", " ")
    Loop
    s = Trim(Replace(Replace(s, " .", "."), " ,", ","))
    s = UCase(Left(s, 1)) & Right(s, Len(s) - 1) & IIf(Right(s, 1) = ".", "", ".")
    
    Debug.Print s
    
    Set mtchs = re.Execute(s)
    For i = 0 To mtchs.Count - 1
        p = p & mtchs.Item(i).Submatches.Item(0) & vbLf & mtchs.Item(i).Submatches.Item(1)
    Next
    
    NormPhrase = p
End Function

Sub tstNormPhrase()
    Debug.Print NormPhrase("1. asdf. 2. xv cb-1. 3. uio №1 uio.")
End Sub
Изменено: vladjuha - 25 Фев 2017 05:24:52
Счётесли сумма диапазона меньше значения
 
?
Код
=СЧЁТЕСЛИ(B1:B4;"<="&СУММ(A1:A5))
Функции "Счетзаливка" и диапазоны несмежных ячеек
 
Application.Union ?
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=87980
Excel повреждается при запуске, если в файле была обновлена сводная
 
Кстати, вспомнил поздно, напишу всё же, может кому пригодится. Причина краша: использование именованного диапазона в правилах условного форматирования на сводной. Я два раза уже на эти грабли вставал - учёный теперь.  
Изменено: vladjuha - 19 Фев 2017 18:39:48
Неправильно сравниваются два числа
 
Цитата
Sanja написал: Ну как же? Вы же ноль добавляете к дробной части
Ну правильно, потому он ничего не значит, а я, несмотря на это, всё-равно делю на десять и уменьшаю исходное значение на порядок, хотя требовалось его только преобразовать в число из текста. Или я того  :oops:  

Цитата
Sanja написал: Даты то причем? Они наоборот в НОРМАЛЬНОМ виде (именно как ДАТЫ)
Они не по уставу: время вперёд даты, 24:00, текст. На полуесли, в принципе, выехал, =ЕСЛИОШИБКА(--C9;--(0&C9)). Здесь хоть ошибка ожидаемой природы.
Неправильно сравниваются два числа
 
Цитата
Sanja написал:
не согласен. Что 5,1/10 = 0,51, что 5,10/10 = 0,51
Так на входе 5,1 а на выходе 0,51 (число-то не должно меняться).
Неправильно сравниваются два числа
 
Sanja, спасибо, я тоже использую "если" , хотя мне немножечко жалко использовать его для такого пустяка :), но видимо это единственный путь
Цитата
Sanja написал:
А в E3 (=--(A3&0)/10) Вас тоже что то смущает?
то, что это годится только для целых чисел

Кажется я родил подходящее: =--(0&A1)
...
Чиорт пабери, а на нужном мне образце всё-равно не работает из-за кривущей выгрузки дат.
Изменено: vladjuha - 19 Фев 2017 17:52:05
Неправильно сравниваются два числа
 
А кто как поступает, когда среди данных "числа как текст", могут проскакивать ячейки с текстом нулевой длины (или как там оно красиво зовется), в общем эмулируется так: =""
Как можно универсально формулами привести такую последовательность к числам? Тоже двойное отрицание выдаст #Знач
Как запретить ввод времени раньше фактического?
 
Aiko Shiba, да это же пустая работа. Неужели сложно повлиять на Excel. В итоге круг шулеров сузится до понимающих чуть более "нажать =", проблемка не решится %).
Как узнать где находится машина
 
CORDOBA, хорошо, пишите личным сообщением тогда. Возможно мы найдём понимание.
составление смен из графика сменности
 
Имел в виду, вставлять скопированные данные через правую клавишу мыши : "Вставить значения". В этом случае формат не будет затронут в месте вставки.
составление смен из графика сменности
 
Вот так можно вытащить данные:
Цитата
=ИНДЕКС($AK$3:$AK$14;ПОИСКПОЗ(ТЕКСТ($A$1;"ММММ");$AJ$3:$AJ$14;0))
Только зачем, если число одинаково для всех - проще скопировать и вставить
Про серые: вставлять как значения :)
Поиск наименьшего или наибольшего курса валюты в диапазоне дат в таблице обновляемой на основе Веб-запроса
 
Цитата
puplin написал:
можно ли как то в формулах предусмотреть расширение диапазона
В случае предложенной мною формулы, диапазон определять не надо, он уже есть - cbr
А сама формула станет такой:
Код
{=1/МАКС(ЕСЛИОШИБКА(1/ИНДЕКС(cbr;;3)/(ИНДЕКС(cbr;;1)>= I4)/(ИНДЕКС(cbr;;1)<= I5);0))}
Изменено: vladjuha - 16 Фев 2017 20:20:07
Автоматическое суммирование выборочных элементов столбца, Учет денежный личных средств
 
Цитата
bsz написал:
б. - критерий. По идее, условие, которое должны удовлетворять искомые элементы. А здесь это "Баланс.общий!$C7". Не совсем понимаю, как это может быть критерием.
Это критерий для "диапазона" (где даты), по полученным индексам уже будет складываться "диапазон_суммирования" (где деньги)

Цитата
bsz написал:
Тоже работает, интересный способ. Но я так понимаю, что предыдущий более производительный будет т.к. умножение - сложный процесс, на сколько мне известно.
Там не всё так страшно. Сейчас протестировал: на 2 млн ячеек разницы нет (в теч. секунды), на 28 млн суммпроизв уже отстаёт в два раза.
Страницы: 1 2 3 4 След.