2012-04-03 17 views
1

Ich habe eine Excel 2010-Arbeitsmappe für finanzielle Datensätze. Auf einem Arbeitsblatt habe ich ein Menü. In diesem Menü wähle ich eine Schaltfläche mit einem angehängten Makro, die die Zellen verbirgt, aus denen das Menü besteht, und blendet ein Transaktions-Eingabeformular aus.Laufzeitfehler '91' bei Makroausführung

Diese Transaktionseingabe für enthält mehrere Werte, die hier keine Bedeutung haben. Nach Eingabe der Daten drücken Sie die entsprechend beschriftete Enter-Taste. Jetzt, als ich das Dokument schrieb, funktionierte dieser Knopf gut, ging es zum Datensatz Arbeitsblatt eingefügt eine leere Zeile in der richtigen Tabelle ging zurück zum Formular kopiert die Daten gingen zurück in die neue leere Zeile und fügte die Daten ein. Es trifft dann in der Datumsspalte die Sortierung vom neuesten zum ältesten, um sicherzustellen, dass die Einträge in der richtigen Reihenfolge sind. Schließlich geht es zurück zum Formular und löscht die Daten. Das hat gut funktioniert, bis ich beschloss, das Geschichtsblatt zu verstecken.

Als ich mich entschied, das Blatt auszublenden, nahm ich das Makro erneut auf, um das Blatt, das die Operationen vorformte, zu verstecken und das Blatt wieder zu verstecken. Jetzt, wenn ich das Makro ausführe, blendet es das Blatt aus. Es hängt dann mit einem "Laufzeitfehler '91' Objektvariable oder mit Blockvariable nicht gesetzt" Fehler. Das Makro wird nicht abgeschlossen und das Verlaufsblatt bleibt sichtbar und unverändert, während das Formular noch voll mit Daten ist.

Auswahl Debug in den angegebenen Optionen, wenn der Fehler zeigt erscheint dieses:

Sub transaction() 
' 
' transaction Macro 
' 

' 
    Sheets("Income").Select 
    Sheets("Transaction History").Visible = True 
    Selection.ListObject.ListRows.Add (1) 
    Sheets("Income").Select 
    Range("B6:G6").Select 
    Selection.Copy 
    Sheets("Transaction History").Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
    Application.CutCopyMode = False 
    ActiveWorkbook.Worksheets("Transaction History").ListObjects("Table9").Sort. _ 
     SortFields.Clear 
    ActiveWorkbook.Worksheets("Transaction History").ListObjects("Table9").Sort. _ 
     SortFields.Add Key:=Range("Table9[[#All],[Date]]"), SortOn:=xlSortOnValues _ 
     , Order:=xlDescending, DataOption:=xlSortNormal 
    With ActiveWorkbook.Worksheets("Transaction History").ListObjects("Table9"). _ 
     Sort 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
    Sheets("Transaction History").Select 
    ActiveWindow.SelectedSheets.Visible = False 
    Range("B6:G6").Select 
    Selection.ClearContents 
    Rows("6:8").Select 
    Range("A8").Activate 
    Selection.EntireRow.Hidden = False 
    Range("B6").Select 
    ActiveCell.FormulaR1C1 = "=R[1]C" 
    Rows("7:7").Select 
    Selection.EntireRow.Hidden = True 
    Range("C6").Select 
End Sub 

Mit der Reihe

Selection.ListObject.ListRows.Add (1) 

gelb hervorgehoben. Ich kenne keine VBA, daher Makros aufzeichnen nicht sie zu schreiben, und ich kann Köpfe oder Geschichten davon nicht machen.

Edit: Okay, ich habe firgured, wie die Tabelle verweisen:

Worksheets("Transaction History").ListObjects("thistory").ListRows.Add (1) 

von dort also auf mich nur werde die ganze Sache neu zu schreiben, würde versuchen und tut es in VBA statt Nimm es auf. Google ist mein Freund. Danke für deine Hilfe. Jede Hilfe, die Sie weiter geben, wird sehr geschätzt.

+0

Nur festgestellt, dass es tatsächlich hängt vor dem Einfügen der leeren Zeile. – SpeedCrazy

+0

'.Select' ist die Hauptursache für Fehler :) Sie sollten die Operationen direkt ausführen. Nun zu 'Selection.ListObject.ListRows.Add (1)' Welches Blatt ist die 'Selection' in und was genau ist das' Selection'? –

+0

Sorry für meine n00bishness hier, aber was genau meinst du "Direkt die Operationen vorfertigen"? Der Rest deines Kommentars ist für mich genauso verwirrend. Sorry – SpeedCrazy

Antwort

2

Ist das, was Sie versuchen?

Sub transaction() 
    Dim wbI As Worksheet, wbO As Worksheet 

    Set wbI = Sheets("Income") 
    Set wbO = Sheets("Transaction History") 

    With wbO 
     .Visible = True 

     .ListObjects("thistory").ListRows.Add (1) 

     wbI.Range("B6:G6").Copy 

     .Range("B2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 

     With .ListObjects("thistory").Sort 
      With .SortFields 
       .Clear 
       .Add Key:=Range("thistory[[#All],[Date]]"), SortOn:=xlSortOnValues _ 
       , Order:=xlDescending, DataOption:=xlSortNormal 
      End With 
      .Header = xlYes 
      .MatchCase = False 
      .Orientation = xlTopToBottom 
      .SortMethod = xlPinYin 
      .Apply 
     End With 

     .Visible = False 
    End With 

    With wbI 
     .Range("B6:G6").ClearContents 
     .Rows("6:8").Hidden = False 
     .Range("B6").FormulaR1C1 = "=R[1]C" 
     .Rows(7).Hidden = True 
    End With 

End Sub 
+0

Ja. Vielen Dank. – SpeedCrazy

Verwandte Themen