繁体   English   中英

在指定工作表中重复复制/粘贴步骤 - 如何简化我的 VBA 代码?

[英]Repeating copy/paste steps in specify sheets - how can I simplify my VBA code?

我是 VBA 的初学者,我想请更有经验的人来简化我的 VBA 代码。

代码的工作非常简单。 宏遍历源 .xlsx 文件的下钻列表,每次循环设置下钻引用时刷新表作为 PowerQuery 结果(表“CZDataSource”),并在同一工作簿的每三张表中执行相同的重复复制/粘贴步骤(表格“预测 - 月”、“预测 - 月 +1”、“预测 - 月 +2”)。

Sub SpitValues()

Dim dvCell As Range
Dim inputRange As Range
Dim c As Range

Application.ScreenUpdating = False
Application.EnableEvents = False
'Drop-down list source
Set dvCell = Worksheets("CZDataSource").Range("C3")
Set inputRange = Evaluate(dvCell.Validation.Formula1)

For Each c In inputRange
 dvCell = c.Value
 
 If (Right(Range("C2"), 3) = "1st") And Range("C3") = "RIG Forecast_2021_act.xlsx" Then
      Sheets("CZDataSource").ListObjects("RIG_Forecast_output").QueryTable.Refresh BackgroundQuery:=False
      'CZ data input/output
      Sheets("CZDataSource").Range("C7:C12").Copy
      Sheets("Forecast - Month").Range("AZ34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("AZ34:AZ39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("D7:D12").Copy
      Sheets("Forecast - Month").Range("BA34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BA34:BA39").NumberFormat = "#,##0,"
      Sheets("Forecast - Month").Range("BB34:BB39").Value = "0"
      Sheets("CZDataSource").Range("F7:F12").Copy
      Sheets("Forecast - Month").Range("BI34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BI34:BI39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("G7:G12").Copy
      Sheets("Forecast - Month").Range("BJ34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BJ34:BJ39").NumberFormat = "#,##0,"
      Sheets("Forecast - Month").Range("BK34:BK39").Value = "0"
      Sheets("CZDataSource").Range("E7:E12").Copy
      Sheets("Forecast - Month").Range("BO34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BO34:BO39").NumberFormat = "#,##0,"
      Sheets("Forecast - Month").Range("BP34:BP39").Value = "0"
      Sheets("CZDataSource").Range("H7:H12").Copy
      Sheets("Forecast - Month").Range("BS34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BS34:BS39").NumberFormat = "#,##0,"
      Sheets("Forecast - Month").Range("BT34:BT39").Value = "0"
      'SK data input/output
      Sheets("CZDataSource").Range("C13:C18").Copy
      Sheets("Forecast - Month").Range("AZ55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("AZ55:AZ60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("D13:D18").Copy
      Sheets("Forecast - Month").Range("BA55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BA55:BA60").NumberFormat = "#,##0,"
      Sheets("Forecast - Month").Range("BB55:BB60").Value = "0"
      Sheets("CZDataSource").Range("F13:F18").Copy
      Sheets("Forecast - Month").Range("BI55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BI55:BI60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("G13:G18").Copy
      Sheets("Forecast - Month").Range("BJ55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BJ55:BJ60").NumberFormat = "#,##0,"
      Sheets("Forecast - Month").Range("BK55:BK60").Value = "0"
      Sheets("CZDataSource").Range("E13:E18").Copy
      Sheets("Forecast - Month").Range("BO55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BO55:BO60").NumberFormat = "#,##0,"
      Sheets("Forecast - Month").Range("BP55:BP60").Value = "0"
      Sheets("CZDataSource").Range("H13:H18").Copy
      Sheets("Forecast - Month").Range("BS55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BS55:BS60").NumberFormat = "#,##0,"
      Sheets("Forecast - Month").Range("BT55:BT60").Value = "0"
 
 ElseIf (Right(Range("C2"), 3) = "1st") And Range("C3") = "RIG Forecast_2021_m+1.xlsx" Then
      Sheets("CZDataSource").ListObjects("RIG_Forecast_output").QueryTable.Refresh BackgroundQuery:=False
        'CZ data input/output
      Sheets("CZDataSource").Range("C7:C12").Copy
      Sheets("Forecast - Month +1").Range("AZ34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("AZ34:AZ39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("D7:D12").Copy
      Sheets("Forecast - Month +1").Range("BA34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BA34:BA39").NumberFormat = "#,##0,"
      Sheets("Forecast - Month +1").Range("BB34:BB39").Value = "0"
      Sheets("CZDataSource").Range("F7:F12").Copy
      Sheets("Forecast - Month +1").Range("BI34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BI34:BI39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("G7:G12").Copy
      Sheets("Forecast - Month +1").Range("BJ34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BJ34:BJ39").NumberFormat = "#,##0,"
      Sheets("Forecast - Month +1").Range("BK34:BK39").Value = "0"
      Sheets("CZDataSource").Range("E7:E12").Copy
      Sheets("Forecast - Month +1").Range("BO34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BO34:BO39").NumberFormat = "#,##0,"
      Sheets("Forecast - Month +1").Range("BP34:BP39").Value = "0"
      Sheets("CZDataSource").Range("H7:H12").Copy
      Sheets("Forecast - Month +1").Range("BS34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BS34:BS39").NumberFormat = "#,##0,"
      Sheets("Forecast - Month +1").Range("BT34:BT39").Value = "0"
      'SK data input/output
      Sheets("CZDataSource").Range("C13:C18").Copy
      Sheets("Forecast - Month +1").Range("AZ55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("AZ55:AZ60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("D13:D18").Copy
      Sheets("Forecast - Month +1").Range("BA55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BA55:BA60").NumberFormat = "#,##0,"
      Sheets("Forecast - Month +1").Range("BB55:BB60").Value = "0"
      Sheets("CZDataSource").Range("F13:F18").Copy
      Sheets("Forecast - Month +1").Range("BI55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BI55:BI60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("G13:G18").Copy
      Sheets("Forecast - Month +1").Range("BJ55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BJ55:BJ60").NumberFormat = "#,##0,"
      Sheets("Forecast - Month +1").Range("BK55:BK60").Value = "0"
      Sheets("CZDataSource").Range("E13:E18").Copy
      Sheets("Forecast - Month +1").Range("BO55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BO55:BO60").NumberFormat = "#,##0,"
      Sheets("Forecast - Month +1").Range("BP55:BP60").Value = "0"
      Sheets("CZDataSource").Range("H13:H18").Copy
      Sheets("Forecast - Month +1").Range("BS55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BS55:BS60").NumberFormat = "#,##0,"
      Sheets("Forecast - Month +1").Range("BT55:BT60").Value = "0"
 
 ElseIf (Right(Range("C2"), 3) = "1st") And Range("C3") = "RIG Forecast_2021_m+2.xlsx" Then
      Sheets("CZDataSource").ListObjects("RIG_Forecast_output").QueryTable.Refresh BackgroundQuery:=False
     'CZ data input/output
      Sheets("CZDataSource").Range("C7:C12").Copy
      Sheets("Forecast - Month +2").Range("AZ34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("AZ34:AZ39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("D7:D12").Copy
      Sheets("Forecast - Month +2").Range("BA34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BA34:BA39").NumberFormat = "#,##0,"
      Sheets("Forecast - Month +2").Range("BB34:BB39").Value = "0"
      Sheets("CZDataSource").Range("F7:F12").Copy
      Sheets("Forecast - Month +2").Range("BI34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BI34:BI39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("G7:G12").Copy
      Sheets("Forecast - Month +2").Range("BJ34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BJ34:BJ39").NumberFormat = "#,##0,"
      Sheets("Forecast - Month +2").Range("BK34:BK39").Value = "0"
      Sheets("CZDataSource").Range("E7:E12").Copy
      Sheets("Forecast - Month +2").Range("BO34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BO34:BO39").NumberFormat = "#,##0,"
      Sheets("Forecast - Month +2").Range("BP34:BP39").Value = "0"
      Sheets("CZDataSource").Range("H7:H12").Copy
      Sheets("Forecast - Month +2").Range("BS34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BS34:BS39").NumberFormat = "#,##0,"
      Sheets("Forecast - Month +2").Range("BT34:BT39").Value = "0"
      'SK data input/output
      Sheets("CZDataSource").Range("C13:C18").Copy
      Sheets("Forecast - Month +2").Range("AZ55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("AZ55:AZ60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("D13:D18").Copy
      Sheets("Forecast - Month +2").Range("BA55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BA55:BA60").NumberFormat = "#,##0,"
      Sheets("Forecast - Month +2").Range("BB55:BB60").Value = "0"
      Sheets("CZDataSource").Range("F13:F18").Copy
      Sheets("Forecast - Month +2").Range("BI55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BI55:BI60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("G13:G18").Copy
      Sheets("Forecast - Month +2").Range("BJ55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BJ55:BJ60").NumberFormat = "#,##0,"
      Sheets("Forecast - Month +2").Range("BK55:BK60").Value = "0"
      Sheets("CZDataSource").Range("E13:E18").Copy
      Sheets("Forecast - Month +2").Range("BO55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BO55:BO60").NumberFormat = "#,##0,"
      Sheets("Forecast - Month +2").Range("BP55:BP60").Value = "0"
      Sheets("CZDataSource").Range("H13:H18").Copy
      Sheets("Forecast - Month +2").Range("BS55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BS55:BS60").NumberFormat = "#,##0,"
      Sheets("Forecast - Month +2").Range("BT55:BT60").Value = "0"
 
 ElseIf (Right(Range("C2"), 3) = "2nd") And Range("C3") = "RIG Forecast_2021_act.xlsx" Then
      Sheets("CZDataSource").ListObjects("RIG_Forecast_output").QueryTable.Refresh BackgroundQuery:=False
      'CZ data input/output
      Sheets("CZDataSource").Range("C7:C12").Copy
      Sheets("Forecast - Month").Range("AZ34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("AZ34:AZ39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("D7:D12").Copy
      Sheets("Forecast - Month").Range("BB34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BB34:BB39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("F7:F12").Copy
      Sheets("Forecast - Month").Range("BI34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BI34:BI39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("G7:G12").Copy
      Sheets("Forecast - Month").Range("BK34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BK34:BK39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("E7:E12").Copy
      Sheets("Forecast - Month").Range("BP34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BP34:BP39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("H7:H12").Copy
      Sheets("Forecast - Month").Range("BT34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BT34:BT39").NumberFormat = "#,##0,"
      'SK data input/output
      Sheets("CZDataSource").Range("C13:C18").Copy
      Sheets("Forecast - Month").Range("AZ55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("AZ55:AZ60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("D13:D18").Copy
      Sheets("Forecast - Month").Range("BB55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BB55:BB60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("F13:F18").Copy
      Sheets("Forecast - Month").Range("BI55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BI55:BI60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("G13:G18").Copy
      Sheets("Forecast - Month").Range("BK55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BK55:BK60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("E13:E18").Copy
      Sheets("Forecast - Month").Range("BP55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BP55:BP60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("H13:H18").Copy
      Sheets("Forecast - Month").Range("BT55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month").Range("BT55:BT60").NumberFormat = "#,##0,"
    
 ElseIf (Right(Range("C2"), 3) = "2nd") And Range("C3") = "RIG Forecast_2021_m+1.xlsx" Then
      Sheets("CZDataSource").ListObjects("RIG_Forecast_output").QueryTable.Refresh BackgroundQuery:=False
      'CZ data input/output
      Sheets("CZDataSource").Range("C7:C12").Copy
      Sheets("Forecast - Month +1").Range("AZ34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("AZ34:AZ39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("D7:D12").Copy
      Sheets("Forecast - Month +1").Range("BB34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BB34:BB39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("F7:F12").Copy
      Sheets("Forecast - Month +1").Range("BI34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BI34:BI39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("G7:G12").Copy
      Sheets("Forecast - Month +1").Range("BK34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BK34:BK39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("E7:E12").Copy
      Sheets("Forecast - Month +1").Range("BP34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BP34:BP39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("H7:H12").Copy
      Sheets("Forecast - Month +1").Range("BT34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BT34:BT39").NumberFormat = "#,##0,"
      'SK data input/output
      Sheets("CZDataSource").Range("C13:C18").Copy
      Sheets("Forecast - Month +1").Range("AZ55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("AZ55:AZ60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("D13:D18").Copy
      Sheets("Forecast - Month +1").Range("BB55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BB55:BB60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("F13:F18").Copy
      Sheets("Forecast - Month +1").Range("BI55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BI55:BI60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("G13:G18").Copy
      Sheets("Forecast - Month +1").Range("BK55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BK55:BK60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("E13:E18").Copy
      Sheets("Forecast - Month +1").Range("BP55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BP55:BP60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("H13:H18").Copy
      Sheets("Forecast - Month +1").Range("BT55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +1").Range("BT55:BT60").NumberFormat = "#,##0,"

 ElseIf (Right(Range("C2"), 3) = "2nd") And Range("C3") = "RIG Forecast_2021_m+2.xlsx" Then
      Sheets("CZDataSource").ListObjects("RIG_Forecast_output").QueryTable.Refresh BackgroundQuery:=False
      'CZ data input/output
      Sheets("CZDataSource").Range("C7:C12").Copy
      Sheets("Forecast - Month +2").Range("AZ34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("AZ34:AZ39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("D7:D12").Copy
      Sheets("Forecast - Month +2").Range("BB34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BB34:BB39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("F7:F12").Copy
      Sheets("Forecast - Month +2").Range("BI34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BI34:BI39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("G7:G12").Copy
      Sheets("Forecast - Month +2").Range("BK34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BK34:BK39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("E7:E12").Copy
      Sheets("Forecast - Month +2").Range("BP34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BP34:BP39").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("H7:H12").Copy
      Sheets("Forecast - Month +2").Range("BT34").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BT34:BT39").NumberFormat = "#,##0,"
      'SK data input/output
      Sheets("CZDataSource").Range("C13:C18").Copy
      Sheets("Forecast - Month +2").Range("AZ55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("AZ55:AZ60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("D13:D18").Copy
      Sheets("Forecast - Month +2").Range("BB55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BB55:BB60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("F13:F18").Copy
      Sheets("Forecast - Month +2").Range("BI55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BI55:BI60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("G13:G18").Copy
      Sheets("Forecast - Month +2").Range("BK55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BK55:BK60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("E13:E18").Copy
      Sheets("Forecast - Month +2").Range("BP55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BP55:BP60").NumberFormat = "#,##0,"
      Sheets("CZDataSource").Range("H13:H18").Copy
      Sheets("Forecast - Month +2").Range("BT55").PasteSpecial Paste:=xlValues, operation:=xlPasteSpecialOperationNone
      Sheets("Forecast - Month +2").Range("BT55:BT60").NumberFormat = "#,##0,"
    
    Else
        
        MsgBox ("there is something wrong")
    
    End If
    
Next c

Application.ScreenUpdating = True
Application.EnableEvents = True

Application.CutCopyMode = False

End Sub

基本上,我想摆脱特定工作表中如此多的重复步骤,并缩短并简化代码。

非常感谢任何帮助。

将对我在评论中描述的内容做一个简短的模型:

sub stuff()
    dim sourceSheet as worksheet
    set sourceSheet = Sheets("CZDataSource")
    dim destSheet as worksheet
    Select Case True
        Case sourceSheet.Cells(2,3).Value =  "RIG Forecast_2021_act.xlsx"
            set destSheet = Sheets("Forecast - Month")
        Case sourceSheet.Cells(2,3).Value =  "RIG Forecast_2021_m+1.xlsx"
            set destSheet = Sheets("Forecast - Month +1")
        Case sourceSheet.Cells(2,3).Value =  "RIG Forecast_2021_m+2.xlsx"
            set destSheet = Sheets("Forecast - Month +2")
    End Select
    Dim sourceRangeArray as variant
    sourceRangeArray = sourceSheet.Range("C7:C12") ', Keep filling these
    Dim destRangeArray as variant
    destRangeArray = destSheet.Range("AZ34:AZ39") ', Keep filling these
    Dim i as Long
    For i = lbound(sourceRangeArray) to ubound(sourceRangeArray) 
        DoTheThing sourceRangeArray(i),destRangeArray(i)
    Next i
End Sub

Private Sub DoTheThing(sourceRange as Range, destRange as Range)
    destRange.Value = sourceRange.Value
    destRange.Numberformat = "#,##0,"
End Sub

无论目标工作表如何,您都会不断使用相同的范围,因此您可以在两个数组中以相同的顺序 1:1 使用它们。

更改为.value = .value将节省您的复制和粘贴,并消除对pastespecial的需要; 如果有必要,您仍然会保留格式,尽管我有一种感觉,您可以在最后格式化比每个操作内部更大的范围......随着范围的数量,时间上不应该太糟糕按原样做。

Select用于您的目标表会删除您的重复范围中发生的最大部分,因此仅此一项就可以节省大量时间/重复。

仔细观察范围后,“1st”和“2nd”的使用似乎并不重要,因为您只查看C3工作簿的名称。 这将进一步减少Select

将您的范围放入数组中,然后您可以重复使用相同的代码行遍历它们。

Option Explicit

Sub SpitValues()

    Const PREFIX = "RIG Forecast_2021_"

    Dim dvCell As Range, inputRange As Range, c As Range
    Dim wsSrc As Worksheet, wsTarget As Worksheet
    Dim tbl As ListObject
    
    'Drop-down list source
    Set wsSrc = Sheets("CZDataSource")
    Set dvCell = wsSrc.Range("C3")
    Set inputRange = Evaluate(dvCell.Validation.Formula1)
    Set tbl = wsSrc.ListObjects("RIG_Forecast_output")
    
    ' put source ranges into array
    Dim arSrc, arTgt, arZeros, i As Integer, bError As Boolean, s As String
    arSrc = Split("C,D,E,F,G,H", ",")
      
    ' put target and zero ranges for 1st/2nd into arrays
    s = Right(wsSrc.Range("C2"), 3)
    If s = "1st" Then
        arTgt = Split("AZ,BA,BO,BI,BJ,BS", ",")
        arZeros = Split("BB,BP,BK,BT", ",")
    ElseIf s = "2nd" Then
        arTgt = Split("AZ,BB,BP,BI,BK,BT", ",")
        arZeros = Array()
    Else
        MsgBox "'" & s & "' is not 1st/2nd in C2", vbCritical
        Exit Sub
    End If
    
    ' copy source to target
    Application.ScreenUpdating = False
    For Each c In inputRange
        dvCell.Value = c.Value

        ' select target sheet
        If c.Value = PREFIX & "act.xlsx" Then
            Set wsTarget = Sheets("Forecast - Month")
        ElseIf c.Value = PREFIX & "m+1.xlsx" Then
            Set wsTarget = Sheets("Forecast - Month +1")
        ElseIf c.Value = PREFIX & "m+2.xlsx" Then
            Set wsTarget = Sheets("Forecast - Month +2")
        Else
            bError = True
        End If

        ' execute
        If bError Then
             MsgBox c.Value & " not recognized", vbExclamation, "Row " & c.Row
        Else
             tbl.QueryTable.Refresh BackgroundQuery:=False
             With wsTarget
                ' loop through the src/tgt ranges
                For i = 0 To UBound(arSrc)
                    'CZ data input/output
                    .Range(arTgt(i) & "34").Resize(6).Value2 = wsSrc.Range(arSrc(i) & "7").Resize(6).Value2
                    .Range(arTgt(i) & "34").Resize(6).NumberFormat = "#,##0,"
                    'SK data input/output
                    .Range(arTgt(i) & "55").Resize(6).Value2 = wsSrc.Range(arSrc(i) & "13").Resize(6).Value2
                    .Range(arTgt(i) & "55").Resize(6).NumberFormat = "#,##0,"
                Next
                ' zero values
                For i = 0 To UBound(arZeros)
                    .Range(arZeros(i) & "34").Resize(6).Value2 = 0
                    .Range(arZeros(i) & "55").Resize(6).Value2 = 0
                Next
            End With
            s = s & vbLf & wsTarget.Name ' for msgbox
        End If
    Next
    Application.ScreenUpdating = True
    MsgBox "Sheets updated for " & s, vbInformation

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM