Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Как обратиться к свойству Класса по значению переменной
 
То-есть создать метод, и в каждом ифе прописывать условия и потом присвоение свойству ?  а если их 50 ???

Да пипец какой-то. Ну как так.
Нужна структура данных key=>value:
 1) Ассоциативные массивы ??  VBA -> не, НеСлыхал.
 2) Юзаем new Collection. Там можно обращаться к свойству по значению.  Но блин, стапэ, там нельзя изменять значения   8-0
 3) Ок есть пользовательские классы. Можно изменять значения. Но мать его нельзя  по человечески обращаться к свойству 8-0
 4) Ок есть Dictionary,  но хрен он заработает у другого юзера, без подключённой библиотеке.
 5) Вишенка на торте - нет доступа к ключам. То-есть храним дополнительно список ключей ???

Я правильно понял структуру данных key=>value  в VBA?
Изменено: Avantyrist - 19.12.2022 14:49:57
Как обратиться к свойству Класса по значению переменной
 
Приветствую.
Подскажите плз Как обратиться к свойству объекта класса по значению переменной, таким образом чтобы вызвался Сеттер (Let property)
Это необходимо для динамического изменения свойств в цикле


модуль BksiExecute -> execute()
Код
Sub execute()
    Dim b As BKSI
    Dim val
    
    Set b = New BKSI
    b.init
    val = b.test1
    val = b.test2
    
    Set lst = b.getKeys
    Set lst = b.getKeys     'Кэш
    
    For Each k In lst
        ' КАК ОБРАТИТЬСЯ К СВОЙСТВУ ОБЬЕКТА КЛАССА
        ' ПО ЗНАЧЕНИБЮ ПЕРЕМЕННОЙ
        'b(k) = "For Each"
    Next

End Sub

класс  BKSI
Код
Private pTest1Private pTest2


Private listKeys As Collection


Public Function init() As Boolean
    pTest1 = "init1"
    pTest2 = "init2"
End Function



Public Property Get test1()
    test1 = pTest1
End Property
Public Property Let test1(val)
    pTest1 = val
End Property



Public Property Get test2()
    test2 = pTest2
End Property
Public Property Let test2(val)
    pTest2 = val
End Property



Public Function getKeys() As Collection
    If Not listKeys Is Nothing Then GoTo EndFn
    Set lst = New Collection
    lst.Add "test1"
    lst.Add "test2"
    
    Set listKeys = lst
EndFn:
    Set getKeys = listKeys
End Function
VBA Фиксированное примечание
 
Исправил ошибку
VBA Фиксированное примечание
 
Мдяяяя, эти факанутые примечания не дали мне заснуть !!
---------------------------------------------------------------------------------------
'   BKSI доработка:
'      - Не используется цикл для выключения комментариев
'      - Позиционирует примечание в правом верхнем углу
'      - Автоматически корректирует размер по наполнению текста
'      - Исправлен баг со вставкой строк\колонок в "объединённых ячейках"
'---------------------------------------------------------------------------------------

Если мы тыкаем по навигации(Заголовкам)  и обращаемся к свойствам Target  происходит какойто перерасчёт выделенных областей.      
Код
If Target.MergeCells <> False Then          'есть состояние  NULL
  или
If Not (Target.Comment Is Nothing) Then
Кстати у Target.MergeCells есть состояние NULL и оно соответствует тому как мы тыкаем по навигации (вроде :Р)

Но  можно обратиться к свойству Count и будет всё норм
Код
If Target.Count >= 5000 Then GoTo Erreble
МОЖЕТ ЕСТЬ какое-то более адекватное решение определения клика по навигации ?

------------------------------------------
Решение:
Код
'---------------------------------------------------------------------------------------
' Module    : Лист1
' DateTime  : 23.11.2009 11:02
' Author    : The_Prist
' Purpose   : http://www.planetaexcel.ru/forum.php?thread_id=11528
'             Отображение примечания при активации ячейки.
'             Тема: Как настроить примечания ?
'             Автор: ksmspb
'---------------------------------------------------------------------------------------
'   https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=154115
'   BKSI доработка:
'      - Не используется цикл для выключения комментариев
'      - Позиционирует примечание в правом верхнем углу
'      - Автоматически корректирует размер по наполнению текста
'      - Исправлен баг со вставкой строк\колонок в "объединённых ячейках"
'---------------------------------------------------------------------------------------

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Dim oComment As Comment
    Application.EnableEvents = False
    Application.ScreenUpdating = False

    Application.DisplayCommentIndicator = xlCommentIndicatorOnly

    If Target.Count >= 5000 Then GoTo EndFn

    If Not (Target.Comment Is Nothing) Then
        Set oComment = Target.Comment
'   Target.MergeCells есть состояние  NULL (клик по навигации)
    ElseIf Target.MergeCells <> False And Not (Target.Cells(1).Comment Is Nothing) Then
        Set oComment = Target.Cells(1).Comment
    Else
        GoTo EndFn
    End If

    oComment.Shape.Top = Target.Top
    oComment.Shape.Left = Target.Left + Target.Width + 10
    oComment.Shape.TextFrame.AutoSize = True
    oComment.Visible = True

EndFn:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
Изменено: Avantyrist - 12.12.2022 15:30:40
VBA Фиксированное примечание
 
Код взят с архивной темы
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=10726&PAGEN_1=3

Чуток переделал для фиксации примечаний, но проблема была и в изначальном коде. Помогите плиз
Цитата
Когда есть примечание на странице
НЕЛЬЗЯ !!! вставить строку или колонку Внутрь объединённой области.
Если ткнуть по навигации (11-18)  или (E-L)
происходит выделение  всех строк или колонок задействованных в области
В файле есть 3 тестовых листа
На третьем попробуйте вставить строку\колонку
Изменено: Avantyrist - 11.12.2022 00:27:31
Фиксирование первого листа в книге Excel
 
Приветствую.
Для себя рещил етот вопрос таким образом:
1) Страничка "НАВИГАЦИЯ" всегда находится на первой позиции. С помощью неё осуществляются переходы на "Листы" с данными
2) "Лист" на который был выполнен переход, или был активирован с помощью закладки перемещается на вторую позицию.
3) Перед закрытием книги - активирую страничку "НАВИГАЦИЯ"

Таким образом у меня на первом месте Навигация, на Втором месте Рабочий лист. КРАСОТА но и БЕДА!! :)
Выполняя .Move Before:=   Excel сбрасывает то что было скопировано на страничке. Тоесть книга становится не пригодной для КопиПаста.
В комментариях я написал как сделать ЗАТЫЧКУ но ето бред

Подскажите плиз
Как сохранить те данные которые были скопированны в екселе(вместе с форматированием) и потом обратно их впихнуть в Буфер для дальнейшей вставки в Excel.
Либо как отменить ето дурацкое событие - сброс буфера

Код
Private Sub Workbook_SheetActivate(ByVal Sh As Object)

                ' If Application.CutCopyMode Then
                    ' BuferData = Данные которые были скопированы на страничке в EXEL
                ' End If
    
    With Application
        ' ЗАТЫЧКА. если было выполнено копирование - выход
        ' If .CutCopyMode Then Exit Sub
    
        Set Sh = ActiveSheet
        If (Sh.Name = "НАВИГАЦИЯ") Then Exit Sub
        
        .ScreenUpdating = False
        .EnableEvents = False
        
        Sheets("НАВИГАЦИЯ").Move Before:=Sheets(1)
        Sh.Move Before:=Sheets(2)

        .EnableEvents = True
        .ScreenUpdating = True
    End With
   
                ' If BuferData then
                    ' Вставить обратно данные в буфер
                ' End If

End Sub  

'-------------------------------------------------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        
        If Sheets("НАВИГАЦИЯ").Index <> 1 ThenSheets("НАВИГАЦИЯ").Move Before:=Sheets(1)

        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub

Изменено: Avantyrist - 22.05.2018 13:09:25
Страницы: 1
Наверх