我对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
阻止吗?
我也意识到我可能正在重新发明轮子。任何有关更合适的内置函数的帮助都将受到赞赏。
答案 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
语法对于那些不习惯它的人来说可能很麻烦。