Refre sh определенные запросы при изменении значения функций - PullRequest
0 голосов
/ 28 мая 2020

В ячейку «AC1» будет введен ручной ввод одного из следующих числовых значений: 1; 2; 3; 4 или 5. Каждая из них представляет собой диапазон ячеек, который будет иметь приоритет среди всех остальных. Каждая из ячеек в диапазоне «A2: A86» содержит функцию с аналогичной структурой: = 'SheetX'AX! . Например: = 'Sheet1'B4! ; = 'Sheet2'B4! ; = 'Sheet6'B4! ; et c.

Диапазоны ячеек, которые образуют группы: Range 1 = "A2: A18"; диапазон 2 = «A19: A35»; диапазон 3 = «A36: A52», диапазон 4 = «A53: A69»; и диапазон 5 = «A70: A86». Например: вручную вводя значение «2» в ячейку «AC1», я принудительно выявляю изменения функций диапазона «A19: A35». Изменения, которые могут произойти в другом диапазоне, меня сейчас не интересуют.

Из этого диапазона ячеек мне нужно определить ячейку, которая удовлетворяет двум условиям: «> = 5»; максимальное значение.

Я продолжаю предыдущий пример: Если «A20» = 6.80; «A31» = 7.01, оставшиеся ячейки диапазона «<5», тогда интересующей ячейкой будет «A31». </p>

Цель моей статьи - назначить задачу ячейке, которая соответствует всем предыдущие условия задают задачу обновления некоторых интересующих меня запросов.

Я продолжаю пример: тогда запросы будут постоянно обновляться в al oop: «Запрос - Запрос6»; «Запрос - Consulta9»; «Запрос - Consulta10». Остальные запросы в моей книге не будут обновляться sh.

Если ячейки в диапазоне, определенном в «AC1», не соответствуют условию: «> = 5», то все запросы в моей книге будут l oop обновлено, я не хочу ждать, пока произойдет обновление запроса sh.

Примечание:

  • Моя книга содержит 20 запросов.
  • Количество запросов для обновления sh равно 3, если соблюдаются установленные условия.
  • Ввод данных в «A2: A86» осуществляется через функции. В этом диапазоне нет ручного ввода.
  • Данные в «AC1» вводятся вручную.

Следующий код VBA может работать как модель для достижения желаемого.

Недостатки:

  • Никаких изменений значений функций не обнаружено. Он обновляет запросы только в том случае, если ввод значений выполняется вручную.
  • Обновления запросов ограничены по времени, и циклы не возникают.
  • Ячейка «AC1» не учитывается. Короче говоря, этот код необходимо адаптировать к запрашиваемой ситуации.
Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Application.Intersect(Target, Worksheets("Conclusion").Range("B1:B2")) Is Nothing Then
        set_refreshPeriod
    End If

End Sub

Sub set_refreshPeriod()

Dim wks As Worksheet
Dim rng1 As Range, rng2 As Range
Dim lngPeriod As Long
Dim i As Integer
Dim internalQuerys As Variant 'The 20 Querys which update all 2 Minutes
Dim externalQuerys As Variant 'The 3 Querys which update if B1>B2

Set wks = ActiveWorkbook.Worksheets("Conclusion")
Set rng1 = wks.Range("B1")
Set rng2 = wks.Range("B2")

'The name of your Query always starts wiht "Query - " in english or "Abfrage - " in German
'You can add here more Querys
internalQuerys = Array("Abfrage - Tabelle1", _
                        "Abfrage - Tabelle2", _
                        "Abfrage - Tabelle3")

externalQuerys = Array("Abfrage - File1", _
                        "Abfrage - File2", _
                        "Abfrage - File3")

    'if B1 > B2 then do not refresh the internalQuerys every 2 Minutes else do it
    If rng1 > rng2 Then
        lngPeriod = 0 'do not refresh internalQuerys

        'Refresh the the external Querys
        For i = 0 To UBound(externalQuerys)
            ThisWorkbook.Connections(externalQuerys(i)).OLEDBConnection.Refresh
        Next

    Else: lngPeriod = 2 'Time 2 Minutes for internal Querys
    End If

    'Set the RefreshPeriod for the internal Querys
    For i = 0 To UBound(internalQuerys)
        ThisWorkbook.Connections(internalQuerys(i)).OLEDBConnection.RefreshPeriod = lngPeriod
    Next

End Sub
...