2017-05-03 2 views
-1

Ich versuche, eine Dummy-Zeile in eine Excel-Datei über Zugriff mit VBA einfügen. Ich legte die folgenden auf eine Zugriffstaste, und wenn ich es benutze ich: „Fehler Kompilieren: Sub oder Funktion nicht definiert“Einfügen "Dummy" -Zeile in Excel über Access mit VBA

Sub Command10_Click() 

Dim objActiveWkbk As Object Dim objActiveWksh As Object Dim objXL As Object Dim strWkbkName As String 

strWkbkName = "C:\data\Payroll.csv" 

Set objXL = CreateObject("excel.application") objXL.Application.ActiveWorkbook Set objActiveWksh = objActiveWkbk.worksheets("Payroll.csv") 

Rows("2:2").Select 
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 
    Range("A2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("B2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("C2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("D2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("E2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("F2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("G2").Select 
    ActiveCell.FormulaR1C1 = "2500" 
    Range("H2").Select 
    ActiveCell.FormulaR1C1 = "1500" 
    Range("I2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("J2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("K2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("L2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("M2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("N2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("O2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("P2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("Q2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("R2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("S2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("T2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("U2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("V2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("W2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("X2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("Y2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("Z2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AA2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AB2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AC2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AD2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AE2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AF2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AG2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AH2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AI2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AJ2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AK2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AL2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AM2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AN2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AO2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AP2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AQ2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AR2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AS2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AT2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AU2").Select 
    ActiveCell.FormulaR1C1 = "BBB" 
    Range("AV2").Select 
    ActiveWorkbook.Save 

objActiveWkbk.Close SaveChanges:=False Set objActiveWkbk = Nothing objXL.Application.Quit Set objXL = Nothing End Sub 




Private Sub Command4_Click() DoCmd.OpenQuery "qry_CARS Capps Compile" 

End Sub 

Private Sub Command8_Click() DoCmd.TransferText acImportDelim, , "CARS Capps B", "P:\EMI\Drop\CARS Capps.csv", True 

End Sub 

Public Sub Import_CARS_Capps_Click() Dim xlApp As Object Dim xlBook As Object 

xlApp.Visible = True 

Set wbExcel = xlApp.Workbooks.Add Set xlBook = xlApp.Workbooks.Open("P:\EMI\Drop\CARS Capps.csv")  'ie "C:\My Documents\Data To Import.xlsx" xlApp.DisplayAlerts = False Workbook("CARS Capps.csv").Activate 
     Sheets("Sheet1").Activate          'Sheet1 should be the actual name of your work sheet 
     Range("a2").Select 
     ActiveCell.EntireRow.Insert          'Insert a row below the header 
     Cells(2, 1).Value = "aaa" Cells(2, 2).Value = "aaa" Cells(2, 3).Value = "aaa" Cells(2, 4).Value = "aaa" Cells(2, 5).Value = "aaa" Cells(2, 6).Value = "aaa" Cells(2, 7).Value = "5555" Cells(2, 8).Value 
= "5555" Cells(2, 9).Value = "aaa" Cells(2, 10).Value = "aaa" Cells(2, 11).Value = "aaa" Cells(2, 12).Value = "aaa" Cells(2, 13).Value = "aaa" Cells(2, 14).Value = "aaa" Cells(2, 15).Value = "aaa" Cells(2, 16).Value = "aaa" Cells(2, 17).Value = "aaa" Cells(2, 18).Value = "aaa" Cells(2, 19).Value = "aaa" Cells(2, 20).Value = "aaa" Cells(2, 21).Value = "aaa" Cells(2, 22).Value = "aaa" Cells(2, 23).Value = "aaa" Cells(2, 24).Value = "aaa" Cells(2, 25).Value = "aaa" Cells(2, 26).Value = "aaa" Cells(2, 27).Value = "aaa" Cells(2, 28).Value = "aaa" Cells(2, 29).Value = "aaa" Cells(2, 30).Value = "aaa" Cells(2, 31).Value = "aaa" Cells(2, 32).Value = "aaa" Cells(2, 33).Value = "aaa" Cells(2, 34).Value = "aaa" Cells(2, 35).Value = "aaa" Cells(2, 36).Value = "aaa" Cells(2, 37).Value = "aaa" Cells(2, 38).Value = "aaa" Cells(2, 39).Value = "aaa" Cells(2, 40).Value = "aaa" Cells(2, 41).Value = "aaa" Cells(2, 42).Value = "aaa" Cells(2, 43).Value = "aaa" Cells(2, 44).Value = "aaa" Cells(2, 45).Value = "aaa" Cells(2, 46).Value = "aaa" Cells(2, 47).Value = "aaa" Cells(2, 48).Value = "aaa" Cells(2, 49).Value = "aaa" Cells(2, 50).Value = "aaa" Cells(2, 51).Value = "aaa" Cells(2, 52).Value = "aaa" Cells(2, 53).Value = "aaa" Cells(2, 54).Value = "aaa" Cells(2, 55).Value = "aaa" Cells(2, 56).Value = "aaa" Cells(2, 57).Value = "aaa" Cells(2, 58).Value = "aaa" Cells(2, 59).Value = "aaa" Cells(2, 60).Value = "aaa" Cells(2, 61).Value = "aaa" 

xlBook.Save Workbooks("Cars Capps.csv").ClosexlApxlApp.Quit xlApp.DisplayAlerts = True Set xlBook = Nothing Set xlApp = Nothing 


End Sub 
+0

Können Sie Ihren Code bitte neu formatieren? Anstatt einen Angebotsblock zu verwenden, fügen Sie den Code ein, markieren Sie ihn und klicken Sie auf die Schaltfläche "{}". Sie erhalten einen Fehler, weil alles zusammengewürfelt und nicht getrennt ist. Es ist ein Formatierungsproblem, vorausgesetzt, der Code befindet sich in Ihrem Arbeitsbuch genau so, wie Sie ihn veröffentlicht haben. – BruceWayne

+0

Über welche spezifische Anweisung beschwert sich der Compiler? –

+2

Ich habe versucht, den Zitatblock in einen tatsächlichen Codeblock zu bearbeiten, aber ich denke, dass er das tatsächliche Codelayout durcheinander gebracht hat ... schwer zu sagen. Bitte ** [bearbeiten] ** die Frage - wählen Sie den gesamten Code, entfernen Sie es. Gehen Sie zu Ihrem VBA-Editor, wählen Sie den ** relevanten Code **, drücken Sie TAB, um 4 Leerzeichen einzurücken, kopieren Sie sie und fügen Sie sie hier ein. –

Antwort

1

Es gibt ein paar unmittelbaren Probleme in den Sub Command10_Click(), dass ich sehen kann, dass bewirkt der Code zum Fehlschlagen. Ich werde das unten illustrieren.

Alles sieht mit diesem gut:

Dim objActiveWkbk As Object 
Dim objActiveWksh As Object 
Dim objXL As Object 
Dim strWkbkName As String 

strWkbkName = "C:\data\Payroll.csv" 

Set objXL = CreateObject("excel.application") 

Aber das nächste Zeile ist falsch: Set objActiveWkbk = objXL.Application.ActiveWorkbook

Sie VBA bitten um ein Objekt zu setzen, der nicht existiert. In der obigen Anweisung haben Sie ein Excel-Objekt erstellt, aber Sie haben noch keine Arbeitsmappe erstellt, die dem Excel-Objekt zugeordnet ist.

Das heißt, ändern Sie die Zeile zu

Set objActiveWkbk = objXL.Workbooks.Open(strWkbName) 

das Objekt zu erstellen.

Dann wird diese Zeile funktionieren:

Set objActiveWksh = objActiveWkbk.Worksheets("Payroll.csv") 

(Caveat hier ist, dass der Arbeitsblatt-NametatsächlichEnden in .csv Wenn nicht, bearbeiten Sie es entsprechend.)

jedoch die Der Rest des Codes wird abgebrochen, da Sie die Eigenschaften oder Methoden für das Excel-Objekt nicht qualifizieren. Access versteht nicht Rows, Range, Selection usw. Es ist nicht Teil der Syntax des Access VBA-Objektmodells, so dass Access nicht wissen, was zu tun ist, wenn es sieht. Es ist Teil des Excel-Objektmodells, so dass Sie Access VBA nur mitteilen müssen, indem Sie Eltern zuordnen.

A Mit Block ist eine schnelle und effiziente Möglichkeit, dies zu tun.

With objActiveWksh 
    .Rows("2:2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 

Beachten Sie auch, wie ich diese Aussage Refactoring der Select Sachen loszuwerden. Du brauchst es nicht. Es verlangsamt den Code und erschwert die Pflege. Arbeite stattdessen direkt mit dem Objekt. (In seltenen Fällen ist Select erforderlich).

also weiter auf ...

.Range("A2:F2").Value = "BBB" 'set them all at once 
    .Range("G2").Value = "2500" 
    .Range("H2").Value = "1500" 
    .Range("J2:AA2").Value = "BBB" 'set them all at once 
End With 

Dann ehrlich, ich bin verwirrt darüber, warum Sie eine Arbeitsmappe erstellen und es dann schließen, ohne die Änderungen zu speichern, aber der Rest sieht gut aus.

objActiveWkbk.Close SaveChanges:=False 
Set objActiveWkbk = Nothing 
objXL.Application.Quit 
Set objXL = Nothing 
+0

Das OP hat auch einen Tippfehler in 'Workbook (" CARS Capps.csv "). Activate' (was wahrscheinlich den spezifischen Fehler erzeugt, den sie erwähnen, aber sinnloses Reparieren, ohne auch alles andere zu reparieren, das Sie erwähnen. Und sie sollten nicht sowieso die 'Activate' mit - sie' xlBook' verwenden) – YowE3K

+0

Forget ich etwas gesagt -. obwohl diese Linie ein Problem verursachen, wenn sie alles andere zu beheben, die 'Import_CARS_Capps_Click' Unter, dass es in nicht einmal ein erstellen Excel-Anwendungsobjekt Es versucht nur, 'xlApp' zu verwenden, ohne es zu initiieren. So würde sogar 'xlApp.Workbooks (" CARS Capps.csv "). Activate' abstürzen. – YowE3K