在For循环中使用范围运行时错误1004 - VBA Excel Mac

问题描述:

一些上下文: - 我建立一个大表(1000x1000) - 我想填写一些值1 - 我有每个这种情况的行和列在一张单独的表格中在For循环中使用范围运行时错误1004 - VBA Excel Mac

这是我用来填充表格的代码。正如你所看到的,我在For循环中使用Range。它以前使用较小的数据集。这是造成麻烦的线是这样的一个: 表( “Feuil1.csv”)细胞(rng.Value,rng.Offset(1)。价值)= “1”

Sub FillEdges() 
Dim rng As Range 
For Each rng In Sheets("Feuil2").Range("A1:A53498") 
    Sheets("Feuil1.csv").Cells(rng.Value, rng.Offset(, 1).Value) = "1"  
Next rng 
End Sub 

做一些研究我了解到我可能想暂时保存,关闭并重新打开工作簿。我尝试过,但看起来VBA不考虑“保存,关闭和重新打开”代码。我试图找出一些与此帮助页面:

http://support.microsoft.com/kb/210684/en-us

害得我一个错误91与此代码。错误在第三行。

Sub FillEdges() 
     Dim rng As Range, mybook As Workbook 

mybook.SaveAs "Macintosh HD:Users:Nicolas:test.xslm", FileFormat:=53 
    For Each rng In Sheets("Feuil2").Range("A1:A53498") 
    If rng Mod 2500 = 0 Then 
       mybook.Close SaveChanges:=True 
       Set mybook = Nothing 
       Set mybook = Application.Workbooks.Open("Macintosh HD:Users:Nicolas:test.xslm") 
      End If 
     Sheets("Feuil1.csv").Cells(rng.Value, rng.Offset(, 1).Value) = "1" 

    Next rng 
    End Sub 

你知道如何解决这个错误91吗?

所以我不确定这将完全解决错误1004,但我认为这是正确的道路。或者,也许你会建议其他的东西......?

非常感谢您的时间。 祝您有美好的一天。 Nicolas。

+0

偏移(0,1) - 失踪的youre 0,你必须设置mybook,如:设置mybook = Application.Workbooks.Add – 2013-03-18 09:15:06

+0

感谢mehow。这可能是正确的。 不幸的是,我不明白这里使用的Set函数是什么。它打开一个新的工作簿,我不确定我将如何访问工作表“Feuil2”了。 它引发了我一个不同的错误。运行时错误:-2147352565(8002000b)。 我目前正在研究。 – 2013-03-18 09:41:05

+0

你必须为两者创建一个参考。例如:Dim worksheet1 as Worksheet,Set worksheet1 = ThisWorkbook.ActiveWorksheet。我认为你需要停止编程并学习VBA基础知识...对不起,但是你似乎没有足够的关于vba的知识,并且你试图做一些超出你的能力的东西。 – 2013-03-18 09:47:14

这是我最终做的。在编码之前学习更多关于VBA的知识是关键!特别是关于打开,保存和关闭文件。

请注意,最后我几乎没有触及上述微软网站的例子。

Sub remplir() 

Application.ScreenUpdating = False 

Dim rng As Range 
Dim worksheet1 As Worksheet 

Dim iTemp As Integer 
Dim oBook As Workbook 
Dim iCounter As Long 


Set worksheet1 = ActiveWorkbook.ActiveSheet 
iCounter = 1 

    ' Open the new full of zeros workbook: 

    Application.Workbooks.Open "Macintosh HD:Users:Nicolas:vba:test.xlsm" 
    Set oBook = ActiveWorkbook 



    'iTemp = Application.SheetsInNewWorkbook 
    'Application.SheetsInNewWorkbook = 1 
    'Set oBook = Application.Workbooks.Add 
    'Application.SheetsInNewWorkbook = iTemp 

    ' Add a defined name to the workbook 
    ' that RefersTo a range: 
    oBook.Names.Add Name:="tempRange", _ 
     RefersTo:="=Sheet1!$A$1" 

    ' Save the workbook: (attention extension fausse, mais ça n'empeche rien !) 
    oBook.SaveAs "Macintosh HD:Users:Nicolas:vba:test.xslm", FileFormat:=53 

    ' Work the sheet in a loop. Eventually, 
    ' you get error 1004: Copy Method of 
    ' Worksheet class failed. 
    For Each rng In worksheet1.Range("A1:A5038") 

    If rng.Value > 0 And rng.Row <> 1 Then 
    If rng.Value <> rng.Offset(-1, 0).Value Then 
    iCounter = iCounter + 1 
    End If 
    End If 

    Sheets("Feuil1").Cells(iCounter, rng.Offset(0, 1).Value + 1) = "1" 
    Sheets("Feuil1").Cells(iCounter, 1) = rng.Value 
     'Uncomment this code for the workaround: 
     'Save, close, and reopen after every 100 iterations: 
     If rng Mod 1000 = 0 Then 
      oBook.Close SaveChanges:=True 
      Set oBook = Nothing 
      '(attention extension fausse, mais ça n'empeche rien !) 
      Set oBook = Application.Workbooks.Open("Macintosh HD:Users:Nicolas:vba:test.xslm") 
     End If 

Next rng