2013-07-08 42 views
0

我正在研究一些VBA,旨在循环使用Excel制作的学生的Schedule Builder。在作业c = c.Offset(X, 0)期间,我一直收到错误424,但只在嵌套的For循环中出现。有限的范围,如果是的话,我如何克服它?for循环中的单元格对象的作用域 - VBA

下面是代码:

Public Sub generateRosters() 

    Worksheets("Course Rosters").Cells.ClearContents 
    Worksheets("Course Rosters").Range("A1") = "Course" 
    Worksheets("Course Rosters").Range("B1") = "Room" 

    Dim classTitleRange As Range 
    Set classTitleRange = Worksheets("Master School Schedule").Range("D1:BN1") 

    Dim rowCount As Integer 
    rowCount = 2 

    Dim periodArr(1 To 8) As String 
    periodArr(1) = "A" 
    periodArr(2) = "B" 
    periodArr(3) = "C" 
    periodArr(4) = "D" 
    periodArr(5) = "E" 
    periodArr(6) = "F" 
    periodArr(7) = "G" 
    periodArr(8) = "Z" 

    For Each c In classTitleRange.Cells 

     Dim courseTitle As String 
     courseTitle = c 

     c = c.Offset(2, 0) 

     Dim room As String 
     room = c 

     For Each p In periodArr() 

      Dim offsetCount As Integer 
      offsetCount = 0 

      For i = 1 To 340 
       c = c.Offset(1, 0) '424 Error One 
       If c = p Then 

       End If 
       offsetCount = offsetCount + 1 
      Next 

      c = c.Offset(-offsetCount, 0) '424 Error Two 

     Next 

     Worksheets("Course Rosters").Range("A" & rowCount) = "'" & courseTitle 
     Worksheets("Course Rosters").Range("B" & rowCount) = room 

     rowCount = rowCount + 1 

    Next 

    End Sub 

谢谢您的帮助。

编辑:旁边的问题,有没有办法让我创建一个变量,我可以像c一样操作,但不是c。基本上是Dim d As (Something),然后是d = c。我似乎无法找到指定给d的正确对象,所以我可以使它成为c。再次感谢。

回答

1

我不明白你的代码的逻辑和目标,因此只有一些提示您:

c=c.offset(2,0) 

改变初始Range type c variable为空或任何其他值。 接下来,您尝试在错误行中使用与范围对象相同的c variable,这是不允许的。

你可能需要的是以下行Set instruction

Set c= c.offset(2,0) 
'.... 
Set c= c.offset(1,0) 

但正如我所说,我不知道完整的逻辑,因此这是你的错误解决方案,但不知道这是否解决你所有的问题。

+0

我的逻辑是,我对VBA相当陌生,并不知道更好。谢谢您的帮助! – user2004245