Ich möchte ein Feedback bekommen, wie ich mein gewünschtes VBA-Modul schreiben kann. In meiner Datei habe ich mehrere Spalten, in denen sich die Werte ändern, wenn neue Daten von einer externen Quelle (Bloomberg) gesammelt werden. Als nächstes möchte ich eine Nachricht erhalten, wenn einer der Werte innerhalb dieser Bereiche größer ist als das Produkt zweier Zellen, die immer gleich sind ($ A $ 1 und $ A $ 2). Außerdem habe ich mehrere Blätter, deshalb möchte ich sicherstellen, dass das Modul für jedes Blatt gilt.VBA-Modul: Verwenden Sie die Funktion "Schnittmenge" für mehrere Bereiche
Nachdem die Suche im Internet und Stackoverflow Ich kam mit zwei Alternativen auf:
Die erste Alternative:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
With Sh
Set r1 = Sh.Range("N1:N50")
Set r2 = Sh.Range("AA1:AA50")
Set r3 = Sh.Range("AN1:AN50")
Set r4 = Sh.Range("BA1:BA50")
Set r5 = Sh.Range("BN1:BN50")
Set r6 = Sh.Range("CA1:CA50")
Set myMultipleRange = Union(r1, r2, r3, r4, r5, r6)
Dim myMultipleRange as Range
Dim Cell as Range
For Each Cell in myMultipleRange.Cells
With Cell
If .Value2 > 0.1 * $A$1 * $A$2 Then
MsgBox ("Ticker: " & Sh.Name & ", Today's volume in the " & Cells(row,column -1) " & " serie is " & Cells" & " contracts")
jedoch, wie ich das Internet erforschen ich ähnliche Fragen sehen, wo die Antworten umfassen die „Intersect "-Funktion. Ich verstehe, dass Intersect ein Range-Objekt zurückgibt, das den Schnittpunkt von zwei oder mehr Bereichen darstellt. Was ist aber genau der Unterschied zu meinem Modul? Und welche Methode ist schneller? Ich möchte das schnellste Modul, da meine Datei riesig ist!
Ich habe versucht, ein zweites Modul mit der Intersect-Funktion
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
With Sh
Dim r1, r2, r3, r4, r5, r6, my MultipleRange as Range
Set r1 = Sh.Range("N1:N50")
Set r2 = Sh.Range("AA1:AA50")
Set r3 = Sh.Range("AN1:AN50")
Set r4 = Sh.Range("BA1:BA50")
Set r5 = Sh.Range("BN1:BN50")
Set r6 = Sh.Range("CA1:CA50")
Set myMultipleRange = Union(r1, r2, r3, r4, r5, r6)
If Target.Value > (0.1 * sh.Range("A1").Value * sh.Range("A2").Value
If Not Intersect(Target, myMultipleRange) Is Nothing Then
MsgBox ("Ticker: " & Sh.Name & ", Today's volume in the " & Cells(row,column -1) " & " serie is " & Cells" & " contracts
Welche Set-up zu schreiben bevorzugen Sie und haben Sie Raum für Verbesserungen sehen?
Hilfe wird sehr geschätzt!
Nur der erste Ansatz funktioniert (sobald alle Fehler entfernt wurden). Das ist jedoch nicht der schnellste Ansatz. Der schnellste Ansatz wäre ein Array. Danach sollte das Array nach allen möglichen "Übereinstimmungen" durchsucht werden und dann sollten sie (wenn mehrere Vorkommen dann alle gleichzeitig sind) in einem Meldungsfeld angezeigt werden. Ich schlage vor, dass Sie ein funktionierendes Sub schreiben und es dann auf [Code Review] (http://codereview.stackexchange.com/) für Verbesserungen veröffentlichen. – Ralph
Danke für Ihre Antwort! Könntest du mich in eine Richtung mit den Fehlern drängen? Und im Idealfall möchte ich für jeden Vorfall eine Benachrichtigung im Nachrichtenfenster. Sollte ich in diesem Fall trotzdem Ihrem Rat folgen? Mit freundlichen Grüßen. – HJA24