2017-08-16 78 views
0

我有一个Access数据库来打开,编辑和保存Excel文档,第一次运行时工作正常,但如果我尝试修改多个文件(或同一文件两次)“运行时错误'1004'失败:对象'_Global'的方法'单元格'失败”访问VBA以打开,编辑和保存Excel文档

如果我关闭数据库然后重新打开它,它再次适用于第一个文件改变。

尽管我对VBA并不陌生,但我会说我是新手。这里是我正在使用的代码snippit:

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

If InStr(1,Cells(i,“C”)。Value,myVariable)> 0 Then – JDH

+1

坦率地说,我不知道它为什么可以工作。看起来这个代码是从Excel复制的。在像Cell这样的Access直接调用应该不起作用。使用变量,如'xl.Sheets(“Sheet1”)。Cells(i,“C”)' –

回答

1

Excel中使用的Excel VBA代码应该被修改。您不能使用直接调用Excel库方法,如Cell。为Excel.Application,Workbook和Worksheet声明变量并将其用于引用工作表单元格。避免使用激活方法。所以,在你的情况下,代码将是这样的:

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

再次谢谢谢尔盖!这只适用于一个小变化。我必须在Set wb = xl.Workbooks.Open(strInputFile)中放置()这个变量。没有什么大不了的,但是想提一下这个帖子的潜在未来观众。 我也点击了这个答案的向上箭头,但因为我是这个网站的新品显然我的选票还没有算。 :-) – JDH

+0

是的,当然()需要在这里,我编辑了答案。如果答案为您工作,接受它,在投票柜台下方会显示一个绿色的复选标记 –

相关问题