VBA Excel 2013在列“C”和“D”中写入ActiveCells,然后复制并粘贴,直到列“A”更改

VBA Excel 2013在列“C”和“D”中写入ActiveCells,然后复制并粘贴,直到列“A”更改,vba,excel,Vba,Excel,我是VBA新手,遇到了第一个主要问题。我想做的应该很简单。然而,我似乎无法让它发挥作用 现在,我正在构建一个UserForm,它可以简化某种仪表板中的条目 我已经编写了将选中列表框项目和文本框的值从UserForm写入单元格的代码,例如免责声明:可能是您见过的最糟糕的代码: Public Sub Schreiben() Range("C" & (ActiveCell.row)).Value = frmEingabe.txtStatus.Value Dim listItems As

我是VBA新手,遇到了第一个主要问题。我想做的应该很简单。然而,我似乎无法让它发挥作用

现在,我正在构建一个UserForm,它可以简化某种仪表板中的条目

我已经编写了将选中列表框项目和文本框的值从UserForm写入单元格的代码,例如免责声明:可能是您见过的最糟糕的代码:

Public Sub Schreiben()

 Range("C" & (ActiveCell.row)).Value = frmEingabe.txtStatus.Value
 Dim listItems As String, i As Long

With frmEingabe.lstComment
    For i = 0 To .ListCount - 1
        If .Selected(i) Then listItems = listItems & .List(i) & ", "
    Next i
End With


If Len(listItems) > 0 And IsNull(frmEingabe.txtFrei) Then
    Range("D" & (ActiveCell.row)).Value = Left(listItems, Len(listItems) - 2)
Else
    If Len(listItems) = 0 And Not IsNull(frmEingabe.txtFrei) Then
          Range("D" & (ActiveCell.row)).Value = frmEingabe.txtFrei.Value
    Else
        If Len(listItems) > 0 And Not IsNull(frmEingabe.txtFrei) Then
        Range("D" & (ActiveCell.row)).Value = Left(listItems, Len(listItems) - 2) & ", " & frmEingabe.txtFrei.Value
        End If
    End If
End If
End Sub
现在的问题是,它只对一行执行此操作,即活动行。但是,我需要一个额外的功能,将这些值写入C列和D列中的单元格,复制这些值,然后将它们粘贴到C列和D列中,直到A列中的值发生更改

基本上,我想用完全相同的信息填充相同类型的所有行,即A中相同的值,按A排序,但不想单独写入,因为这大大增加了仪表板的计算时间。由于这个原因,For循环对我来说不起作用,因为每次粘贴到每个单元格都需要很长时间,我没有构建仪表板-每次在单元格中输入内容时,都需要几秒钟来计算发生了什么

我已经编写了一个代码,跳转到a列与以前不同的行:

Private Sub btnJump_Click()
cmpgn = Range("A" & (ActiveCell.row)).Value
Do
Selection.Offset(1, 0).Select
Loop Until ActiveCell.EntireRow.Hidden = False And cmpgn <> Range("A" & (ActiveCell.row)).Value
End Sub  
将两者结合起来并拥有代码的最聪明的方式是什么:

从代码第一次将值从UserForm写入工作表的行中填入C列和D列,直到A列中的值发生更改 选择ActiveCells.Row C&D,复制其值,选择两列中的单元格,直到A列中的值发生更改,然后粘贴这些值。 我希望我的问题是清楚的。如果没有,请让我知道,我会尽力澄清


提前多谢

您始终可以使用Application.calculation=xlCalculationManual暂时禁用计算,然后使用Application.calculation=xlCaCalculationAutomatic重新启用它。这将允许您在不牺牲性能的情况下使用FillDown选项

您始终可以使用Application.calculation=xlCalculationManual暂时禁用计算,然后使用Application.calculation=xlCaCalculationAutomatic重新启用它。这将允许您在不牺牲性能的情况下使用FillDown选项。这些是您将从宏记录器获得的结构,但在VBA编程中通常要避免这些结构。谢谢!插入Application.Calculation.xCalculationManual和Application.Calculation.xCalculationAutomatic确实有助于解决此问题。它现在运行-我可以在以后继续优化代码;如果您愿意接受下面的问题,那么这个问题可能对将来有类似问题的其他人是可见的和有用的。干杯