셀이 변경될 때 Excel에서 VBA 프로시저를 실행하는 방법에 대한 기본 사항

셀이 변경될 때 Excel에서 VBA 프로시저를 실행하는 방법에 대한 기본 사항

Excel에서 SQL Server의 일부 데이터를 표시하려고 합니다. 3개의 테이블을 조회하고 매개변수를 사용하는 쿼리가 있으므로 VBA를 사용해야 합니다.

VBA를 "자동 실행"하는 방법을 잘 모르겠습니다. Excel에서 일반 쿼리를 수행하면 시트가 열려 있을 때 실행 또는 자동 새로 고침과 같은 옵션이 제공됩니다. 매개변수를 추가하는 것이므로 Sub매개변수가 있는 셀의 값을 변경할 때 my를 실행하고 싶습니다 .

어떤 아이디어가 있나요?

답변1

시트 탭을 마우스 오른쪽 버튼으로 클릭하고 코드 보기를 선택합니다. 시트 모듈에 이와 같은 코드를 넣으세요.

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을 작성할 수 있는 것 같습니다.

답변2

놓다:

application.volatile

귀하의 코드에서.

답변3

명확성을 위해 매개변수는 CELL A1에 있고 VBA 코드의 결과는 CELL A2에 나열되어 있다고 말씀드리겠습니다.

VBA에서기준 치수

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

셀 A2에 방정식 "=Test1(A1)을 배치합니다.
셀 A1에 변경하려는 매개변수를 배치합니다.

작동하는지 확인한 다음 A1이 변경될 때마다 코드가 실행되도록 다른 VBA 코드를 배치합니다.

답변4

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

관련 정보