2012-02-20 87 views
0

我真的很新,所以请原谅我对代码的屠杀。我想为excel写一个宏(我的第一个),并且我得到了“在语句块外面的语句无效”(指向第一行)。这里是我的代码:sub声明visual Basic

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块?

我也意识到,我可能重新发明轮子。任何帮助就比较合适的内置函数,将不胜感激。

回答

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语法会很麻烦。

+0

谢谢!它现在有效。 – Riet 2012-02-20 21:06:39

+1

我从来没有见过使用这种方式的IsEmpty,我无法让它工作。应该是'If Not IsEmpty(ActiveSheet.Cells(i,1).Value)然后' – 2012-02-20 21:53:35

+0

@DickKusleika谢谢你。我现在已经开始工作了,但它也不适合我。去图,糟糕的语法,没有工作。 – Riet 2012-02-20 22:39:09