【问题标题】:Copy TextBox to Cell Loop将文本框复制到单元格循环
【发布时间】:2019-05-21 20:38:45
【问题描述】:

我在一个用户窗体上有 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

【问题讨论】:

  • 花点时间逐行浏览您的代码正在执行的操作。目前,它正在尝试用数组而不是实际值覆盖同一个单元格 24 次。
  • 我注意到了这一点,但我对如何滚动 TextBoxes 然后滚动循环中的 Cells 感到困惑。任何帮助将不胜感激
  • 作为一个粗略的、未经测试的循环,您可以尝试类似For i = 1 to 24: Worksheets("AssessCrit - PU").Range("G5").Offset(0,i).Value = Me.Controls("TextBox" & i).Text: Next i

标签: excel vba userform


【解决方案1】:

您目前的问题似乎是单元格没有正确循环通过,这导致一个单元格被分配了一个文本框数组。

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

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

【讨论】:

  • 您错过了问题中并不清楚的重要信息:* 我想使用向下滚动,因为某些单元格已合并* OP 并不真正意味着“向下滚动”。 ..我认为向下箭头是什么意思。
  • 嗨,辛迪,谢谢。是的,这正是我的意思。 TextBox 1 转到单元格 G7,然后向下箭头,TextBox2 转到下一个单元格,然后向下箭头,依此类推
【解决方案2】:

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

【讨论】:

  • 大家好,谢谢您的帮助,我正在使用您提供的内容,是的,我知道使用合并单元格是一个巨大的不,但是......列中的单元格是合并和非合并的组合,我希望能够将文本框 1 复制到单元格 G7,然后合并下一个单元格,并且必须将文本框 2 复制到该单元格。然后必须将文本框 3 复制到合并或未合并的下一个单元格。我会很感激一些帮助,但如果我让它按照它必须的方式工作,我会告诉你们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 2016-12-19
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多