Ich habe eine Excel-Tabelle, die mit Excel 2010 64 Bit gespeichert wurde. Sie hat den folgenden Code
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 17 Then
Dim iRet As Integer
Dim arr As Variant
If Not IsEmpty(Range("B2").Value2) Then
Exit Sub
End If
'Clear the values in columns
Range("S:AZ").ClearContents
arr = Split(Target, ",")
Range("S15:AZ15").NumberFormat = "@"
Range("S15", Cells(15, UBound(arr) + 19)) = WorksheetFunction.Transpose(WorksheetFunction.Transpose(arr))
Range("AZ1").Value2 = Target
Worksheets("MasterPage").Range("X3:X1000").ClearContents
Worksheets("MasterPage").Range("X3:X1000").NumberFormat = "@"
Worksheets("MasterPage").Range("X3:X" & UBound(arr) + 3) = WorksheetFunction.Transpose(arr)
End If
End Sub
Wenn ich versuche, die gespeicherte Datei im 32-Bit-Modus von Excel 2010 auszuführen, wird sie nicht ausgeführt. Kann mir jemand den Grund dafür nennen? Danke
Antwort1
Ihre Kommentare lassen darauf schließen, dass entweder dieses bestimmte Ereignis aus irgendeinem Grund nicht ausgelöst wird oder überhaupt kein Code ausgelöst wird (ich weiß, dass Excel die Codeausführung manchmal standardmäßig verhindern kann, achten Sie also darauf).
Versuchen Sie zu prüfen, ob überhaupt Code ausgeführt wird. Sie können versuchen, ein Makro an eine Schaltfläche anzuschließen, um den Code explizit auszulösen und herauszufinden, ob das das Problem ist.
Antwort2
Ich habe es mit Excel 2010 (32 Bit) versucht und es lief ohne Probleme.
Ein paar Fragen:
- Haben Sie Application.EnableEvents irgendwann in Ihrem Code deaktiviert?
- In dem von Ihnen bereitgestellten Code ist kein „End Sub“ vorhanden. Ich gehe davon aus, dass dies beim Kopieren und Einfügen in SU verloren gegangen ist, aber überprüfen Sie das noch einmal.
- Wird beim worksheet_change-Ereignis irgendetwas ausgeführt?
Außerdem würde ich ein paar Änderungen an Ihrem Code vornehmen, damit er effizienter läuft. Derzeit wird Ihr Verfahren jedes Mal erneut ausgeführt, wenn es eine andere Zelle ändert. Ich habe ein paar Zeilen hinzugefügt, um Ereignisauslöser auszuschalten und wieder einzuschalten, damit Dinge nicht mehrfach ausgeführt werden.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Row = 1 And Target.Column = 17 Then
Dim iRet As Integer
Dim arr As Variant
If Not IsEmpty(Range("B2").Value2) Then
Application.EnableEvents = True
Exit Sub
End If
'Clear the values in columns
Range("S:AZ").ClearContents
arr = Split(Target, ",")
Range("S15:AZ15").NumberFormat = "@"
Range("S15", Cells(15, UBound(arr) + 19)) = WorksheetFunction.Transpose(WorksheetFunction.Transpose(arr))
Range("AZ1").Value2 = Target
Worksheets("MasterPage").Range("X3:X1000").ClearContents
Worksheets("MasterPage").Range("X3:X1000").NumberFormat = "@"
Worksheets("MasterPage").Range("X3:X" & UBound(arr) + 3) = WorksheetFunction.Transpose(arr)
End If
Application.EnableEvents = True
End Sub