【问题标题】:Repeating copy/paste steps in specify sheets - how can I simplify my VBA code?在指定工作表中重复复制/粘贴步骤 - 如何简化我的 VBA 代码?
【发布时间】:2021-10-16 19:50:43
【问题描述】:

我是 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

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

非常感谢任何帮助。

【问题讨论】:

  • 赞一个 - 这是在编程中变得更好的正确问题:-)。一些快速的想法(也许我稍后有时间写一个完整的答案):创建一个映射数组,将源单元格/地址映射到目标单元格/地址,具有复制/粘贴内容的通用函数,作为您传递的参数数组中的源/目标单元格地址,使用 .value = .value 代替复制/粘贴(您会找到有关此的教程),为工作表使用变量等。
  • 我立即认为它是一个函数并传递范围,例如,DoTheThing(Range1,Range2,Range3) 其中DoTheThing() 概述了复制/粘贴。由于您一遍又一遍地做同样的事情,并且只确定工作表,请将工作表设置为 Select 案例,然后执行复制粘贴。

标签: excel vba


【解决方案1】:

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

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

【讨论】:

  • 取消注释 "'tbl.QueryTable.Refresh BackgroundQuery:=False" 完美运行!非常感谢您的出色解决方案!
【解决方案2】:

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

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

【讨论】:

  • 感谢您的建议,但 sourceRangeArray 变量的 ByRef 参数类型不匹配,我对处理它的函数没有经验。对于 C2(第 1 次和第 2 次),设置时的操作略有不同,因此取决于设置为第 1 次还是第 2 次。
猜你喜欢
  • 1970-01-01
  • 2013-06-26
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-18
相关资源
最近更新 更多