宏或VBA代码可自动更新每日每周和每月报告的数据

时间:2018-07-30 09:23:13

标签: excel vba excel-vba excel-2010

我有9列的Excel工作表,名称是:

  1. SNO
  2. PO号
  3. 创建日期
  4. 货币
  5. 订单金额
  6. 全球资金转移计数
  7. 银行名称
  8. 状态
  9. 准备好的用户

我想编写一个宏或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

1 个答案:

答案 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