
SQL Server からいくつかのデータを Excel に表示しようとしています。3 つのテーブルにアクセスし、パラメータを使用するクエリがあるため、VBA を使用する必要があります。
VBA を「自動実行」する方法がよくわかりません。Excel で通常のクエリを実行すると、シートが開いているときに実行したり、自動的に更新したりするオプションが提供されます。パラメータを追加しているので、Sub
パラメータが含まれているセルの値を変更するときに実行したいと思います。
何か案は?
答え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
わかりやすくするために、パラメータはセル A1 にあり、VBA コードの結果はセル A2 にリストされているとします。
VBAの場合モジュール
Function Test1(strText as string) as string
Test1 = strText & "15"
End Function
セルA2に「=Test1(A1)」という式を入力し、
セルA1に変更したいパラメータを入力します。
動作を確認したら、他の VBA コードを配置して、A1 が変更されるたびにコードが実行されるようにします。
答え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