我有9列的Excel工作表,名称是:
我想编写一个宏或VBA代码,可以帮助我保存每周和每月的报告。
在sheet1上,我每天将粘贴150行以上9列的数据,而我希望其中的数据可以保存5列:
1.SNO 2.银行名称3.po金额4.全球资金转帐计数5.准备将用户自动保存到工作表2。
每当我将任何数据粘贴到sheet1中时,我希望每天将日期超过5列的数据按日期保存在sheet2中。从工作表2到工作表3,我希望将工作表2的全部数据作为月度报表的第5列。
但是当我更新数据时,sheet2中的旧数据会被删除。
Sub sbCopyRangeToAnotherSheet()
Sheets("Sheet1").Range("B1:B100").Copy _
Destination:=Sheets("Sheet2").Range("A1")
Sheets("Sheet1").Range("H1:H100").Copy _
Destination:=Sheets("Sheet2").Range("B1")
Sheets("Sheet1").Range("G1:G100").Copy _
Destination:=Sheets("Sheet2").Range("C1")
Sheets("Sheet1").Range("F1:F100").Copy _
Destination:=Sheets("Sheet2").Range("D1") End Sub
Dim rng As Range
'Store blank cells inside a variable
On Error GoTo NoBlanksFound
Set rng = Range("E1:E130").SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
'Delete blank cells and shift upward
rng.Rows.Delete Shift:=xlShiftUp
Exit Sub
'ERROR HANLDER
NoBlanksFound:
MsgBox "No Blank cells were found"
End Sub
答案 0 :(得分:0)
如果您希望它是完全自动化的,则可以对触发器进行“最佳猜测”,但这绝不是万无一失的。
我的“最佳猜测”是基于您的陈述“粘贴9列以上的150行数据”
我避免了您的msgbox错误控制,因为如果提供了错误控制,那么真正的自动化过程不需要一个。
代替确认,我假设Range(“ E1:E130”)属于Sheet1。
将其放置在Sheet1专用代码表中(右键单击工作表名称选项卡,然后单击“查看代码”)。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:I")) Is Nothing Then
If Intersect(Target, Range("A:I")).Count >= 1350 Then
On Error GoTo safe_exit
Application.EnableEvents = False
Range("B1:B100").Copy Destination:=Worksheets("Sheet2").Range("A1")
Range("H1:H100").Copy Destination:=Worksheets("Sheet2").Range("B1")
Range("G1:G100").Copy Destination:=Worksheets("Sheet2").Range("C1")
Range("F1:F100").Copy Destination:=Worksheets("Sheet2").Range("D1")
If Application.CountA(Range("E1:E130")) < 130 Then _
Range("E1:E130").SpecialCells(xlCellTypeBlanks).Delete Shift:=xlShiftUp
End If
End If
safe_exit:
Application.EnableEvents = True
End Sub