VBA的几个小Demo

Merge Daily

Sub MergeDaily_·ÏÆú()

'¹Ø±ÕÆÁÄ»ÏÔʾÓ뱨¾¯
Application.ScreenUpdating = False
Application.DisplayAlerts = False

Dim newwork, oldwork As Workbook
Dim rng As Range
Dim i, m, n, x, y As Integer

Set oldwork = ThisWorkbook

'´ò¿ªÐÂÎļþ
Filename = Application.GetOpenFilename("Excel Îļþ ,*.xls;*.xlsx")

If Filename <> False Then
    Set newwork = Workbooks.Open(Filename)

    '¸´ÖÆÓÐÓÃÐÅÏ¢ÖÁDaily
    oldwork.Worksheets("raw_data").UsedRange.Clear
    m = newwork.Worksheets("RetestData").Rows(1).Find("ENG ID").Column
    newwork.Worksheets("RetestData").Columns(m).Copy
    '
    oldwork.Worksheets("raw_data").Range("A1").PasteSpecial Paste:=xlPasteValues
    

    
    'ɾ³ýÖظ´Ïî
    oldwork.Worksheets("raw_data").Columns(1).RemoveDuplicates Columns:=1, Header:=xlNo
    '
    newwork.Worksheets("StepID_OPID").UsedRange.Copy
    oldwork.Worksheets("raw_data").Range("B1").PasteSpecial Paste:=xlPasteValues
    
    
    '¸´ÖÆÓÐÓÃÐÅÏ¢ÖÁDaily_RetestData
    oldwork.Worksheets("RetestData").UsedRange.ClearContents
    newwork.Worksheets("RetestData").Columns(1).Copy
    oldwork.Worksheets("RetestData").Range("A1").PasteSpecial Paste:=xlPasteValues
    newwork.Worksheets("RetestData").Columns("H:N").Copy
    oldwork.Worksheets("RetestData").Range("B1").PasteSpecial Paste:=xlPasteValues
    i = oldwork.Worksheets("RetestData").Range("A1").CurrentRegion.Rows.Count
    With oldwork.Worksheets("RetestData")
        .Range("I1") = "OPER CODE1"
        .Range("J1") = "ENG CODE1"
        .Range("K1") = "OPER NEED REPAIR"
        .Range("L1") = "ENG NEED REPAIR"
        .Range("M1") = "NEED REPAIR MISS"
        .Range("N1") = "OPER CODE2"
        .Range("O1") = "ENG CODE2"
        .Range("I2").FormulaR1C1 = "=RIGHT(RC[-6],3)"
        .Range("J2").FormulaR1C1 = "=RIGHT(RC[-5],3)"
        .Range("K2").Formula = "=IFERROR(VLOOKUP(LEFT(A2,4)&C2,¸½¼þ!P:Q,2,0),""PASS"")"
        .Range("L2").Formula = "=IFERROR(VLOOKUP(LEFT(A2,4)&E2,¸½¼þ!P:Q,2,0),""PASS"")"
        .Range("M2").Formula = "=IF(K2=L2,0,1)"
        .Range("N2").FormulaR1C1 = "=MID(RC[-11],4,2)"
        .Range("O2").FormulaR1C1 = "=MID(RC[-10],4,2)"
        .Range("I2:O2").AutoFill Destination:=.Range("I2").Resize(i - 1, 7)
    End With

    '½«Îı¾±£´æµÄÊý×Öת»»ÎªÊý×Ö
    For n = 1 To 6
        oldwork.Worksheets("raw_data").Columns(n).TextToColumns DataType:=xlDelimited, ConsecutiveDelimiter:=True, Space:=False
    Next
    newwork.Close savechanges:=False
Else
    MsgBox ("ÄúûÓÐÑ¡ÔñÎļþ")
End If

'Èç¹û´æÔÚ·ÇÆ·ÖÊ×éÈËÔ±¸´ÅУ¬ÔòÍ˳ö³ÌÐò
If Worksheets("¸½¼þ").Range("C1") <> Worksheets("¸½¼þ").Range("D1") Then
    MsgBox ("´æÔÚ·ÇÆ·ÖÊ×éÈËÔ±¸´ÅÐ »ò Æ·ÖÊ×éÈËÔ±Ôö¼Óµ«Î´¸üи½¼þ" & vbCrLf & vbCrLf & "                        ÇëÊÖ¶¯Â¼ÈëÊý¾Ý")
    Exit Sub
End If

'
For x = 2 To 4

    oldwork.Worksheets(x).Activate
    y = oldwork.Worksheets(x).Range("C2").CurrentRegion.Rows.Count
    
    'Òþ²ØûÓÐ׼ȷÂʵİ༶Êý¾Ý
    If Worksheets(x).Cells(y, 3) <> "" Then
        Worksheets(x).Visible = True
    Else
        Worksheets(x).Visible = False
    End If
    
    
    'Òþ²ØûÓÐ׼ȷÂÊÊý¾ÝµÄOP
    For i = 2 To y
        If Cells(i, 3).Value <> "" Then
            Rows(i).Hidden = False
        Else
            Rows(i).Hidden = True
        End If
    Next
    
    '±ê¼ÇĤ²ã
    For i = 2 To y - 2
        Cells(1, 3).ClearContents
        If Cells(i, 5) <> "" Then
            Cells(1, 3) = Cells(i, 5)
            Exit For
        End If
    Next
    
    
    '±ê¼Ç×îºóÒ»¸öÊý¾Ý±êǩΪÂÌÉ«¼Ó´Ö
    oldwork.Worksheets(x).ChartObjects(1).Activate
    ActiveChart.SeriesCollection(1).DataLabels.Delete
    ActiveChart.SeriesCollection(1).ApplyDataLabels
    y = ActiveChart.SeriesCollection(1).Points.Count
    If y <> 0 Then
        For i = 1 To y
            ActiveChart.SeriesCollection(1).Points(i).DataLabel.Select
            With Selection.Format.TextFrame2.TextRange.Font
                If i <> y Then
                    .Fill.ForeColor.RGB = RGB(0, 0, 0)
                    .Bold = msoFalse
                Else
                    .Fill.ForeColor.RGB = RGB(0, 176, 80)
                    .Bold = msoTrue
                End If
            End With
         Next
     End If
    
Next
'
ThisWorkbook.Worksheets(1).Activate

'´ò¿ªÆÁÄ»ÏÔʾ
Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub
Sub End_Daily_New()

'¹Ø±ÕÆÁÄ»ÏÔʾÓ뱨¾¯
Application.ScreenUpdating = False
Application.DisplayAlerts = False

Dim str, class_name, str1, str2, s1, s2 As String, rng1, rng2, rng As Range
Dim i, j, m, n, x, y, wid, hig As Integer

str = Left(ThisWorkbook.Name, 2) & "/" & Mid(ThisWorkbook.Name, 4, 2)

'Ô³õÇå³ýÉÏÔÂÊý¾Ý
If Mid(ThisWorkbook.Name, 4, 2) = "01" Then

    n = Worksheets("²é×¼ÂÊBy ¸öÈË").Range("C2").CurrentRegion.Rows.Count - 2
    Worksheets("²é×¼ÂÊBy ¸öÈË").Range("E3").Resize(n, 31).ClearContents
    n = Worksheets("²éÈ«ÂÊBy ¸öÈË").Range("C2").CurrentRegion.Rows.Count - 2
    Worksheets("²éÈ«ÂÊBy ¸öÈË").Range("E3").Resize(n, 31).ClearContents
End If


'ÖÜÒ»Çå³ýTrendÊý¾Ý
If Application.WorksheetFunction.Text(str, "ddd") = "Mon" Then
   Worksheets("׼ȷÂÊTrend by°à±ð").Rows(2).Find("Mon").Offset(1, 0).Resize(4, 7).ClearContents
   Worksheets("׼ȷÂÊTrend by°à±ð").Rows(9).Find("Mon").Offset(1, 0).Resize(4, 7).ClearContents
End If
     
'ɾ³ýÊ×Ò³ËùÓÐͼƬ
Dim shp As Shape
For Each shp In ThisWorkbook.Worksheets(1).Shapes
    If shp.Type <> msoFormControl And shp.Type <> msoChart Then shp.Delete
Next

s1 = Application.WorksheetFunction.Text(str, "ddd")
Set rng1 = Worksheets("׼ȷÂÊTrend by°à±ð").Rows(2).Find(s1)
Set rng2 = Worksheets("׼ȷÂÊTrend by°à±ð").Rows(9).Find(s1)
ThisWorkbook.Worksheets(1).Range("A1").Value = "BP ÖÆÔ첿 ¼ì²â¿Æ ׼ȷÂÊ Daily Report£¨" & str & "£©"

'»ñÈ¡µ±ÌìÆ·ÖÊ×éÈËÔ±Ãûµ¥
str1 = ""
For i = 2 To 20
    If Worksheets("¸½¼þ").Cells(i, 2) <> "" Then
        'str1 = Worksheets("¸½¼þ").Cells(i, 2).Value
        str1 = str1 & "&" & Worksheets("¸½¼þ").Cells(i, 2).Value
    End If
Next
str1 = Right(str1, Len(str1) - 1)

''''''''''''''''''''''''''''''''''
n = 0
For x = 2 To 4

    If ThisWorkbook.Worksheets(x).Visible <> False Then
        
        n = n + 1
        'ÇóÈ¡¸Ã°àÈËÊý
        m = ThisWorkbook.Worksheets(x).Range("A1").CurrentRegion.Rows.Count - 2
        '׼ȷÂÊTrend by °à±ð
        rng1.Offset(x - 1, 0).Value = ThisWorkbook.Worksheets(x).Cells(Worksheets(x).Range("A1").CurrentRegion.Rows.Count, 3)
        rng2.Offset(x - 1, 0).Value = ThisWorkbook.Worksheets(x).Cells(Worksheets(x).Range("A1").CurrentRegion.Rows.Count, 4)
        '׼ȷÂÊTrend by OP
        s2 = Application.WorksheetFunction.Text(str, "d")
        'Set rng1 = ThisWorkbook.Worksheets(x + 4).Rows(1).Find(s2).Offset(2, 0)
        'ThisWorkbook.Worksheets(x).Range("C2").Resize(m, 1).Copy
        'rng2.PasteSpecial Paste:=xlPasteValues
        class_name = Left(Worksheets(x).Name, 2)
        
        i = ThisWorkbook.Worksheets("²é×¼ÂÊBy ¸öÈË").Columns(4).Find(class_name).Row
        j = ThisWorkbook.Worksheets("²é×¼ÂÊBy ¸öÈË").Rows(1).Find(s2).Column
        ThisWorkbook.Worksheets("²é×¼ÂÊBy ¸öÈË").Cells(i, j) = ThisWorkbook.Worksheets(x).Range("F1").Value
        ThisWorkbook.Worksheets(x).Range("C2").Resize(m, 1).Copy
        ThisWorkbook.Worksheets("²é×¼ÂÊBy ¸öÈË").Cells(i + 1, j).PasteSpecial Paste:=xlPasteValues
        
        i = ThisWorkbook.Worksheets("²éÈ«ÂÊBy ¸öÈË").Columns(4).Find(class_name).Row
        j = ThisWorkbook.Worksheets("²éÈ«ÂÊBy ¸öÈË").Rows(1).Find(s2).Column
        ThisWorkbook.Worksheets("²éÈ«ÂÊBy ¸öÈË").Cells(i, j) = ThisWorkbook.Worksheets(x).Range("F1").Value
        ThisWorkbook.Worksheets(x).Range("D2").Resize(m, 1).Copy
        ThisWorkbook.Worksheets("²éÈ«ÂÊBy ¸öÈË").Cells(i + 1, j).PasteSpecial Paste:=xlPasteValues
        
        ThisWorkbook.Worksheets(1).Rows("12:14").EntireRow.Hidden = True
         
        If n <= 3 Then
            If n = 3 Then
                ThisWorkbook.Worksheets(1).Rows("12:14").EntireRow.Hidden = False
            End If
            
            ThisWorkbook.Worksheets(1).Cells(3 * n + 3, 1).Value = n & "¡¢" & ThisWorkbook.Worksheets(x).Name & "¡¾Êä³öÈËÔ±£º" & str1 & "¡¿"
        
            '¸´ÖÆͼƬÖÁ»ã×Ü
            ThisWorkbook.Worksheets(x).Range("A1").Resize(m + 2, 15).CopyPicture
            ThisWorkbook.Worksheets(1).Activate
            'ThisWorkbook.Worksheets(1).Cells(7 + 3 * (n - 1), 1).RowHeight = ThisWorkbook.Worksheets(x).Range("A1").Height * (ThisWorkbook.Worksheets(x).Range("G2") + 2)
            ThisWorkbook.Worksheets(1).Cells(3 * n + 4, 1).Select
            wid = Selection.Width
            hig = Selection.Height
            ThisWorkbook.Worksheets(1).Paste Destination:=Selection
            With Selection.ShapeRange
                .LockAspectRatio = msoTrue
                .Width = wid - 2
                '.Height = hig - 3
                .IncrementLeft 1.2
                .IncrementTop 1.5
                'MsgBox .Height + 2
                If .Height + 2 > 400 Then
                    .Height = 400
                    ThisWorkbook.Worksheets(1).Rows(3 * n + 4).RowHeight = 402
                Else
                    ThisWorkbook.Worksheets(1).Rows(3 * n + 4).RowHeight = .Height + 2
                End If
            End With
            
            'ÈËÔ±ÄÜÁ¦·ÖÎö
            With ThisWorkbook.Worksheets(x)
                str2 = "°à×é/ÈËÔ±·ÖÎö£º" & Chr(10) & "¢Ù " & Left(.Name, 2) & "°à×é¡°" & .Range("I1").Value & "¡±£¬²é×¼ÂÊ" & .Range("I7") & "£¬²éÈ«ÂÊ" & .Range("I8") & "£»" & Chr(10) & "¢Ú " & .Range("H3") & "ÒÔÉÏ" & .Range("I3") & "ÈË£¬ÈËÔ±Õ¼±È" & .Range("I9") & "£»" & Chr(10) & "    " & .Range("H4") & "ÒÔÉÏ" & .Range("I4") & "ÈË£¬ÈËÔ±Õ¼±È" & .Range("I10") & "£»" & Chr(10) & "¢Û " & .Range("H5") & .Range("I5") & "Óë" & .Range("H6") & .Range("I6") & "ÈËÔ±£¬Òѽ»½Ó" & Left(.Name, 2) & "°à×鳤½øÐÐÕë¶ÔÐÔÅàѵ£»"
                Worksheets(1).Cells(3 * n + 5, 1).Value = str2
                Call Font_Style(Worksheets(1).Cells(3 * n + 5, 1))
            End With
           
''''''''''''''''''''''''
            
        End If
        
    End If
    
Next
'''''''''''''''''''''''''''''''''''''
rng1.Offset(4, 0).FormulaR1C1 = "=AVERAGE(R[-3]C:R[-1]C)"
rng2.Offset(4, 0).FormulaR1C1 = "=AVERAGE(R[-3]C:R[-1]C)"

Set rng = ThisWorkbook.Worksheets(5).Rows(2).Find("Sun").Offset(4, 0)
ThisWorkbook.Worksheets(5).Range("A1").Resize(rng.Row, rng.Column).CopyPicture
ThisWorkbook.Worksheets(1).Range("A3").Select
wid = Selection.Width
hig = Selection.Height
ThisWorkbook.Worksheets(1).Paste Destination:=Selection
With Selection.ShapeRange
    .LockAspectRatio = msoFalse
    .Width = wid - 2
    .Height = hig - 3
    .IncrementLeft 1.2
    .IncrementTop 1.5
End With
Set rng = ThisWorkbook.Worksheets(5).Rows(9).Find("Sun").Offset(4, 0)
ThisWorkbook.Worksheets(5).Range("A8").Resize(6, rng.Column).CopyPicture
ThisWorkbook.Worksheets(1).Range("A5").Select
wid = Selection.Width
hig = Selection.Height
ThisWorkbook.Worksheets(1).Paste Destination:=Selection
With Selection.ShapeRange
    .LockAspectRatio = msoFalse
    .Width = wid - 2
    .Height = hig - 3
    .IncrementLeft 1.2
    .IncrementTop 1.5
End With
        
        
'´ò¿ªÆÁÄ»ÏÔʾ
Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub

End_Daily

Sub End_Daily_·ÏÆú()

'¹Ø±ÕÆÁÄ»ÏÔʾÓ뱨¾¯
Application.ScreenUpdating = False
Application.DisplayAlerts = False

Dim str, str1, str2, s1, s2 As String, rng1, rng2, rng As Range
Dim i, m, n, x, y, wid, hig As Integer

str = Left(ThisWorkbook.Name, 2) & "/" & Mid(ThisWorkbook.Name, 4, 2)

'Ô³õÇå³ýÉÏÔÂÊý¾Ý
If Mid(ThisWorkbook.Name, 4, 2) = "01" Then
For x = 6 To 8
    n = Worksheets(x).Range("C2").CurrentRegion.Rows.Count - 2
    Worksheets(x).Range("D3").Resize(n, 31).ClearContents
Next
End If


'ÖÜÒ»Çå³ýTrendÊý¾Ý
If Application.WorksheetFunction.Text(str, "ddd") = "Mon" Then
   Worksheets(5).Rows(2).Find("Mon").Offset(1, 0).Resize(4, 7).ClearContents
End If


'ɾ³ýÊ×Ò³ËùÓÐͼƬ
Dim shp As Shape
For Each shp In ThisWorkbook.Worksheets(1).Shapes
    If shp.Type <> msoFormControl And shp.Type <> msoChart Then shp.Delete
Next

s1 = Application.WorksheetFunction.Text(str, "ddd")
Set rng1 = Worksheets(5).Rows(2).Find(s1)
ThisWorkbook.Worksheets(1).Range("A1").Value = "BP ÖÆÔ첿 ¼ì²â¿Æ ׼ȷÂÊ Daily Report£¨" & str & "£©"

'»ñÈ¡µ±ÌìÆ·ÖÊ×éÈËÔ±Ãûµ¥
str1 = ""
For i = 1 To 20
    If Worksheets("¸½¼þ").Cells(i, 2) <> "" Then
        'str1 = Worksheets("¸½¼þ").Cells(i, 2).Value
        str1 = str1 & "&" & Worksheets("¸½¼þ").Cells(i, 2).Value
    End If
Next
str1 = Right(str1, Len(str1) - 1)

n = 0
For x = 2 To 4

    If ThisWorkbook.Worksheets(x).Visible <> False Then
        
        n = n + 1
        'ÇóÈ¡¸Ã°àÈËÊý
        m = ThisWorkbook.Worksheets(x).Range("A1").CurrentRegion.Rows.Count - 2
        '׼ȷÂÊTrend by °à±ð
        rng1.Offset(x - 1, 0).Value = ThisWorkbook.Worksheets(x).Cells(Worksheets(x).Range("A1").CurrentRegion.Rows.Count, 3)
        '׼ȷÂÊTrend by OP
        s2 = Application.WorksheetFunction.Text(str, "d")
        Set rng2 = ThisWorkbook.Worksheets(x + 4).Rows(1).Find(s2).Offset(2, 0)
        ThisWorkbook.Worksheets(x).Range("C2").Resize(m, 1).Copy
        rng2.PasteSpecial Paste:=xlPasteValues
        
        If n <= 2 Then
        
            ThisWorkbook.Worksheets(1).Cells(7 + 3 * (n - 1) - 1, 1).Value = n & "¡¢" & ThisWorkbook.Worksheets(x).Name & "¡¾Êä³öÈËÔ±£º" & str1 & "¡¿"
        
            '¸´ÖÆͼƬÖÁ»ã×Ü
            ThisWorkbook.Worksheets(x).Range("A1").Resize(m + 2, 15).CopyPicture
            ThisWorkbook.Worksheets(1).Activate
            'ThisWorkbook.Worksheets(1).Cells(7 + 3 * (n - 1), 1).RowHeight = ThisWorkbook.Worksheets(x).Range("A1").Height * (ThisWorkbook.Worksheets(x).Range("G2") + 2)
            ThisWorkbook.Worksheets(1).Cells(7 + 3 * (n - 1), 1).Select
            wid = Selection.Width
            hig = Selection.Height
            ThisWorkbook.Worksheets(1).Paste Destination:=Selection
            With Selection.ShapeRange
                .LockAspectRatio = msoTrue
                .Width = wid - 2
                '.Height = hig - 3
                .IncrementLeft 1.2
                .IncrementTop 1.5
                'MsgBox .Height + 2
                If .Height + 2 > 400 Then
                    .Height = 400
                    ThisWorkbook.Worksheets(1).Rows(7 + 3 * (n - 1)).RowHeight = 402
                Else
                    ThisWorkbook.Worksheets(1).Rows(7 + 3 * (n - 1)).RowHeight = .Height + 2
                End If
            End With
            
            'ÈËÔ±ÄÜÁ¦·ÖÎö
            'm = ThisWorkbook.Worksheets(3).Rows(3).CurrentRegion.Rows.Count
            With ThisWorkbook.Worksheets(x)
                str2 = "°à×é/ÈËÔ±·ÖÎö£º" & Chr(10) & "¢Ù" & Left(.Name, 2) & "°à×é¡°" & .Range("C1").Value & "¡±Æ½¾ù׼ȷÂÊ" & .Range("I2") & "£»" & Chr(10) & "¢Ú 90%׼ȷÂÊÒÔÉÏ" & .Range("G1").Value & "ÈË,ÈËÔ±Õ¼±È" & .Range("G3").Value & "£»" & Chr(10) & "¢Û ׼ȷÂÊ<" & .Range("I1") & "ÈËÔ±£¬Òѽ»½Ó" & Left(.Name, 2) & "°à×鳤½øÐÐÕë¶ÔÐÔÅàѵ£»"
                Worksheets(1).Cells(7 + 3 * (n - 1) + 1, 1).Value = str2
            End With


            Worksheets(1).Cells(7 + 3 * (n - 1) + 1, 1).Activate
            ActiveCell.Characters(Start:=16, Length:=8).Font.Color = -65536
            With ActiveCell.Characters(Start:=30, Length:=6).Font
                 .FontStyle = "¼Ó´Ö"
                 .Color = -11489280
            End With
            ActiveCell.Characters(Start:=39, Length:=7).Font.Color = -65536
            ActiveCell.Characters(Start:=48, Length:=2).Font.Color = -65536
            With ActiveCell.Characters(Start:=56, Length:=6).Font
                .FontStyle = "¼Ó´Ö"
                .Color = -11489280
            End With
            ActiveCell.Characters(Start:=65, Length:=11).Font.Color = -16776961
''''''''''''''''''''''''
            
        End If
        
    End If
    
Next
rng1.Offset(4, 0).FormulaR1C1 = "=AVERAGE(R[-3]C:R[-1]C)"
Set rng = ThisWorkbook.Worksheets(5).Rows(2).Find("Sun").Offset(4, 0)
ThisWorkbook.Worksheets(5).Range("A1").Resize(rng.Row, rng.Column).CopyPicture
ThisWorkbook.Worksheets(1).Range("A5").Select
wid = Selection.Width
hig = Selection.Height
ThisWorkbook.Worksheets(1).Paste Destination:=Selection
With Selection.ShapeRange
    .LockAspectRatio = msoFalse
    .Width = wid - 2
    .Height = hig - 3
    .IncrementLeft 1.2
    .IncrementTop 1.5
End With

ThisWorkbook.Worksheets(1).Activate
        
'´ò¿ªÆÁÄ»ÏÔʾ
Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub
Sub End_Daily_New()

'¹Ø±ÕÆÁÄ»ÏÔʾÓ뱨¾¯
Application.ScreenUpdating = False
Application.DisplayAlerts = False

Dim str, class_name, str1, str2, s1, s2 As String, rng1, rng2, rng As Range
Dim i, j, m, n, x, y, wid, hig As Integer

str = Left(ThisWorkbook.Name, 2) & "/" & Mid(ThisWorkbook.Name, 4, 2)

'Ô³õÇå³ýÉÏÔÂÊý¾Ý
If Mid(ThisWorkbook.Name, 4, 2) = "01" Then

    n = Worksheets("²é×¼ÂÊBy ¸öÈË").Range("C2").CurrentRegion.Rows.Count - 2
    Worksheets("²é×¼ÂÊBy ¸öÈË").Range("E3").Resize(n, 31).ClearContents
    n = Worksheets("²éÈ«ÂÊBy ¸öÈË").Range("C2").CurrentRegion.Rows.Count - 2
    Worksheets("²éÈ«ÂÊBy ¸öÈË").Range("E3").Resize(n, 31).ClearContents
End If


'ÖÜÒ»Çå³ýTrendÊý¾Ý
If Application.WorksheetFunction.Text(str, "ddd") = "Mon" Then
   Worksheets("׼ȷÂÊTrend by°à±ð").Rows(2).Find("Mon").Offset(1, 0).Resize(4, 7).ClearContents
   Worksheets("׼ȷÂÊTrend by°à±ð").Rows(9).Find("Mon").Offset(1, 0).Resize(4, 7).ClearContents
End If
     
'ɾ³ýÊ×Ò³ËùÓÐͼƬ
Dim shp As Shape
For Each shp In ThisWorkbook.Worksheets(1).Shapes
    If shp.Type <> msoFormControl And shp.Type <> msoChart Then shp.Delete
Next

s1 = Application.WorksheetFunction.Text(str, "ddd")
Set rng1 = Worksheets("׼ȷÂÊTrend by°à±ð").Rows(2).Find(s1)
Set rng2 = Worksheets("׼ȷÂÊTrend by°à±ð").Rows(9).Find(s1)
ThisWorkbook.Worksheets(1).Range("A1").Value = "BP ÖÆÔ첿 ¼ì²â¿Æ ׼ȷÂÊ Daily Report£¨" & str & "£©"

'»ñÈ¡µ±ÌìÆ·ÖÊ×éÈËÔ±Ãûµ¥
str1 = ""
For i = 2 To 20
    If Worksheets("¸½¼þ").Cells(i, 2) <> "" Then
        'str1 = Worksheets("¸½¼þ").Cells(i, 2).Value
        str1 = str1 & "&" & Worksheets("¸½¼þ").Cells(i, 2).Value
    End If
Next
str1 = Right(str1, Len(str1) - 1)

''''''''''''''''''''''''''''''''''
n = 0
For x = 2 To 4

    If ThisWorkbook.Worksheets(x).Visible <> False Then
        
        n = n + 1
        'ÇóÈ¡¸Ã°àÈËÊý
        m = ThisWorkbook.Worksheets(x).Range("A1").CurrentRegion.Rows.Count - 2
        '׼ȷÂÊTrend by °à±ð
        rng1.Offset(x - 1, 0).Value = ThisWorkbook.Worksheets(x).Cells(Worksheets(x).Range("A1").CurrentRegion.Rows.Count, 3)
        rng2.Offset(x - 1, 0).Value = ThisWorkbook.Worksheets(x).Cells(Worksheets(x).Range("A1").CurrentRegion.Rows.Count, 4)
        '׼ȷÂÊTrend by OP
        s2 = Application.WorksheetFunction.Text(str, "d")
        'Set rng1 = ThisWorkbook.Worksheets(x + 4).Rows(1).Find(s2).Offset(2, 0)
        'ThisWorkbook.Worksheets(x).Range("C2").Resize(m, 1).Copy
        'rng2.PasteSpecial Paste:=xlPasteValues
        class_name = Left(Worksheets(x).Name, 2)
        
        i = ThisWorkbook.Worksheets("²é×¼ÂÊBy ¸öÈË").Columns(4).Find(class_name).Row
        j = ThisWorkbook.Worksheets("²é×¼ÂÊBy ¸öÈË").Rows(1).Find(s2).Column
        ThisWorkbook.Worksheets("²é×¼ÂÊBy ¸öÈË").Cells(i, j) = ThisWorkbook.Worksheets(x).Range("F1").Value
        ThisWorkbook.Worksheets(x).Range("C2").Resize(m, 1).Copy
        ThisWorkbook.Worksheets("²é×¼ÂÊBy ¸öÈË").Cells(i + 1, j).PasteSpecial Paste:=xlPasteValues
        
        i = ThisWorkbook.Worksheets("²éÈ«ÂÊBy ¸öÈË").Columns(4).Find(class_name).Row
        j = ThisWorkbook.Worksheets("²éÈ«ÂÊBy ¸öÈË").Rows(1).Find(s2).Column
        ThisWorkbook.Worksheets("²éÈ«ÂÊBy ¸öÈË").Cells(i, j) = ThisWorkbook.Worksheets(x).Range("F1").Value
        ThisWorkbook.Worksheets(x).Range("D2").Resize(m, 1).Copy
        ThisWorkbook.Worksheets("²éÈ«ÂÊBy ¸öÈË").Cells(i + 1, j).PasteSpecial Paste:=xlPasteValues
        
        ThisWorkbook.Worksheets(1).Rows("12:14").EntireRow.Hidden = True
         
        If n <= 3 Then
            If n = 3 Then
                ThisWorkbook.Worksheets(1).Rows("12:14").EntireRow.Hidden = False
            End If
            
            ThisWorkbook.Worksheets(1).Cells(3 * n + 3, 1).Value = n & "¡¢" & ThisWorkbook.Worksheets(x).Name & "¡¾Êä³öÈËÔ±£º" & str1 & "¡¿"
        
            '¸´ÖÆͼƬÖÁ»ã×Ü
            ThisWorkbook.Worksheets(x).Range("A1").Resize(m + 2, 15).CopyPicture
            ThisWorkbook.Worksheets(1).Activate
            'ThisWorkbook.Worksheets(1).Cells(7 + 3 * (n - 1), 1).RowHeight = ThisWorkbook.Worksheets(x).Range("A1").Height * (ThisWorkbook.Worksheets(x).Range("G2") + 2)
            ThisWorkbook.Worksheets(1).Cells(3 * n + 4, 1).Select
            wid = Selection.Width
            hig = Selection.Height
            ThisWorkbook.Worksheets(1).Paste Destination:=Selection
            With Selection.ShapeRange
                .LockAspectRatio = msoTrue
                .Width = wid - 2
                '.Height = hig - 3
                .IncrementLeft 1.2
                .IncrementTop 1.5
                'MsgBox .Height + 2
                If .Height + 2 > 400 Then
                    .Height = 400
                    ThisWorkbook.Worksheets(1).Rows(3 * n + 4).RowHeight = 402
                Else
                    ThisWorkbook.Worksheets(1).Rows(3 * n + 4).RowHeight = .Height + 2
                End If
            End With
            
            'ÈËÔ±ÄÜÁ¦·ÖÎö
            With ThisWorkbook.Worksheets(x)
                str2 = "°à×é/ÈËÔ±·ÖÎö£º" & Chr(10) & "¢Ù " & Left(.Name, 2) & "°à×é¡°" & .Range("I1").Value & "¡±£¬²é×¼ÂÊ" & .Range("I7") & "£¬²éÈ«ÂÊ" & .Range("I8") & "£»" & Chr(10) & "¢Ú " & .Range("H3") & "ÒÔÉÏ" & .Range("I3") & "ÈË£¬ÈËÔ±Õ¼±È" & .Range("I9") & "£»" & Chr(10) & "    " & .Range("H4") & "ÒÔÉÏ" & .Range("I4") & "ÈË£¬ÈËÔ±Õ¼±È" & .Range("I10") & "£»" & Chr(10) & "¢Û " & .Range("H5") & .Range("I5") & "Óë" & .Range("H6") & .Range("I6") & "ÈËÔ±£¬Òѽ»½Ó" & Left(.Name, 2) & "°à×鳤½øÐÐÕë¶ÔÐÔÅàѵ£»"
                Worksheets(1).Cells(3 * n + 5, 1).Value = str2
                Call Font_Style(Worksheets(1).Cells(3 * n + 5, 1))
            End With
           
''''''''''''''''''''''''
            
        End If
        
    End If
    
Next
'''''''''''''''''''''''''''''''''''''
rng1.Offset(4, 0).FormulaR1C1 = "=AVERAGE(R[-3]C:R[-1]C)"
rng2.Offset(4, 0).FormulaR1C1 = "=AVERAGE(R[-3]C:R[-1]C)"

Set rng = ThisWorkbook.Worksheets(5).Rows(2).Find("Sun").Offset(4, 0)
ThisWorkbook.Worksheets(5).Range("A1").Resize(rng.Row, rng.Column).CopyPicture
ThisWorkbook.Worksheets(1).Range("A3").Select
wid = Selection.Width
hig = Selection.Height
ThisWorkbook.Worksheets(1).Paste Destination:=Selection
With Selection.ShapeRange
    .LockAspectRatio = msoFalse
    .Width = wid - 2
    .Height = hig - 3
    .IncrementLeft 1.2
    .IncrementTop 1.5
End With
Set rng = ThisWorkbook.Worksheets(5).Rows(9).Find("Sun").Offset(4, 0)
ThisWorkbook.Worksheets(5).Range("A8").Resize(6, rng.Column).CopyPicture
ThisWorkbook.Worksheets(1).Range("A5").Select
wid = Selection.Width
hig = Selection.Height
ThisWorkbook.Worksheets(1).Paste Destination:=Selection
With Selection.ShapeRange
    .LockAspectRatio = msoFalse
    .Width = wid - 2
    .Height = hig - 3
    .IncrementLeft 1.2
    .IncrementTop 1.5
End With
        
        
'´ò¿ªÆÁÄ»ÏÔʾ
Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub

KPI_check

Sub ¼¨Ð§ºË¶Ô()
    
    Dim newwork, oldwork As Workbook
    Dim repair_Count, i, j, x1, x2, y1, y2 As Integer
    Dim x, y As Integer
        
    Set oldwork = ThisWorkbook
    
    Filename = Application.GetOpenFilename("Excel Îļþ ,*.xls;*.xlsx")
    
    If Filename <> False Then
    
        Set newwork = Workbooks.Open(Filename)
        repair_Count = Application.WorksheetFunction.CountIf(newwork.Worksheets("׼ȷÂÊ").Range("E:E"), "Repair")
        flag = newwork.Worksheets("׼ȷÂÊ").Columns("E").Find("Repair").Row
        
        For x = flag To flag + repair_Count - 1
            For y = 1 To 31
                x1 = x
                y1 = newwork.Worksheets("׼ȷÂÊ").Rows(2).Find(y).Column
                
                
                x2 = oldwork.Worksheets("ÖÜ׼ȷÂÊ").Columns(2).Find(newwork.Worksheets("׼ȷÂÊ").Cells(x1, 2)).Row
                y2 = oldwork.Worksheets("ÖÜ׼ȷÂÊ").Rows(1).Find(y).Column
                
                If newwork.Worksheets("׼ȷÂÊ").Cells(x1, y1) <> oldwork.Worksheets("ÖÜ׼ȷÂÊ").Cells(x2, y2) Then
                    With oldwork.Worksheets("ÖÜ׼ȷÂÊ").Cells(x2, y2)
                            .FormatConditions.Delete
                            .Font.Color = -16776961
                            .Font.Bold = True
                    End With
                End If
            Next
        Next
        
        newwork.Close savechanges:=False
    End If
    
End Sub

delete&add op

Sub Delete_OP_ID()
    Dim i As Integer
    Dim str, class As String
    Dim rng1, rng2, rng3 As Range
    Application.ScreenUpdating = False
    i = 3
    Do While ThisWorkbook.Worksheets("¸½¼þ").Cells(i, 21) <> ""
        str = ThisWorkbook.Worksheets("¸½¼þ").Cells(i, 21).Value
        class = ThisWorkbook.Worksheets("¸½¼þ").Cells(i, 20).Value
        Set rng1 = ThisWorkbook.Worksheets(class + "׼ȷÂÊ").Columns(1).Find(str)
        Set rng2 = ThisWorkbook.Worksheets("²é×¼ÂÊBy ¸öÈË").Columns(2).Find(str)
        Set rng3 = ThisWorkbook.Worksheets("²éÈ«ÂÊBy ¸öÈË").Columns(2).Find(str)
        If rng1 Is Nothing Or rng2 Is Nothing Then
            MsgBox (str + " No Found")
            Exit Sub
        Else
            rng1.Resize(1, 6).Delete Shift:=xlUp
            rng2.EntireRow.Delete Shift:=xlUp
            rng3.EntireRow.Delete Shift:=xlUp
        End If
        ThisWorkbook.Worksheets("¸½¼þ").Cells(i, 20).Resize(1, 3).Delete Shift:=xlUp
        'i = i + 1
    Loop
    ThisWorkbook.Worksheets("¸½¼þ").Activate
    Application.ScreenUpdating = True
End Sub
Sub Add_OP_ID()
    Dim i As Integer
    Dim str, class As String
    Dim rng1, rng2, rng3 As Range
    Application.ScreenUpdating = False
    i = 3
    Do While ThisWorkbook.Worksheets("¸½¼þ").Cells(i, 25) <> ""
        str = ThisWorkbook.Worksheets("¸½¼þ").Cells(i, 25).Value
        class = ThisWorkbook.Worksheets("¸½¼þ").Cells(i, 24).Value
        Set rng1 = ThisWorkbook.Worksheets(class + "׼ȷÂÊ").Columns(1).Find(str)
        Set rng2 = ThisWorkbook.Worksheets("²é×¼ÂÊBy ¸öÈË").Columns(2).Find(str)
        If rng1 Is Nothing Or rng2 Is Nothing Then
            'Set rng1 = ThisWorkbook.Worksheets(class + "׼ȷÂÊ").Columns(1).End(xlDown)
            Set rng1 = ThisWorkbook.Worksheets(class + "׼ȷÂÊ").Range("A3")
            Set rng2 = ThisWorkbook.Worksheets("²é×¼ÂÊBy ¸öÈË").Columns(4).Find(class).Offset(2, 0)
            Set rng3 = ThisWorkbook.Worksheets("²éÈ«ÂÊBy ¸öÈË").Columns(4).Find(class).Offset(2, 0)

            'ThisWorkbook.Worksheets(class + "׼ȷÂÊ").Rows(rng1.Row).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            rng1.Resize(1, 6).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            ThisWorkbook.Worksheets("²é×¼ÂÊBy ¸öÈË").Rows(rng2.Row).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            ThisWorkbook.Worksheets("²éÈ«ÂÊBy ¸öÈË").Rows(rng3.Row).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            
            ThisWorkbook.Worksheets("¸½¼þ").Cells(i, 25).Resize(1, 2).Copy
            rng1.Offset(-1, 0).PasteSpecial Paste:=xlPasteValues
            rng2.Offset(-1, -2).PasteSpecial Paste:=xlPasteValues
            rng2.Offset(-1, 0) = class
            rng3.Offset(-1, -2).PasteSpecial Paste:=xlPasteValues
            rng3.Offset(-1, 0) = class
            'MsgBox (rng2.Offset(-2, 33).Address)
            
            rng1.Offset(-2, 2).Resize(1, 4).AutoFill Destination:=rng1.Offset(-2, 2).Resize(2, 4), Type:=xlFillDefault
            rng2.Offset(-2, 32).AutoFill Destination:=rng2.Offset(-2, 32).Resize(2, 1), Type:=xlFillDefault
            rng3.Offset(-2, 32).AutoFill Destination:=rng3.Offset(-2, 32).Resize(2, 1), Type:=xlFillDefault
        Else
            MsgBox (CStr(str) + " Is Exist")
            Exit Sub
        End If
        ThisWorkbook.Worksheets("¸½¼þ").Cells(i, 24).Resize(1, 3).Delete Shift:=xlUp
        'i = i + 1
    Loop
    ThisWorkbook.Worksheets("¸½¼þ").Activate
    Application.ScreenUpdating = True
End Sub

Sub picture()
    Selection.ShapeRange.LockAspectRatio = msoFalse
    Selection.ShapeRange.Height = 127.5590551181
    Selection.ShapeRange.Width = 141.7322834646
End Sub

label_change

Sub DataLabels(x)
    
    Dim i, y As Integer

    Worksheets(2).ChartObjects(1).Activate
    ActiveChart.SeriesCollection(1).DataLabels.Delete
    ActiveChart.SeriesCollection(1).ApplyDataLabels
    y = ActiveChart.SeriesCollection(1).Points.Count
    If y <> 0 Then
        For i = 1 To y
            ActiveChart.SeriesCollection(1).Points(i).DataLabel.Select
            With Selection.Format.TextFrame2.TextRange.Font
                'If i <> y Then
                    .Fill.ForeColor.RGB = RGB(0, 0, 0)
                    .Bold = msoFalse
                'Else
                    '.Fill.ForeColor.RGB = RGB(0, 176, 80)
                    '.Bold = msoTrue
                'End If
            End With
         Next
     End If

    ActiveChart.SeriesCollection(2).DataLabels.Delete
    ActiveChart.SeriesCollection(2).ApplyDataLabels
    ActiveChart.SeriesCollection(2).DataLabels.Select
    ActiveChart.SetElement (msoElementDataLabelInsideBase)
    y = ActiveChart.SeriesCollection(2).Points.Count
    If y <> 0 Then
        For i = 1 To y
            ActiveChart.SeriesCollection(2).Points(i).DataLabel.Select
            With Selection.Format.TextFrame2.TextRange.Font
                'If i <> y Then
                    .Fill.ForeColor.RGB = RGB(0, 0, 0)
                    .Bold = msoFalse
                'Else
                    '.Fill.ForeColor.RGB = RGB(0, 176, 80)
                    '.Bold = msoTrue
                'End If
            End With
         Next
     End If
     

End Sub
原文地址:https://www.cnblogs.com/taoyucheng/p/10558623.html