子声明visual Basic

时间:2012-02-20 19:35:17

标签: excel vba excel-vba

我对很新,所以请原谅我对代码的屠杀。我正在尝试为excel编写一个宏(我的第一个),并且我在语句块之外得到“语句无效”(指向第一行)。这是我的代码:

Sub MakeHTMLTable()    
   Worksheets("Sheet1").Activate
   endRow As Integer

For Count = 1 To 200
    For CountY = 1 To 200
      If (!ActiveSheet.Cells(Count, CountY).Value.IsEmpty) Then
       ActiveSheet.Cells(Count, CountY).Value = "<td>" + ActiveSheet.Cells(Count, CountY).Value + "</td>"
      End If
    Exit For
Exit For

For i = 1 To 200
    If (!ActiveSheet.Cells(i, 1).Value.IsEmpty()) Then
        ActiveSheet.Cells(i, 1).Value = "<tr>" + ActiveSheet.Cells(i, 1)
    End If
Exit For

For x = 1 To 200
    If (!ActiveSheet.Cells(x, 1).Value.IsEmpty()) Then
        endRow = x
    End If
Exit For

For countAgain = 1 To 200
    If (!ActiveSheet.Cells(x, countAgain).Value.IsEmpty()) Then
        ActiveSheet.Cells(x, countAgain).Value = ActiveSheet.Cells(x, countAgain).Value + "</tr>"
    End If
Exit For
End Sub

我真的不明白,因为调试器在计算机生成的代码行上失败,甚至没有使用它。我错过了结束If“或For阻止吗?

我也意识到我可能正在重新发明轮子。任何有关更合适的内置函数的帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:3)

您的代码中似乎有很多语法错误。

VBA中,使用Dim关键字声明局部变量。 因此,endRow声明应如下所示:

Dim endRow As Integer

For循环应以Next语句结尾。因此,您的For循环应如下所示:

For x = 1 To 200
    If (!ActiveSheet.Cells(x, 1).Value.IsEmpty()) Then
        endRow = x
    End If
Next

VBA使用关键字Not代替!,因此,您的条件应如下所示:

If (Not (ActiveSheet.Cells(i, 1).Value.IsEmpty())) ...

尝试删除大部分代码并逐行添加,直到所有代码都正常工作。 VBA语法对于那些不习惯它的人来说可能很麻烦。