用于比较不同文件的日期的宏

时间:2014-05-27 18:07:37

标签: excel excel-vba vba

我是一个老人,试图比较Excel中两个不同文件的日期。 我的代码是:

Dim i As Integer

For i = 1 To 7

IF Data_for_Processing.xls (“SOLARLOG”). Cells (i,”A”).Value = Day_Conversion_chart.xls (Sheet1).Cells (i+2, “B”) Then

Cells(7+I, “B”)=”Equal”
Else: Cells(7+i, “B”) = “NotEQ”

End If

Next i

有人会帮忙吗?

1 个答案:

答案 0 :(得分:0)

首先,我建议关注@simoco的建议 - 阅读文档将提供解决未来问题的工具,并为您提供基础知识。除此之外,我建议使用vba帮助。另一个非常有用的尝试命令的工具可能是记录宏并稍后在编辑器上进行分析。

所以,首先你需要代码在宏中。它看起来像这样(我选择名称TestMacro):

  Sub TestMacro()
   'Code here.
  End sub

您应该考虑到当您的宏正在运行时,它会从您正在使用的工作表中执行此操作,因此对单元格等的任何部分引用都将引用您所在的工作簿以及您所在的工作表。你运行宏。可以选择其他工作表或书籍,如果您手动或在代码上执行此操作,则会对所选书籍或工作表进行引用。

我在这里称之为部分引用的是那些只读“ThisCell”而不是“ThisBook.ThisSheet.ThisCell”的内容。我会说,在绝大多数情况下,使用部分引用是合适的。

您的代码的组织方式,请小心从您希望数据到达的工作簿中运行它,比如说,在“主”工作簿中,以便在那里写入最终值。

另一条评论:每当你想使用另一个文件时,这个文件必须是打开的(据我所知),当你使用它时。在您的代码中,您不打开任何文件,因此如果在运行宏之前未手动打开所有引用的工作簿,宏将无法工作。

当你想引用某些内容时,你大多使用“。”。请阅读文档 - 您将更好地了解其工作原理。对于这个例子:

Book.Sheet.Cell.Value是您正在使用的结构。

如果书籍已打开,则可以将其引用为工作簿(“Name.xls”)。

工作表或工作表可以引用为表格(“名称”)或工作表(“名称”),也可以引用数字,如表格(1)或工作表(1)。可以在vba编辑器帮助中看到差异。我为你的例子选择了Sheets(...)。

小心符号。我想这可能是我的问题,但我必须提一下以防万一:当我复制你的代码而不是双引号(“”)时,我得到了一些不同的东西,Excel无法识别。如果由于任何原因您使用不同的符号,Excel可能无法理解。

也可以通过各种方式引用单元格。 Range对象被广泛使用,如果你想使用“A1”,“C44”等,它可能更适合它。我喜欢使用Cells(,),如果可能的话。据我所知,这适用于数字(例如,单元格(1,2)),这也可能非常方便。我保留了你的代码,改变了“A”和“B”,分别写了1和2。

包含所有这些变化:

评论:

'NOTICE THAT ALL WORKBOOKS MUST BE OPEN.
'["A"] changed to [1]
'[Sheet1] changed to [1]
'["B"] changed to [2]
'Data_for_Processing.xls(“SOLARLOG”).Cells(i, 1).Value
'becomes Workbooks("Data_for_Processing.xls").Sheets(“SOLARLOG”).Cells(i,1).Value
'Day_Conversion_chart.xls(1).Cells(i + 2, 2).Value
'becomes Workbooks("Day_Conversion_chart.xls").Sheets(1).Cells(i+2,2).Value
'["B"] changed to [2]

一种可能的解决方案:

Sub TestMacro()

  Dim i As Integer

  For i = 1 To 7  

    If Workbooks("Data_for_Processing.xls").Sheets("SOLARLOG").Cells(i, 1).Value _
    = Workbooks("Day_Conversion_chart.xls").Sheets(1).Cells(i + 2, 2).Value Then

      Cells(7 + i, 2) = "Equal"
    Else: Cells(7 + i, 2) = "NotEQ"

    End If

  Next i

End Sub

这适用于我的Excel示例 - 我希望它有所帮助。

问候。