2

Я пытаюсь показать некоторые данные с моего SQL Server в Excel. Поскольку у меня есть запрос, который затрагивает 3 таблицы и использует параметр, я собираюсь использовать VBA.

Я не уверен, как получить VBA для "автоматического запуска". Выполнение обычного запроса в Excel дает такие параметры, как запуск при открытом листе или автоматическое обновление. Поскольку я добавляю параметр, я бы хотел, чтобы мой Sub запускался при изменении значения ячейки, в которой находится параметр.

Есть идеи?

4 ответа4

3

Щелкните правой кнопкой мыши вкладку листа и выберите «Просмотреть код». Поместите такой код в модуль листа

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = "$A$1" Then 'only run if the correct cell is changed
        MySub 'this is the name of your vba procedure
    End If

End Sub

Эта подпрограмма будет запускаться всякий раз, когда ячейка на этом листе изменяется. Если изменилась ячейка A1 (изменить в соответствии с вашими данными), то будет запущена процедура в стандартном модуле с именем MySub (изменить в соответствии с).

Я не уверен, почему вы должны использовать VBA, хотя. Кажется, вы могли бы написать SQL, чтобы извлечь из любого количества таблиц и включить параметр.

1

Положил:

application.volatile

в вашем коде.

0

Для ясности я собираюсь сказать, что параметр находится в CELL A1, а результат кода VBA указан в CELL A2.

В модуле VBA

Function Test1(strText as string) as string
   Test1 = strText & "15"
End Function

В ячейке A2 поместите уравнение "= Test1(A1)
В ячейке A1 укажите параметр, который вы хотите изменить.

Я бы проверил, работает ли он, а затем поместил ваш другой код VBA, чтобы он запускался при каждом изменении A1.

0

ответ dkusleika выглядит лучше всего; все становится немного сложнее, если вы хотите сделать то же самое для диапазона. Следующий код будет появляться всякий раз, когда ячейка в указанной области изменяется.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim woArea As Range, isect As Range
Set woArea = Sheet1.Range("A1:A500")
Set isect = Application.Intersect(Target, woArea)

If isect Is Nothing Then
    ' Nothing happens
Else
    ' Stuff you want to happen goes here
End If

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .