2017-11-03 15 views
0

これは何度も実行時エラー '1004'の下で発生していることがわかっていますが、ここと他のサイト。私のコードは、Accessフォームのコマンドボタンから実行され、フォームを開いた後初めて正常に実行されますが、その後の試行で失敗します。不適切な参照や2番目のExcelオブジェクトを開いていると思います。 他の書式設定が行われていますが、私はできるだけ省略しています。Excelでアクセスするときに実行時エラー '91'が発生する

Selection.Insertシフト::= xlToRight、CopyOrigin:

Dim dbs As Database 
Dim rst As DAO.Recordset 
Dim appExcel As Excel.Application 
Dim wbk As Excel.Workbook 
Dim wks As Excel.Worksheet 
Dim lngCount As Long 
Dim lngDataRows As Long 
Dim intLoop As Integer 
Dim strSheetName As String 
Dim dteStart As Date 
Dim dteEnd As Date 
Dim curStartBal As Currency 
Dim intMoves As Integer 
Dim lngCol As Long 
Dim lngRow As Long 
Dim intField As Integer 
Dim intFieldCount As Integer 
Dim strPath As String 
Dim strFile As String 
Dim strPathFile As String 
Dim blnFileCheck As Boolean 

strFile = "BudgetForecast.xlsx" 
strPath = genFindFolder("tblSettings") 'provides path to data store 
strPathFile = strPath & strFile 

blnFileCheck = genDeleteFile(strPath, strFile) 'Deletes existing file if it exists 

dteStart = DateAdd("m", 1, Date) 
dteEnd = DateAdd("m", 12, Date) 
strSheetName = "Forecast " & MonthName(Month(dteStart), True) & " " & CStr(Year(dteStart))   'Start Month and Year 
strSheetName = strSheetName & " To " & MonthName(Month(dteEnd), True) & " " & CStr(Year(dteEnd)) 'Add End Month and Year 
curStartBal = [Forms]![frmBudForecast]![txtStart1] 

'Create new Excel Workbook and add data 
Set dbs = CurrentDb 
Set rst = dbs.OpenRecordset("qryBudForecastFinal") 
Set appExcel = New Excel.Application 
Set wbk = appExcel.Workbooks.Add 
Set wks = wbk.ActiveSheet 

appExcel.Visible = True 

With wks 
    .Name = strSheetName 
    .Cells(1, 1).Value = "Sort" 
    .Cells(1, 2).Value = "Date" 
    .Cells(1, 3).Value = "Type" 
    .Cells(1, 4).Value = "Account" 
    .Cells(1, 5).Value = "Payee/Details" 
    .Cells(1, 6).Value = "Jan" 
     ' lines for Feb to Nov removed to shorten extract 
    .Cells(1, 17).Value = "Dec" 
    .Cells(1, 18).Value = "Totals" 

    rst.MoveLast 
    rst.MoveFirst 
    lngCount = rst.RecordCount 
    intFieldCount = rst.Fields.Count 
    lngDataRows = lngCount + 5 

    rst.MoveFirst 
    Do Until rst.EOF 
     lngCol = 1 
     lngRow = .[A65536].End(3).Row + 1 
     For intField = 0 To intFieldCount - 1 
      .Cells(lngRow, lngCol) = rst.Fields(intField).Value 
      lngCol = lngCol + 1 
     Next intField 
     rst.MoveNext 
    Loop 

    'Shift columns around to correct order 
    If Month(Date) <> 12 Then 'If December, records are already in correct order 
     intMoves = Month(Date) 
     For intLoop = 1 To intMoves 
      .Columns("R:R").Select 
       Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove '###Error here 
      .Columns("F:F").Select 
       Selection.Cut Destination:=Columns("R:R") 
      .Columns("F:F").Select 
       Selection.Delete Shift:=xlToLeft 
     Next intLoop 
    End If 

End With 

'Save new file (next line commented-out for testing) 
'appExcel.ActiveWorkbook.SaveAs FileName:=strPathFile, ConflictResolution:=xlOtherSessionChanges 
'Close Excel 
appExcel.ActiveWindow.Close (False) 

'Cleanup 
rst.Close 
Set rst = Nothing 
Set dbs = Nothing 
Set wks = Nothing 
Set wbk = Nothing 
appExcel.Quit 'Not sure if this line is necessary 
Set appExcel = Nothing 

End Sub 

エラーがこのラインに発生する()

ます。Private Sub cmdExport_Click = xlFormatFromLeftOrAbove

と '選択' 'のように見えます何もない。

私はあらゆる種類のバリエーションと構文の改訂を試みました - 私は列Rの選択により具体化する必要があると思うが、私は方法を知らない。ちなみに、コードが失敗すると、スプレッドシートの列Rはが選択されます。 フォームのコマンドボタンをクリックした後にコマンドボタンを非表示にしたいと思っていますが、これが偽りのようになり、私の理解を助けることはないでしょう。

答えて

1
​​

SelectionはAccessオブジェクトモデルの一部ではありません。しかし、可能であればselect/activateを使わないでください。例えば:

に変更
.Columns("F:F").Delete Shift:=xlToLeft 

How to avoid using Select in Excel VBA

+0

: .Columns( "R:R")

.Columns("F:F").Select Selection.Delete Shift:=xlToLeft 

は良好のように記述されるであろう。Shiftキーを挿入:= xlToRight、CopyOrigin。 ( 'R:R') これは'91 'エラーを修正しましたが、エラー(' 1004 ' - オブジェクトの' Columns 'メソッド)が発生しました。 「_グローバル」に失敗しました)次の行ただし、2行目を に変更する。列( "F:F")。切り取り先:= wks.Columns( "R:R") これを修正しました。ご協力いただき誠にありがとうございます。 – user8881858

関連する問題