您好我正在尝试创建一个有助于调整两个时间序列的宏。所以我必须让这两个时间序列具有相同的日期,假设如果没有该日期的数据,则采用前一天的价格。
除Range复制部分外,我的所有代码都有效。它没有粘贴到插入的空白单元格中。有谁知道为什么会这样?有问题的行是最后一个Range行。我也试过了.Copy(Destination)方法,但它也没有用。错误处理程序表示范围类的副本失败。
Sub Adjustdate()
Dim lastrow As Long
Dim n As Integer
Dim read As Double
Dim adju As Double
Dim entry As Long
Dim comp As Long
lastrow = Cells(Rows.Count, "A").End(xlUp).Value
n = 2
While comp <> lastrow
entry = Cells(n, "A")
comp = Cells(n, "T")
read = Cells(n, "B")
adju = Cells(n, "C")
If (entry < comp) Then
Cells(n, "A").Insert Shift:=xlDown
Cells(n, "B").Insert Shift:=xlDown
Cells(n, "C").Insert Shift:=xlDown
Cells(n, "B") = read
Cells(n, "C") = adju
Cells(n, "A") = comp
End If
If (entry > comp) Then
Cells(n, "T").Insert Shift:=xlDown
Cells(n, "T") = entry
Cells(n, "T").Interior.ColorIndex = 8
Range(Cells(n, "U"), Cells(n, "AH")).Insert Shift:=xlDown
Range(Cells((n + 1), "U"), Cells((n + 1), "AH")) = (Range(Cells(n, "U"), Cells(n, "AH")))
End If
n = n + 1
Wend
End Sub
Screenshot of data 这是400错误后代码的屏幕截图(它一直运行到插入新行的部分。)
答案 0 :(得分:0)
根据您的屏幕截图显示您的数据处于降序日期序列,您的问题是由以下两行代码引起的:
Range(Cells(n, "U"), Cells(n, "AH")).Insert Shift:=xlDown
Range(Cells((n + 1), "U"), Cells((n + 1), "AH")) = (Range(Cells(n, "U"), Cells(n, "AH")))
第一行是在行n
上插入空单元格。然后第二行设置行n + 1
上的单元格值(以前在行n
上的单元格,直到你将它们向下移动)为行{{}中现在为空的单元格的值1}}。
您需要的正确代码是:
n
您在评论中说过您之前尝试过以下命令:
Range(Cells(n, "U"), Cells(n, "AH")).Insert Shift:=xlDown
Range(Cells(n, "U"), Cells(n, "AH")) = Range(Cells(n + 1, "U"), Cells(n + 1, "AH"))
(我添加了一个行继续字符/换行符,以便在本文中更容易阅读。)
没有成功的原因是:
Range(Cells((n + 1), "U"), Cells((n + 1), "AH")).Copy _
[Destination:=(Range(Cells(n, "U"), Cells(n, "AH")))]
)只是语法错误。所以,让我们放下方括号并假装你刚说了
[...]
修订后的命令是说副本的目的地是Range(Cells((n + 1), "U"), Cells((n + 1), "AH")).Copy _
Destination:=(Range(Cells(n, "U"), Cells(n, "AH")))
。虽然(Range(Cells(n, "U"), Cells(n, "AH")))
是有效范围,但它周围的圆括号(Range(Cells(n, "U"), Cells(n, "AH"))
)告诉VBA将它从对象指针转换为值。
这意味着您的目的地将是(...)
数组,该数组不是有效的&#34;目的地&#34;对于Variant
方法。
删掉那些圆括号会让你输入命令
Range.Copy
这将是一个有效的命令,并完成你想要的。
下面是一个监视窗口的screendump,显示了在Range(Cells((n + 1), "U"), Cells((n + 1), "AH")).Copy _
Destination:=Range(Cells(n, "U"), Cells(n, "AH"))
范围内放置圆括号导致的变量类型的差异:
总之......尽管使用括号来增强代码的可读性(例如在复杂的公式中)通常被认为是个好主意,但不要在不需要它们的地方使用VBA中的括号。 / p>