
Ich versuche, einige Daten von meinem SQL Server in Excel anzuzeigen. Da ich eine Abfrage habe, die auf 3 Tabellen zugreift und einen Parameter verwendet, muss ich VBA verwenden.
Ich bin nicht sicher, wie ich VBA dazu bringe, automatisch ausgeführt zu werden. Wenn Sie eine normale Abfrage in Excel ausführen, haben Sie Optionen wie Ausführen, wenn das Blatt geöffnet ist, oder automatisches Aktualisieren. Da ich einen Parameter hinzufüge, möchte ich, dass er Sub
ausgeführt wird, wenn ich den Wert der Zelle ändere, in der sich der Parameter befindet.
Irgendwelche Ideen?
Antwort1
Klicken Sie mit der rechten Maustaste auf die Registerkarte des Blatts und wählen Sie Code anzeigen. Fügen Sie den Code wie folgt in das Modul des Blatts ein
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
Dieses Sub wird immer dann ausgeführt, wenn eine Zelle auf diesem Blatt geändert wird. Wenn die geänderte Zelle A1 ist (Ändern, um sie Ihren Daten anzupassen), wird eine Prozedur in einem Standardmodul namens MySub (Ändern, um sie anzupassen) ausgeführt.
Ich bin mir allerdings nicht sicher, warum Sie VBA verwenden müssen. Es sieht so aus, als könnten Sie SQL schreiben, um aus so vielen Tabellen wie Sie möchten zu ziehen und einen Parameter einzuschließen.
Antwort2
Setzen:
application.volatile
in Ihrem Code.
Antwort3
Der Klarheit halber sage ich, dass sich der Parameter in ZELLE A1 befindet und das Ergebnis des VBA-Codes in ZELLE A2 aufgeführt ist.
In VBAModul
Function Test1(strText as string) as string
Test1 = strText & "15"
End Function
Tragen Sie in Zelle A2 die Gleichung "=Test1(A1)" ein.
Tragen Sie in Zelle A1 den Parameter ein, den Sie ändern möchten.
Ich würde überprüfen, ob es funktioniert, und dann Ihren anderen VBA-Code einfügen, damit der Code immer ausgeführt wird, wenn sich A1 ändert.
Antwort4
Die Antwort von dkusleika sieht am besten aus; etwas kniffliger wird es, wenn Sie dasselbe für einen Bereich tun möchten. Der folgende Code wird immer dann ausgeführt, wenn eine Zelle innerhalb des angegebenen Bereichs geändert wird.
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