0

我正在尝试在 VBA 中编写一个模块来获取包含网站结构的工作表并将其输出到工作表中的两列(第 1 列)页面名称和(第 2 列)网站的部分页面在。(所以我可以在 Visio 中使用它)

我现有的工作表包含这样的结构:

Root / Section / Sub-section / Page
Root / Section / Page
Root / Section / Sub-section / Sub-section / Page

即每一行在左边的列中显示页面的祖先,但是结构复杂化的问题有不同的层次。

我试图遍历这个,从第 7 列(最深的导航级别)开始,最初向左循环以找到一个非空单元格,然后将该单元格及其父单元格复制到我的新工作表中。一旦它到达第 2 列,我希望它向下移动,因为它包含根;这一直持续到最后一行 562。

我的代码在下面,但它在我的“While Isempty”行上给了我一个错误。我做错了什么?

Sub directDescendent()

Dim readCol As Integer
Dim readRow As Integer
Dim writeRow As Integer
readCol = 7
readRow = 2
writeRow = 2

While readRow < 562
    While IsEmpty(ActiveWorkbook.Sheets(2).Cells(readRow, readCol).Value)
        readCol = readCol - 1
    Wend
    If readCol < 3 Then
        readCol = 7
        readRow = readRow + 1
    End If
    ActiveWorkbook.Sheets(3).Cells(writeRow, 1).Value =     ActiveWorkbook.Sheets(2).Cells(readRow, readCol).Value
    ActiveWorkbook.Sheets(3).Cells(writeRow, 2).Value = ActiveWorkbook.Sheets(2).Cells(readRow, readCol - 1).Value
    writeRow = writeRow + 1

Wend
End Sub
4

2 回答 2

3

当代码第 7 次进入时,您readCol的变量值为 0(零)While IsEmpty(ActiveWo...(最小值应该为 1),因此当 index 超出范围时抛出异常(要求具有元素的事物的第 0 个元素1 to n

于 2013-05-24T12:16:24.853 回答
1

您可以将 for-next 与 step = -1 一起使用。while-wend 不是必需的,因为迭代次数是已知的 (7)。

For readCol = 7 To 1 Step -1
    If Not IsEmpty(ActiveWorkbook.Sheets(2).Cells(readRow, readCol).Value) Then Exit For
Next readCol

'
' Note:
' Here readCol would be equeal to zero if all cells from column 7 to 1 are empty.
' 
于 2013-05-24T13:58:40.390 回答