2017-08-16 9 views
0

初めてExcelを起動、編集、保存するAccess DBがありますが、複数のファイル(または同じファイルを2回) "実行時エラー '1004'で失敗しました:メソッド 'Cells'オブジェクト '_Global'が失敗しました。VBAにアクセスしてExcelを開く、編集する、保存する

DBを閉じてから再度開くと、変更された最初のファイルに対して正常に動作します。

私はVBAの新人ではありませんが、私は初心者だと言います。ここでは、私が使用しているコードのスニッピです:

Code: 
     'Open spreadsheet and make it visible 
     Set xl = CreateObject("Excel.Application") 
     strInputFile = varItem 
     xl.Workbooks.Open strInputFile 
     xl.Visible = True 

     'Trying to get row count here but not working yet 
     'Set myRange = xl.Sheets("Sheet1").Range("C:C") 
     'lRowCount = Excel.Application.WorksheetFunction.CountA("Sheet1").Range("C:C") 
     'lRowCount = xl.WorksheetFunction.CountA(Worksheets("Sheet1").Cells(C, C)) 
     'Debug.Print lRowCount 
     'strMyRange = "C:C" 
     'lRowCount = xl.WorksheetFunction.CountA(strMyRange) 
     'Debug.Print lRowCount 
     'lRowCount = Excel.Application.WorksheetFunction.CountA(Workbooks(strInputFile).Sheets("Sheet1").Range("C:C")) 
     'Debug.Print lRowCount 

     'Make the changes 
     j = 0 
     If Left(strFile, 4) = "xxxx" Then 
      myPath = "\\a\path\for\xxxx" 
      If InStr(1, strFile, "IQ") Then 
       For i = 1 To 500 'Row count not working yet 
        If InStr(1, Cells(i, "C").Value, myVariable) > 0 Then 
         Cells(i, "B") = "New Value" 
         j = j + 1 
        End If 
       Next 
      End If 
     End If 

'Clean up 
xl.Quit 
Set xl = Nothing 
Set objInputFile = Nothing 
+0

への参照を追加することを忘れないでください? –

+0

InStr(1、Cells(i、 "C")。Value、myVariable)> 0 Then – JDH

+1

正に私はなぜそれがまったく機能するのか分かりません。このコードがExcelからコピーされたように見えます。 Accessでは、Cellのような直接呼び出しは機能しません。 'xl.Sheets(" Sheet1 ")のような変数を使うセル(i、" C ")' –

答えて

1

Accessで使用するExcel VBAコードは変更する必要があります。 CellのようなExcelライブラリメソッドの直接呼び出しは使用できません。 Excel.Application、Workbook、およびWorksheetの変数を宣言し、それらをワークシートセルの参照に使用します。 Activateメソッドの使用は避けてください。だから、あなたのケースでは、コードは次のようになります。

Dim xl As Excel.Application 
Dim wb As Excel.Workbook 
Dim ws As Excel.Worksheet 
Dim lRowCount As Long 

Dim myRange As Excel.Range 

Set xl = CreateObject("Excel.Application") 
strInputFile = varItem 
Set wb = xl.Workbooks.Open(strInputFile) 
Set ws = wb.Sheets("Sheet1") 

lRowCount = ws.UsedRange.Rows.Count 
'Make the changes 
j = 0 
If Left(strFile, 4) = "xxxx" Then 
    myPath = "\\a\path\for\xxxx" 
    If InStr(1, strFile, "IQ") Then 
     For i = 1 To lRowCount 
      If InStr(1, ws.Cells(i, "C").Value, myVariable) > 0 Then 
       ws.Cells(i, "B") = "New Value" 
       j = j + 1 
      End If 
     Next 
    End If 
End If 

wb.Save 
'Clean up 
xl.Quit 
Set xl = Nothing 

これで実行に失敗した行をMicrosoft Excelライブラリ

+0

もう一度Sergey !!ありがとう!これは1つのマイナーな変更で完全に機能します。 Set wb = xl.Workbooks.Open(strInputFile)の変数のまわりに()を置く必要がありました。大したことはないが、このポストの潜在的な視聴者のために言及したかった。 私はこの回答の上向き矢印をクリックしましたが、私はこのサイトのまったく新しいものですから、私の投票はまだカウントされていません。 :-) – JDH

+0

はい、もちろん()が必要です、私は答えを編集しました。答えがあなたのために働いた場合はそれを受け入れ、投票カウンタの下に緑色のチェックマークが表示されます –

関連する問題