Excel - 条件宏/ VBA脚本

时间:2014-09-26 02:13:48

标签: excel vba excel-vba

我正在尝试自动化一个报告,对于客户来说,我有点困在需要克服的障碍之一,我有一些想法,但我是VB编程的新手。

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

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

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

2 个答案:

答案 0 :(得分:0)

绝对可以。

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并在范围内使用它。

答案 1 :(得分:0)

您可能需要以下子程序。

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

在这段代码中,我假设有以下用于编写concreat代码。

  1. "源"是包含要复制的数据的工作表的名称
  2. "目的地"是记录从" source"复制的数据的工作表的名称。工作表
  3. 要复制的数据存在于" B2:F3"工作表"来源"
  4. 请更改工作表'命名为您的数据的真实姓名。

    要复制的数据位置被描述为"范围(sWS.Cells(2,2),sWS.Cells(3,6))"在代码中。

    细胞(2,2)表示第2行和第2列的细胞,即" B2"。

    细胞(3,6)表示第3行和第6列的细胞,即" F3"

    准备好正确的位置以适应您的数据。