我一直在尝试为以下代码创建代码。
数据在设计为表单的excel电子表格中捕获。日期在B1-B48列范围内捕获
我想将其转移到汇总电子表格中,在该电子表格中我们保存行中填写的每个表单的数据。 (摘要表测试)。
应将数据粘贴转置并找到下一个空白行,而不要覆盖其他任何条目。
我的代码存在以下问题:-
将数据写入第49行。因此,它使用“表单”中的最后一个单元格确定要粘贴数据的位置。而不是下一个空行。
数据不会粘贴到下一个空行,而是始终覆盖在第49行上
这是我的第一次尝试。
保罗
Private Sub CommandButton1_Click()
ActiveSheet.Range("B1:B48").Copy
Workbooks.Open Filename:="https://catsprotection.sharepoint.com/sites/Crawley/FinanceDocuments/Adoptions/Testing Area/summary sheet - testing.xlsx"
eRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
If eRow >= 1 Then eRow = eRow + 1
ActiveSheet.Cells(eRow, 1).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, Skipblanks:=False, Transpose:=True
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.CutCopyMode = False
End Sub
答案 0 :(得分:1)
问题是您没有指定具体的工作簿或工作表。避免使用ActiveWorkbook
和ActiveSheet
,这不是很可靠,会带来不同的结果。而是总是定义一个具体的表(例如,按其名称)。另请参见How to avoid using Select in Excel VBA。
我还建议使用Option Explicit
并正确声明所有变量,以避免出现任何问题。
Option Explicit
Private Sub CommandButton1_Click()
Dim DestWb As Workbook 'define destination workbook
Set DestWb = Workbooks.Open(Filename:="https://catsprotection.sharepoint.com/sites/Crawley/FinanceDocuments/Adoptions/Testing Area/summary sheet - testing.xlsx")
Dim DestWs As Worksheet 'define destination worksheet
Set DestWs = DestWb.Sheet1
Dim eRow As Long 'determine last row in destination worksheet
eRow = DestWs.Cells(DestWs.Rows.Count, 1).End(xlUp).Offset(1, 0).Row
If eRow >= 1 Then eRow = eRow + 1
ThisWorkbook.Worksheets("MyFormSheet").Range("B1:B48").Copy 'copy directly before paste
DestWs.Cells(eRow, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, Skipblanks:=False, Transpose:=True
Application.CutCopyMode = False
DestWb.Close SaveChange:=True 'close and save destination workbook
End Sub