Excel 将行复制到母版图纸

Excel 将行复制到母版图纸,excel,vba,Excel,Vba,我有一个工作簿,将由全国各地的不同用户每天更新。每隔一段时间,我需要将每个站点的不同表单上输入的所有数据复制到总部的主表单上。 我自己也试过写作,但对VBA没有太多经验。我在其他线程上尝试了一些其他示例,但找不到任何适合我的。 我希望它复制到一个主机上,但是如果第二天添加了更多的数据,当它下次复制时,它不会复制已经复制的数据。 理想情况下,我需要主有所有不同的网站数据整理,但仍然保留在原始表中的所有。 看看这个,我想这是我能找到的最接近我正在尝试做的事情,但是我不断地得到运行时错误。 我并不声称

我有一个工作簿,将由全国各地的不同用户每天更新。每隔一段时间,我需要将每个站点的不同表单上输入的所有数据复制到总部的主表单上。 我自己也试过写作,但对VBA没有太多经验。我在其他线程上尝试了一些其他示例,但找不到任何适合我的。 我希望它复制到一个主机上,但是如果第二天添加了更多的数据,当它下次复制时,它不会复制已经复制的数据。 理想情况下,我需要主有所有不同的网站数据整理,但仍然保留在原始表中的所有。 看看这个,我想这是我能找到的最接近我正在尝试做的事情,但是我不断地得到运行时错误。 我并不声称自己理解这一点

Dim wksSrc As Worksheet, wksDst As Worksheet
Dim rngSrc As Range, rngDst As Range
Dim lngLastCol As Long, lngSrcLastRow As Long, lngDstLastRow As Long




Set wksDst = ThisWorkbook.Worksheets("Master data")
lngDstLastRow = LastOccupiedRowNum(wksDst)
lngLastCol = LastOccupiedColNum(wksDst)


Set rngDst = wksDst.Cells(lngDstLastRow + 1, 1)


For Each wksSrc In ThisWorkbook.Worksheets

    
   If wksSrc <> "National tasks" And wksSrc <> "Sheet8" And wksSrc <> "Master data" Then
        
        
        lngSrcLastRow = LastOccupiedRowNum(wksSrc)
        
        
        With wksSrc
            Set rngSrc = .Range(.Cells(2, 1), .Cells(lngSrcLastRow, lngLastCol))
            rngSrc.Copy Destination:=rngDst
        End With
        
        
        lngDstLastRow = LastOccupiedRowNum(wksDst)
        Set rngDst = wksDst.Cells(lngDstLastRow + 1, 1)
        
    End If

Next wksSrc

End Sub

Public Function LastOccupiedRowNum(Sheet As Worksheet) As Long
    Dim lng As Long
    If Application.WorksheetFunction.CountA(Sheet.Cells) <> 0 Then
        With Sheet
            lng = .Cells.Find(What:="*", _
                              After:=.Range("A1"), _
                              Lookat:=xlPart, _
                              LookIn:=xlFormulas, _
                              SearchOrder:=xlByRows, _
                              SearchDirection:=xlPrevious, _
                              MatchCase:=False).Row
        End With
    Else
        lng = 1
    End If
    LastOccupiedRowNum = lng
End Function


Public Function LastOccupiedColNum(Sheet As Worksheet) As Long
    Dim lng As Long
    If Application.WorksheetFunction.CountA(Sheet.Cells) <> 0 Then
        With Sheet
            lng = .Cells.Find(What:="*", _
                              After:=.Range("A1"), _
                              Lookat:=xlPart, _
                              LookIn:=xlFormulas, _
                              SearchOrder:=xlByColumns, _
                              SearchDirection:=xlPrevious, _
                              MatchCase:=False).Column
        End With
    Else
        lng = 1
    End If
    LastOccupiedColNum = lng
End Function
Dim WKSRC作为工作表,WKSST作为工作表
变暗rngSrc As范围,rngDst As范围
暗淡的lngLastCol为长,LNGSRCSTASTROW为长,LNGDSTASTROW为长
设置wksDst=此工作簿。工作表(“主数据”)
LNGDSTSTASTROW=最近发生的事件(wksDst)
lngLastCol=最近占用的Lnum(wksDst)
设置rngDst=wksDst.Cells(LNGDSTSTSTASTROW+1,1)
对于此工作簿中的每个WKSRC。工作表
如果WKSRC“国家任务”和WKSRC“表8”以及WKSRC“主数据”,则
LNGSRCASTROW=Lastoccupiedochum(WKSRC)
与WKSRC合作
设置rngSrc=.Range(.Cells(2,1),.Cells(LNGSRCASTROW,lngLastCol))
rngSrc.Copy Destination:=rngDst
以
LNGDSTSTASTROW=最近发生的事件(wksDst)
设置rngDst=wksDst.Cells(LNGDSTSTSTASTROW+1,1)
如果结束
下一届西九龙文娱艺术中心
端接头
公共函数LastOccupiedum(工作表形式)长度为
随着时间的推移,液化天然气变得暗淡
如果Application.WorksheetFunction.CountA(Sheet.Cells)为0,则
用床单
lng=.Cells.Find(What:=“*”_
之后:=.范围(“A1”)_
看:=xlPart_
LookIn:=xl公式_
搜索顺序:=xlByRows_
搜索方向:=xlPrevious_
MatchCase:=False)。行
以
其他的
液化天然气=1
如果结束
Lastoccupieum=液化天然气
端函数
公共函数LastOccupiedColNum(工作表形式)长度为
随着时间的推移,液化天然气变得暗淡
如果Application.WorksheetFunction.CountA(Sheet.Cells)为0,则
用床单
lng=.Cells.Find(What:=“*”_
之后:=.范围(“A1”)_
看:=xlPart_
LookIn:=xl公式_
SearchOrder:=xlByColumns_
搜索方向:=xlPrevious_
MatchCase:=False)。列
以
其他的
液化天然气=1
如果结束
LastOccuppiedColnum=液化天然气
端函数

如果没有单独的函数,我会这样做。请注意,我们在循环中检查最后一行的位置,在
结束if
之后和
下一行之前

Sub CopyData()
    Dim wksSrc As Worksheet
    Dim wksDst As Worksheet
    Dim rngSrc As Range
    Dim DstLastCol As Long
    Dim SrcLastCol As Long
    Dim SrcLastRow As Long
        
    Set wksDst = ThisWorkbook.Worksheets("Master data")
    DstLastRow = wksDst.Cells(Rows.Count, 1).End(xlUp).Row
    
    For Each wksSrc In ThisWorkbook.Worksheets
    
       If wksSrc.Name <> "National tasks" And wksSrc.Name <> "Sheet8" And wksSrc.Name <> "Master data" Then
            SrcLastRow = wksSrc.Cells(Rows.Count, 1).End(xlUp).Row
            SrcLastCol = wksSrc.Cells(1, Columns.Count).End(xlToLeft).Column
               
            With wksSrc
                Set rngSrc = .Range(.Cells(2, 1), .Cells(SrcLastRow, SrcLastCol))
                rngSrc.Copy Destination:=wksDst.Cells(DstLastRow + 1, 1)
            End With
            
        End If
        
        DstLastRow = wksDst.Cells(Rows.Count, 1).End(xlUp).Row

    Next wksSrc

End Sub
Sub-CopyData()
将WKSRC设置为工作表
将wksDst设置为工作表
Dim rngSrc As范围
暗颜色和颜色一样长
颜色和颜色一样长
最后一行的长度相同
设置wksDst=此工作簿。工作表(“主数据”)
dstrastrow=wksDst.Cells(Rows.Count,1).End(xlUp).Row
对于此工作簿中的每个WKSRC。工作表
如果WKSRC.名称为“国家任务”,WKSRC.名称为“表8”,WKSRC.名称为“主数据”,则
SrcLastRow=wksrc.Cells(Rows.Count,1).End(xlUp).Row
SrcLastCol=wksrc.Cells(1,Columns.Count).End(xlToLeft).Column
与WKSRC合作
设置rngSrc=.Range(.Cells(2,1),.Cells(SrcLastRow,SrcLastCol))
rngSrc.Copy Destination:=wksDst.Cells(DstLastRow+1,1)
以
如果结束
dstrastrow=wksDst.Cells(Rows.Count,1).End(xlUp).Row
下一届西九龙文娱艺术中心
端接头

请回答您的问题,显示您尝试了什么,并告诉您的代码在哪里卡住或出现错误(以及哪些错误)。只有当我们看到您所做的并对代码提出问题时,我们才能帮助您修复错误。请注意,需求列表不是问题。也请签出。您在哪一行收到运行时错误?如果WKSRC“国家任务”和WKSRC“表8”以及WKSRC“主数据”,那么很抱歉。这是新的。在这行上。尝试
wksrc.Name
查看
lngLastCol
。它绑定到您的目的地表,而不是源。为什么我不喜欢使用单独的函数来查找最后一行和最后一列。干净的解决方案+1•为了完整起见,
行.计数
列.计数
也应参考工作表。在少数情况下,人们也使用图表工作表,如果图表工作表是活动工作表(没有行/列),代码可能会失败。另外,如果使用不同的工作簿,您可能会遇到问题,因为旧的
xls
文件只有65536行,而新的
xlsx
/
xlsm
文件有1048576行。因此,如果同时处理新旧工作簿,并且没有指定工作簿,并且活动工作簿与您正在查看的工作簿不同,则会造成混乱。谢谢@Pᴇʜ. 新旧工作表的优点。我很少再遇到旧的
.xls
文件,但我可以看到它会导致的问题。