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