2012-02-20 3 views
0

Я действительно знаком с , поэтому, пожалуйста, простите мой убой кода. Я пытаюсь написать макрос для excel (мой первый), и я получаю «заявление недействительным вне блока типов» (указывая на первую строку). Вот мой код:sub declaration 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

+1

Я никогда не видел, что IsEmpty используется таким образом, и я не могу заставить его работать. Должно ли это быть «If Not IsEmpty (ActiveSheet.Cells (i, 1) .Value) Затем« –

+0

@DickKusleika Спасибо за это. Сейчас у меня это работает, но для меня это тоже не скомпилируется. Идите фигуру, плохой синтаксис, никакой работы. – Riet