Зацикливайте непустые строки и передайте номер строки в функцию - PullRequest
0 голосов
/ 01 октября 2019

У меня есть этот VBA, который преобразует ячейки в JSON:

' Convert JSON
Public Sub exceltojson()

Dim rng As Range, items As New Collection, myitem As New Dictionary, i As Integer, cell As Variant
Set rng = Range("A2")
i = 0

For Each cell In rng
    Debug.Print (cell.Value)
    myitem("name") = cell.Value
    myitem("email") = cell.Offset(0, 1).Value
    myitem("phone") = cell.Offset(0, 2).Value
    items.Add myitem
    Set myitem = Nothing
    i = i + 1
Next

Sheets(2).Range("A1").Value = ConvertToJson(items, Whitespace:=2)

End Sub

Это работает нормально, но без углубления в остальную часть кода, я пытаюсь сделать это зациклить, чтобы он шел вниз на одну строкув то время как там есть контент. Например, сначала он будет выполнять A2, затем A3, но если на A4 нет содержимого, он остановится перед выполнением кода на A4.

Я думаю, что у меня есть код для работы при цикле:

Dim sh As Worksheet
Dim rw As Range
Dim RowCount As Integer

RowCount = 0
Set sh = ActiveSheet

For Each rw In sh.Rows
    If sh.Cells(rw.Row, 1).Value = "" Then
        Exit For
    End If
    RowCount = RowCount + 1
Next rw

MsgBox (RowCount)

Я не уверен, как все это собрать. Я думал о том, чтобы цикл вызывал другую функцию следующим образом:

Dim sh As Worksheet
Dim rw As Range
Dim RowCount As Integer

RowCount = 0

Set sh = ActiveSheet
For Each rw In sh.Rows

  If sh.Cells(rw.Row, 1).Value = "" Then
    Exit For
  End If

  RowCount = RowCount + 1

  ' Run function
  exceltojson

Next rw

Я борюсь с тем, как передать это функции exceltojson в качестве нового номера строки, чтобы она использовалась в качестве ееrng значение?

1 Ответ

0 голосов
/ 01 октября 2019

Простая установка rng в диапазон, который вы хотите просмотреть, почти заставит ваш код делать то, что вы ищете. Что-то вроде Set rng = Range("A2:A10"). Теперь просто добавьте оператор If из вашего второго фрагмента кода:

For Each cell In rng
    If cell.value2 = vbNullString Then Exit For
    Debug.Print (cell.Value)
    myitem("name") = cell.Value
    myitem("email") = cell.Offset(0, 1).Value
    myitem("phone") = cell.Offset(0, 2).Value
    items.Add myitem
    Set myitem = Nothing
    i = i + 1
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...