我对vba很新。我已经设法通过从这个网站复制并将它们编辑成我的目的来制作一些代码,但是这个很难破解(现在试图解决这个问题)。
我想从一个文件中复制数据并将其粘贴到另一个文件(主文件)。但是,它无法覆盖现有数据,因此应选择特定列中的第一个空单元格。请帮我!!如果可能的话,你可以添加尽可能多的评论,以便我能够理解并学会在将来为自己做这些。
数据文件是调用日志,复制的这些数字是我在vba中执行的分析结果。因此每天都会有一个新的数据文件,但我复制的实际数据总是位于相同的单元格中。另一方面,主文件始终相同,但粘贴数据的范围发生变化。
示例数据文件: 25 (Excel数据文件中的“S1”) 44 (exel数据文件中的“S2”) 8.6.2013 (Excel数据文件中的“S13”) 这些都是使用涉及公式的vba代码创建的,因此它们将始终位于同一个单元格中。还有一些其他数据单元格,但我希望从中学习,以便我可以自己包含它们。
另一方面,主文件始终相同。 Master文件中唯一不同的是粘贴数据的单元格。该单元实际上总是与前一个插入件相同的行。
主文件: 应将数据文件中的单元格S1复制到主文件“N3”,然后下一次复制到“N4”,然后复制到“N5”,依此类推......所以它应该在N列中找到第一个空闲单元格。
数据文件中的单元格S2应该以与之前相同的方式复制到主文件“H3”并从那里向下复制。
数据文件中的单元格S13应该以与之前相同的方式复制到主文件“A3”和向下。
编辑:
这可以在主文件中用于检索整个列B,但它会覆盖整个列。因此,它可以很好地从一个文件导入工作时间,这总是相同的。然后再次对于分析数据文件,问题是上面的代码是从主文件工作的,在这种情况下,当数据文件每天实际更改时我不知道如何更改它以便它将检索正确的文件。
Sub Work_hours()
' copy_paste1 Macro
Dim wsMaster As Worksheet, wbDATA As Workbook
Dim NextRow As Long, LastRow As Long
Set wsMaster = ThisWorkbook.Sheets("Sheet1")
NextRow = wsMaster.Range("A" & Rows.Count).End(xlUp).Row + 1
Set wbDATA = Workbooks.Open("\\C:\users\heppanetti\Google Drive\heppanetti\outbound\working_hours.xlsx")
With wbDATA.Sheets("Sheet1")
Columns("B:B").Select
Selection.Copy
Windows("ColdCalling_Stats_template.xlsx").Activate
Columns("B:B").Select
ActiveSheet.Paste
wbDATA.Close False
End With
End Sub
答案 0 :(得分:0)
我得到了宏工作的第一部分,但现在我应该能够在文档之间切换。发件人文档名称未知,这在激活时会出现问题...
Option Explicit
Sub SendToMaster()
'this macro goes IN the sender workbook
Dim wsSEND As Worksheet, wbMASTER As Workbook
Dim NextRow As Long, LastRow As Long
Set wsSEND = ThisWorkbook.Sheets("Sheet1")
Range("S2").Select
Selection.Copy
Set wbMASTER = Workbooks.Open("\\c:\users\heppanetti\Google Drive\heppanetti\outbound\ColdCalling_stats_template.xlsx ")
Windows("ColdCalling_stats_template.xlsx").Activate
Range("H1").End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
'here the macro should activate the SENDER workbook again.
'However the name is unknown, thus Windows("fileName.xlsm").Activate does not work
Set wsSEND = ThisWorkbook.Sheets("Sheet1")
Range("S1").Select
Selection.Copy
Windows("ColdCalling_stats_template.xlsx").Activate
Range("N1").End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
wbMASTER.Close True 'save and close the master
End Sub