Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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/24.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
Vba 查找空单元格,然后循环以获取新数据_Vba_Excel_Loops - Fatal编程技术网

Vba 查找空单元格,然后循环以获取新数据

Vba 查找空单元格,然后循环以获取新数据,vba,excel,loops,Vba,Excel,Loops,我有一个电子表格,它包含31个不同的选项卡,包含每日数据,然后将其汇总为每月选项卡,然后将每天的数据转换为软件上载。为了加快我的过程,我尝试将每天的上传一次合并到另一个选项卡中,而不是每天手动复制/粘贴。目前,为了查看每天的上传,我正在将B3单元格中的号码更改为我需要的日期,它将为我提供上传数据 编辑: 我希望这将如何工作是宏将把1放在上传选项卡的单元格B3中,获取A10:I34中的数据,将其粘贴到上传文件选项卡A列中的第一个空单元格,然后返回上传选项卡,将单元格B3更改为2,复制A10:I34

我有一个电子表格,它包含31个不同的选项卡,包含每日数据,然后将其汇总为每月选项卡,然后将每天的数据转换为软件上载。为了加快我的过程,我尝试将每天的上传一次合并到另一个选项卡中,而不是每天手动复制/粘贴。目前,为了查看每天的上传,我正在将B3单元格中的号码更改为我需要的日期,它将为我提供上传数据

编辑:

我希望这将如何工作是宏将把1放在上传选项卡的单元格B3中,获取A10:I34中的数据,将其粘贴到上传文件选项卡A列中的第一个空单元格,然后返回上传选项卡,将单元格B3更改为2,复制A10:I34中的数据,将其粘贴到上传文件选项卡A列中的下一个空单元格。。。重复此操作,直到第31天的数据粘贴到“上载文件”选项卡上

数据位于名为上载的选项卡中 选项卡上载时唯一可以更改的单元格是单元格B3 数据范围为A10:I34 数据需要在选项卡上载文件上粘贴值 上载文件在第1行中包含软件所需的格式化数据 编辑:

在粘贴每天的数据后,宏需要查找下一个空行 循环需要在第31天停止 我现在的问题是,我无法让它返回到上传选项卡,将日期更改为第二天,然后继续空单元格循环。它只是将数据粘贴到原始数据上,或者不将单元格值更改到第二天。下面是我改变日子的方法

编辑3:我调整了它,它现在可以工作了。请看一看,如果你认为它可以改进,请告诉我。为/下一步添加

有什么建议吗?以前的尝试只是在Upload Files(上传文件)选项卡上选择了上一次数据结束的确切单元格,但在Upload(上传)选项卡中添加行意味着我必须手动重新计算将粘贴哪些单元格,这与手动完成整件事一样耗时


谢谢,

我在代码中添加了一些注释供您理解:

Sub Test1()

    Dim Count As Integer
    Dim lLastRow As Long
    Dim i As Long

    Count = 2

    ' This would give you the last used row in the Sheet
    lLastRow = Worksheets("Upload Files").Cells(Worksheets("Upload Files").Rows.Count, 1).End(xlUp).Row

    For i = 1 To lLastRow

        ' You don't specify if you are trying to do anything in this section inside de Loop
        ' but if you just want to cound for the last row, you can remove the loop.
    Next i


    If Worksheets("Upload").Range("B3").Value < 32 Then

        ' Dont need this.
        'Worksheets("Upload").Range("B3").Select

        Worksheets("Upload").Range("B3").Value = Worksheets("Upload").Range("B3").Value + 1

        ' Here it would be nice if you specify from what Sheet you are copying this range. I guess is Upload.
        Worksheets("Upload").Range("A10:I34").Copy
        Worksheets("Upload Files").Range("A" & Count).PasteSpecial xlPasteValues

    End If

End Sub

我想你想要的是如下的东西:

Option Explicit
Sub upload()
    Dim targetSht As Worksheet
    Set targetSht = Worksheets("Upload Files")
    Dim i As Long

    With Worksheets("Upload")
        For i = 1 To 31
            .Range("B3").Value = i
            Application.Calculate

            With .Range("A10:I34")
                targetSht.Cells(targetSht.Rows.Count, 1).End(xlUp).Offset(1).Resize(.Rows.Count, .Columns.Count).Value = .Value
            End With
        Next
    End With
End Sub

问题可能是每次运行宏时都将计数重置为2?此外,您复制的区域没有指定工作表。计数重置是有意的,数据无法粘贴到第1行,因此当它查找下一个空单元格时,必须从A2开始。我甚至没有注意到那张纸上的错误!非常感谢。还有一点呢?我想每次都需要从2开始,因为上传完成后,我会将以前的上传文件选项卡复制到一个新的选项卡以供参考,然后从上传文件选项卡中删除所有数据,因此,我认为从顶部重新开始比从最后一个计数值开始更有意义。我建议使用Long而不是Integer。Excel的行数超过Integer所能处理的,在VBA中使用Integer没有任何好处。Integer是他使用的变量。我用long表示添加的两个变量。但是是的@malbane,不需要使用整数作为Pᴇʜ提到。将要复制的最大行数是1085,这对integer来说太多了吗?希望代码在粘贴到第二个选项卡后能够返回,并在第二天获得。因此,理论上,它会从Upload选项卡获取第1天的数据,将其粘贴到Upload files选项卡上的第一个空行,然后返回Upload选项卡获取第2天的数据,然后将其粘贴到第一天的数据下。
Option Explicit
Sub upload()
    Dim targetSht As Worksheet
    Set targetSht = Worksheets("Upload Files")
    Dim i As Long

    With Worksheets("Upload")
        For i = 1 To 31
            .Range("B3").Value = i
            Application.Calculate

            With .Range("A10:I34")
                targetSht.Cells(targetSht.Rows.Count, 1).End(xlUp).Offset(1).Resize(.Rows.Count, .Columns.Count).Value = .Value
            End With
        Next
    End With
End Sub