【问题标题】:Excel - Conditional macro / VBA scriptExcel - 条件宏/VBA 脚本
【发布时间】:2014-11-20 23:03:45
【问题描述】:

我正在尝试为客户自动生成一份报告,但我有点难以克服需要克服的障碍之一,我有一些想法,但对 VB 编程很陌生。

要求是将一系列单元格从一个工作表复制到另一个工作表,但目标需要根据当前日期进行更改。使用一般示例,我试图实现以下目标:

如果日期是当月的 1 日,目的地范围是 B2:F3,如果是 2 日,那么目的地范围是 B4:F5,如果是 3 日,那么目的地是 B6:F7…… . 如果 31 日,那么目标是 B62:F63,源范围是静态的。

我想我可能可以通过编写一个包含每月每一天的 IF 语句的巨大脚本来实现这一点,但我希望我可以更聪明一点,并在开头使用变量来分配行引用脚本然后将它们分回到选择/复制语句中。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    绝对可以。

    Dim x as Integer
    Dim daymonth as Integer
    Dim rw as String
    daymonth = CInt(Format(date, "d"))
    x = daymonth * 2
    rw = CStr(x)
    

    现在你可以像这样使用范围:

    Range("D" & rw & ":F" & CStr(x + 1))
    

    只是一个例子。然后由于两个范围之间的数字是恒定的,只需将该数字添加到 x 并在该范围内使用它。

    【讨论】:

    • 很好的反馈,两种反应都非常中肯。我不确定如何将变量集成到单元格引用中,以及使用 NOW() 等方法而不是使用单元格来保存此信息。这是我的第一个 VBA 项目,对于新手问题非常抱歉。
    【解决方案2】:

    您可能需要以下子程序。

    Sub copyDataDependOnDatte()
      Dim today As Date, dayOfToday As Integer
      Dim sWS As Worksheet, dWS As Worksheet
    
      'set two worksheets to variables
      Set sWS = Worksheets("source")  'Worksheet which has data to be copied
      Set dWS = Worksheets("destination")  'Worksheet which is used to record data of days.
    
      ' get day of today
      today = Now()  'get date of today
      dayOfToday = Day(today)  ' get day of today
    
      Range(sWS.Cells(2, 2), sWS.Cells(3, 6)).Copy 'copy B2:F3 of worksheet "source"
      dWS.Cells(dayOfToday * 2, 2).PasteSpecial ' paste to worksheet "destination" at place determined by day of today
    
    End Sub
    

    在这段代码中,我假设以下是编写具体的代码。

    1. “source”是包含要复制的数据的工作表的名称
    2. “destination”是工作表的名称,记录从“源”工作表复制的数据
    3. 要复制的数据存在于工作表“源”的“B2:F3”

    请将工作表的名称更改为您的数据的真实名称。

    要复制的数据位置在代码中描述为“Range(sWS.Cells(2, 2), sWS.Cells(3, 6))”。

    cells(2,2) 表示第 2 行第 2 列的单元格,即“B2”。

    Cells(3,6) 表示第 3 行第 6 列的单元格,即“F3”。

    请正确放置您的数据。

    【讨论】:

      猜你喜欢
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      • 2011-01-14
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多