Основы выполнения процедуры VBA в excel при изменении ячейки

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

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

какие идеи?

29
задан Vaccano
19.05.2023 13:24 Количество просмотров материала 2431
Распечатать страницу

4 ответа

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

Private Sub Worksheet_Change(ByVal Target As Range)

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

End Sub

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

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

3
отвечен dkusleika 2023-05-20 21:12

поставить:

application.volatile

в коде.

1
отвечен Sux2Lose 2023-05-20 23:29

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

в VBA модуль

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

в ячейку A2 поместить уравнение " =Test1 (A1)

В ячейку A1 поместите параметр, который вы хотите изменить

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

0
отвечен wbeard52 2023-05-21 01:46

ответ 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
0
отвечен Michael 2023-05-21 04:03

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх