将文本框复制到单元格循环

时间:2019-05-20 15:29:43

标签: excel vba userform

我在用户表单上有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 :(得分:0)

您当前的问题似乎是单元未正确循环,从而使一个单元被分配了一组文本框。

这应该解决您的问题,因为它会增加每个循环以及文本框使用的单元格:

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,因此,如果此代码有误,请告诉我要更改的内容。)

答案 1 :(得分:0)

我认为这就是您要实现的目标。从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