2

我有多个电子表格,我需要在一个特别命名的工作表上复制从“S4”开始的列,并且我只需要该列中包含数据的单元格(从 S4 开始以及它下面的所有内容)。

我需要复制该数据并将其粘贴到我的“主”电子表格中,从特定工作表的 A2 开始。我可以用一个电子表格来做到这一点,但是我遇到的问题我需要 VBA 来找到 A 列中最后一个有值的单元格,然后开始将新数据粘贴到它下面的单元格中,等等......否则,当它查看其他电子表格,它只是覆盖了我的主电子表格中的数据。

您会注意到 S4:S2000 的指定范围 - 它的目的是用于单个电子表格,它工作得很好,因为我从来没有超过 2000 年的数据,但我真的只需要它来查找单元格值并抓取这些值。

这是我遇到麻烦的代码块。我希望它从 A2 开始搜索(跳过列标题),查找最后一个具有值的单元格,然后将值从 S4 开始的单元格粘贴到另一个工作表上。

On Error Resume Next
        Set wbkCS = Workbooks.Open(strCutSheetFile(i))
        On Error GoTo 0
    If Not wbkCS Is Nothing Then
        With wbkVer.Sheets("Cutsheets")
             .Range(.Cells(2,1)).End(xlUp).Row = wbkCS.Worksheets("Cut Sheet").Range("S4:S2000").Value

我不得不稍微调整一下你的,因为我正在处理受保护的文件,但这有效:

Set copyRng1 = Worksheets("Cutsheets").Range("A2")

If copyRng1 = "" Then
        wbkCS.Worksheets("Cut Sheet").Range("S4:S2000").Locked = False
        wbkCS.Worksheets("Cut Sheet").Range("S4:S2000").Copy Destination:=wbkVer.Worksheets("Cutsheets").Range("A2")
    Else
        wbkCS.Worksheets("Cut Sheet").Range("S4:S2000").Copy Destination:=wbkVer.Worksheets("Cutsheets").Range("A" & wbkVer.Worksheets("Cutsheets").Range("A65536").End(xlUp).Row + 1)

    End If
4

2 回答 2

0

以下是如何准确获取 S 中填充的行的方法:

Dim StrRange As String

. . .

'Get range
strRange = "S4:S" & Worksheets(wkShtIndex).UsedRange.Columns("S:S").Rows.Count  
'Do something with range
Worksheets(wkShtIndex).Range(strRange)
于 2012-12-22T20:47:56.410 回答
0

这是一个可以将您推向正确方向的示例...

假设我想Sheet1使用S4:S2000工作簿中所有其他工作表中的数据来聚合我的数据。

Sub CopyAndStack()
    Dim wkShtIndex As Integer, copyRng As Range

    Set copyRng = Worksheets(1).Range("A2")

    For wkShtIndex = 2 To Worksheets.Count
        If copyRng = "" Then
            Worksheets(wkShtIndex).Range("S4:S2000").Copy Destination:=copyRng
        Else
            Worksheets(wkShtIndex).Range("S4:S2000").Copy Destination:=Range("A" & copyRng.End(xlDown).Row + 1)
        End If
    Next wkShtIndex
End Sub

我检查是否A2为空,如果是,我粘贴第一批数据。

如果A2不是空的,我会在 A 列中获取下一个空单元格并将其粘贴到那里。

于 2012-12-22T19:16:52.707 回答