2012-02-20 88 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