Excel VBA:将数据添加到上次使用的行之后的单元格中
图片显示了我的代码发生了什么 我有一个用户表单,我将用户表单的标签添加到所选工作表中。这就是我试过的。现在的问题是,为什么有一个单元格与其他单元格不在同一行Excel VBA:将数据添加到上次使用的行之后的单元格中,vba,excel,Vba,Excel,图片显示了我的代码发生了什么 我有一个用户表单,我将用户表单的标签添加到所选工作表中。这就是我试过的。现在的问题是,为什么有一个单元格与其他单元格不在同一行 Dim c As Control For Each c In Me.Controls If TypeName(c) = "Label" Then With ActiveSheet i = i + 1 Dim lastRow As Long las
Dim c As Control
For Each c In Me.Controls
If TypeName(c) = "Label" Then
With ActiveSheet
i = i + 1
Dim lastRow As Long
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
If c <> "Chapter" Then
.Range(Cells(1, 1), Cells(1, i)).Name = "Chapter1"
.Range("Chapter1").Merge
.Range("Chapter1").Value = "Chapter 1"
.Range("Chapter1").HorizontalAlignment = xlCenter
.Cells(lastRow, i).Value = c.Caption
End If
End With
End If
Next
Dim c作为控件
对于Me.Controls中的每个c
如果TypeName(c)=“标签”,则
使用ActiveSheet
i=i+1
最后一排一样长
lastRow=.Cells(.Rows.Count,“A”).End(xlUp).行+1
如果c是“章”,那么
.Range(单元格(1,1),单元格(1,i)).Name=“第1章”
.范围(“第1章”).合并
.Range(“第1章”).Value=“第1章”
.范围(“第1章”).水平对齐=xlCenter
.Cells(最后一行,i).Value=c.标题
如果结束
以
如果结束
下一个
问题是,第一次执行.Cells(.Rows.Count,1).End(xlUp)。Row
A2中还没有任何内容,因此lastRow
将为1。但是,一旦您在下一次执行该代码时将值“No.”放入该单元格中(其中i
为2),A2将被填充,因此现在.Cells(.Rows.Count,1).End(xlUp)。Row
将返回2,给您带来的效果是:所有其他值都将以较低一行结束
有几种方法可以解决这个问题,但这里有一种方法。添加+IIf(i=1,1,0)
最后一行的赋值:
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + IIf(i = 1, 1, 0)
如果您希望最后一行使用的空白单元格(=最后一行填充DADA),则使用<代码> LSTROWE + 1 >因为<代码> LSTROWE 代表最后一行填充的数据。这与+1发生,所以我不能猜出您想要实现什么,您需要告诉我们您的目标。请描述一下你的代码实际做了什么,以及你期望它做什么。我编辑了我的问题。但我不确定这是否可以理解。我很难解释我想要发生什么。第一行有很多合并的单元格。因此,当循环中的lastrow=1时,实际上是在尝试写入合并区域中的各个单元格。这是不可能的。只能在第一个单元格中写入。因此,请检查lastrow的值。您好,非常感谢。这对我有用。通过你的解释,我理解了我的代码发生了什么。非常感谢你。现在我来研究一下你刚才告诉我要用的IIf来了解发生了什么。非常感谢。不客气;-)当
i=1时,IIf
将向结果中添加1,否则将不添加任何内容(0)。这就像一个如果。。。然后。。。Else…
语句,但以可以在表达式中使用的形式。好的。我现在明白了。非常感谢你。