Скопируйте TextBox в Cell Loop - PullRequest
0 голосов
/ 20 мая 2019

У меня 24 текстовых поля в пользовательской форме.Я ищу цикл, чтобы взять текстовое поле 1 и скопировать его значение в «G7», затем прокрутить вниз до следующей ячейки в столбце G и скопировать текстовое поле 2 и т. Д.

В настоящее время я копирую каждое текстовое поле всвой.Я хочу использовать прокрутку вниз, так как некоторые ячейки объединены

Range("G7").Value = TextBox1.Value
Range("G8").Value = TextBox2.Value
Range("G13").Value = TextBox3.Value
Range("G19").Value = TextBox4.Value

. Я хочу только потоковую передачу, так как у меня есть 3 различных пользовательских формы, чтобы сделать это на

. Я пробовал следующее, но код не заполняет ячейки:

Sheets("AssessCrit - PU").Select
Dim i As Long
For i = 1 To 24
With Me.Controls("TextBox" & i)
Range("G6").End(xlDown).Value = _
Array(TextBox1, TextBox2, TextBox3, .Value)
End With
Next i

У меня есть рабочее решение, Спасибо всем за помощь:

Sub SelectNextVisibleCell(Rng As Range)
Dim Cel As Range
For Each Cel In Range(Rng.Offset(1, 0), Rng.Offset(1000, 0))
If Cel.EntireRow.Hidden = False Then
  Set Rng = Cel
  Exit Sub
End If
Next Cel
End Sub



Private Sub CommandButton1_Click()
Sheets("AssessCrit - PU").Range("G7").Select
Dim Rng As Range
Dim i As Integer

For i = 1 To 24
Set Rng = ActiveCell
Call SelectNextVisibleCell(Rng)
Rng.Select
Rng.Value = Me.Controls("TextBox" & i).Value
Next i

End Sub

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Я думаю, это то, что вы пытаетесь достичь. Начиная с G7, он проверяет каждую ячейку на объединенное условие, если True, то он перейдет к следующей ячейке G8, чтобы проверить ее. Если ячейка не объединена, она будет копировать значение текстового поля, пока не скопирует текстовое поле 24.

Sub SkipMergedCells()
i = 7
    For x = 1 To 24
        If Range("G" & i).MergeCells = True Then
            i = i + 1
            x = x - 1

        ElseIf Range("G" & i).MergeCells = False Then
            Range("G" & i).Value = Me.Controls("TextBox" & x).Value
            i = i + 1

        End If
    Next x
End Sub

Обновлено, чтобы отразить объединенные ячейки в ColG.

Sub SkipMergedCells()
i = 7
    For x = 1 To 24
        If Range("G" & i).MergeCells = True Then
            Range("G" & i).Value = Me.Controls("TextBox" & x).Value

                            Dim mRowCnt As Long
            mRowCnt = Range("G" & i).MergeArea.Cells.Count

            i = i + mRowCnt
            x = x

        ElseIf Range("G" & i).MergeCells = False Then
            Range("G" & i).Value = Me.Controls("TextBox" & x).Value
            i = i + 1

        End If
    Next x
End Sub
0 голосов
/ 20 мая 2019

Похоже, ваши проблемы на данный момент заключаются в том, что ячейки не проходят должным образом циклический переход, из-за чего одной ячейке присваивается массив текстовых полей.

Это должно решить ваши проблемы, поскольку оно увеличивает ячейку, используемую в каждом цикле, а также TextBox:

Sheets("AssessCrit - PU").Select
Dim i As Long
For i = 1 To 24
    Range("G" & (6 + i)).Value = Me.Controls("TextBox" & i).Value
Next i
Me.Controls = Nothing

(я использую Excel нечасто, уделяя основное внимание Access, поэтому, если что-то из этогокод неправильный, пожалуйста, дайте мне знать, что изменить.)

...