VBA-Makro im 32-Bit-Modus von Excel 2010

VBA-Makro im 32-Bit-Modus von Excel 2010

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:

  1. Haben Sie Application.EnableEvents irgendwann in Ihrem Code deaktiviert?
  2. 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.
  3. 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

verwandte Informationen