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

Страницы: 1
Связанные (зависимые) выпадающие списки 4 уровня, VBA, DropDown List, 4 levels
 
Привет, форумчане!
Я пытаюсь реализовать что-то похожее на то, что описано в этой статье: https://www.planetaexcel.ru/techniques/1/38/.
Кроме того, хочу добавить функционал: чтобы при изменении любого значения в ячейках C1, C2, C3 или C4 на листе Device_LIST_GENERATION остальные значения автоматически обновлялись сверху вниз. Для трёх значений (C2,C3,C4) всё работает нормально, но когда добавляю четвёртое (C1) — перестаёт функционировать. Плюс, не пойму, почему при вставке имени диапазона по формуле OFFSET (имя Building) в ячейку, например, C2, вылетает ошибка.
На листе есть код. Буду очень признателен, если кто-то подскажет, в чём может быть проблема и как это пофиксить! Заранее спасибо за помощь.


Код
Private Sub Worksheet_Change(ByVal Target As RANGE)
    If Not Intersect(Target, Me.RANGE("C1:C4")) Is Nothing Then
        Application.EnableEvents = False  ' Избежать рекурсии
        Call UpdateLinkedCells(Target)
    
        Application.EnableEvents = True
    End If
End Sub

Sub UpdateLinkedCells(Target As RANGE)
    Dim wsGEN As Worksheet
    Dim wsDB As Worksheet
    Dim lastRowDB As Long
    Dim r As Long
    Dim found As Boolean
    Dim currentC2 As String
    
    Set wsGEN = ThisWorkbook.Sheets("Device_LIST_GENERATION")
    Set wsDB = ThisWorkbook.Sheets("DB_C0")
    lastRowDB = wsDB.Cells(wsDB.Rows.Count, "A").End(xlUp).row
    found = False
    
    ' Сохраняем текущее значение C2 перед изменением
    currentC2 = UCase(Trim(wsGEN.RANGE("C2").Value))
    
    If Target.Address = "$C$2" Then  ' TAG_RELEVANT_EQUIPMENT changed
        Dim selRelevant As String
        selRelevant = UCase(Trim(wsGEN.RANGE("C2").Value))
        For r = 2 To lastRowDB
            If UCase(Trim(wsDB.Cells(r, 3).Value)) = selRelevant Then  ' Column C in DB_C0
                wsGEN.RANGE("C3").Value = wsDB.Cells(r, 5).Value  ' Discipline to C3
                wsGEN.RANGE("C4").Value = wsDB.Cells(r, 2).Value  ' TAG_ITEM_NUMBER_CCMS to C4
                found = True
                Exit For
            End If
        Next r
        
    ElseIf Target.Address = "$C$3" Then  ' Discipline changed
        Dim selDisc As String
        selDisc = UCase(Trim(wsGEN.RANGE("C3").Value))
        
        ' Сначала ищем запись с текущим C2 и новым значением Discipline
        For r = 2 To lastRowDB
            If UCase(Trim(wsDB.Cells(r, 3).Value)) = currentC2 And _
               UCase(Trim(wsDB.Cells(r, 5).Value)) = selDisc Then
                wsGEN.RANGE("C4").Value = wsDB.Cells(r, 2).Value  ' Обновляем только C4
                found = True
                Exit For
            End If
        Next r
        
        ' Если не нашли комбинацию C2 + новая дисциплина, тогда меняем C2
        If Not found Then
            For r = 2 To lastRowDB
                If UCase(Trim(wsDB.Cells(r, 5).Value)) = selDisc Then  ' Column E
                    wsGEN.RANGE("C2").Value = wsDB.Cells(r, 3).Value  ' TAG_RELEVANT to C2
                    wsGEN.RANGE("C4").Value = wsDB.Cells(r, 2).Value  ' TAG_ITEM to C4
                    found = True
                    Exit For
                End If
            Next r
        End If
        
    ElseIf Target.Address = "$C$4" Then  ' TAG_ITEM_NUMBER_CCMS changed
        Dim selTag As String
        selTag = UCase(Trim(wsGEN.RANGE("C4").Value))
        For r = 2 To lastRowDB
            If UCase(Trim(wsDB.Cells(r, 2).Value)) = selTag Then  ' Column B
                wsGEN.RANGE("C2").Value = wsDB.Cells(r, 3).Value  ' TAG_RELEVANT to C2
                wsGEN.RANGE("C3").Value = wsDB.Cells(r, 5).Value  ' Discipline to C3
                found = True
                Exit For
            End If
        Next r
    End If
    
    ' Если не найдено, можно добавить логику очистки, например:
    ' If Not found Then wsGen.Range("C2:C4").ClearContents
End Sub


Извлечение цветов текста из одной ячейки
 
Добрый день, ребята!

Подскажите, пожалуйста, можно ли извлечь цвета частей текста из одной ячейки?
Имеется одна ячейка, в которой через тире и пробелы прописаны 3 цифры 3 разных цветов (красный, зелёный и чёрный).
Извлечь цифры отдельно получается, а вот цвета этих чисел непонятно как (возможно какой макрос функцией?!)
Заранее спасибо!

Изменено: Алексей Павлов - 23.10.2020 15:19:20
Функция подсчёта уникальных значений в фильтрованном диапазоне (Excel VBA)
 
Добрый день.

Пожалуйста, посмотрите на приложенный код.
Как можно его подправить, чтобы ф-ция подсчитывала кол-во уникальных значений именно в фильтрованном диапазоне.
На данный момент ф-ция считает все уникальные значения в заданном диапазоне.
Код
Public Function CountZZZ(Area As Range) As Double
Dim rCell As Range
Dim Unique As New Collection
On Error Resume Next
    
    For Each rCell In Area
        If Not IsEmpty(rCell) Then Unique.Add rCell.Value, CStr(rCell.Value)
    Next
    
CountZZZ = Unique.Count
End Function

Может добавить доп переменную, в таком виде?
Set Area1 =Area.SpecialCells(xlCellTypeVisible)
Power view. Перевод репорта в таблицу
 
Добрый день, ребята!

Подскажите, пожалуйста, как можно вытащить Power View репорт и перевести его в обычную таблицу Excel.
В приложение можете увидеть - простой пример: 2 таблицы связаны одним уникальным столбцом: "Страны".
Путём Power View, у меня как бы делаются VLOOKUP'ы и подгоняются в одну таблицу.

Может есть иной способ, не прописывая подобные фунцкии, также как INDEX и MATCH,
а просто связав таблицы по уникальному столбцу и получить добавочные данные с других таблиц.
Потому что формулами каждый раз сложно подхватывать данные с разных таблиц, оперируя большим кол-вом данных.

Изменено: Алексей Павлов - 16.01.2019 19:47:38
Заполнение формы на веб-сайте через Internet Explorer
 
Всем привет.

Пытаюсь заполнить форму на сайте: в рамке FRAME > в выпадающем меню выбрать некоторое значение.
Если бы выпадающее меню находилось в теле сайта, то проблем нет, выбирает без всякого.
Не получается  прописать код касательно FRAME раздела.


Код
Sub Attempt()
Dim ie As Object
Dim frm As Object
Dim frm1 As Object
Dim lst As Object
    Set ie = CreateObject("internetexplorer.application")
    ie.Visible = True
    'открываем сайт
    ie.navigate "http://ets.aeso.ca/ets_web/docroot/Market/Reports/HistoricalReportsStart.html"
    'ждёмс
    Do
    Loop Until Not (ie.Busy)
    Application.Wait Now + TimeValue("00:00:02")
'выбираем рамку (вот может тут уже неправильно присвоено)
Set frm1 = ie.document.Frames
Set frm = frm1("report_nav")
                
' может проблема здесь
Set lst = frm.document.getElementsByTagName("SelectReport")
'на вэлью появляется ошибка
lst.Value = "Market/Reports/PublicSummaryAllReportServlet"
Set lst = frm.Function("populateReportType(document.reportForm, getCurrReportObj())")
lst
    
    Set ie = Nothing
    Set frm = Nothing
    Set frm1 = Nothing
    Set lst = Nothing
    
End Sub
Изменено: Алексей Павлов - 05.08.2018 08:33:28
Запуск макроса другой книги
 
1. Запускаю макрос (FIRST.XLSM), который открывает другую книгу (SECOND.XLSM)
2. Запускаю макрос из (SECOND.XLSM),  который закрывает книгу (FIRST.XLSM) и продолжает делать макрос второй книги без прерывания.

Я пробовал это, но не получается...

Скрытый текст

Но после закрытия книги 1 действия прерываются, подскажите, что делать?
где-то читал, что вместо Application.Run нужно написать Application.OnTime Now + 1 , но не знаю как, подскажите, пожалуйста.
Рандомная закраска ячеек по условию
 
Всем привет!  

У меня в таблице 2 столбца с 250000 строками.
Задача: закрасить ячейки столбца "B" в рандомные светлые тона
в зависимости от цифры в столбце "A", если цифра повторяется, то цвет должен повторяться
дубликаты идут всегда по порядку (перед макросом колонка заранее отсортирована 1-99999*) - может это поможет для модифицированного макроса

в приложенной книге, на Sheet1 я написал макрос, который работает как и хотелось только на 15 вариаций,
но на Sheet2 где как раз те самые 250000 строк  макрос зависает (заменив lNAME с Sheet1 на Sheet2 и For str1=1 to 249989), и не отвечает (пробовал ждать 2 часа - так и зависло).
так у меня вариций в колонке А - 60000, но файл весит 2,2 мегабайт, поэтому когда откроете Sheet2 нажмите макрос с кнопкой - дописать значения.

подскажите, пожалуйста, что нужно изменить в макросе, чтобы работало на 250000 строк с 60000 вариаций.

(текст макрос продублирую здесь):
Скрытый текст
Страницы: 1
Наверх