Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:将数据添加到上次使用的行之后的单元格中_Vba_Excel - Fatal编程技术网

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…
语句,但以可以在表达式中使用的形式。好的。我现在明白了。非常感谢你。