Grundlagen zum Ausführen einer VBA-Prozedur in Excel beim Ändern einer Zelle

Grundlagen zum Ausführen einer VBA-Prozedur in Excel beim Ändern einer Zelle

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 Subausgefü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

verwandte Informationen