我今天一直在解决这个VBA计划的问题,它已经运行了好几天,现在它已经开始发臭了。我hav.nt改变了我所知道的任何导致这个问题的东西,因为它只是简单的复制和粘贴,只是将单元格值设置为数组的值。我玩过它并寻找答案,但似乎无法解决它。
Worksheets(1).Select
For i = 1 To N
Worksheets(1).Cells(3 + i, 1).Value = Current(i)
Next i
For h = 1 To holidays
Worksheets(h).Select
Range(Worksheets(h).Cells(4, 6), Worksheets(h).Cells(4 + N, 100)).Select
Selection.Copy
Worksheets("Sort Sheet").Select
Cells(1, 1).Select
Selection.PasteSpecial
For f = 1 To N
For i = 1 To N
If Position(i) = f Then
Range(Worksheets("Sort Sheet").Cells(f, 1), Worksheets("Sort Sheet").Cells(f, 100)).Select
Selection.Copy
Worksheets(h).Select
ActiveSheet.Cells(i + 3, 6).Select
ActiveSheet.PasteSpecial
Application.CutCopyMode = False
End If
Next i
Next f
Next h
End Sub
存在错误的第一行是ActiveSheet.PasteSpecial,我尝试过普通的粘贴和粘贴,粘贴整行和定义的范围。但似乎没有什么能让它发挥作用。
存在错误的第二行是工作表(1)。细胞(3 + i,1).Value = Current(i), 这一直到今天,所以我不明白为什么它已经停止,当前(i)是一维数组值,这是一个名称,如“TONY BUGGENS”。
整个程序是一个排序程序,因此它对数组中的名称进行排序,然后将它们粘贴到电子表格中的原始名称上。
感谢您的帮助,我确信这可能是我忽略的一些简单。这是一个清晨。
干杯, 艾米
答案 0 :(得分:0)
请勿使用Activesheet,而是使用以下样式命名工作表:
Thisworkbook.Sheets("Sheetname")
Activesheet最终可能会导致错误 此外,不是复制粘贴,而是以此样式分配值:
Thisworkbook.Sheet("Destination").range("A1:B2").Value = Thisworkbook.Sheet("Source").range("A1:B2").Value
确保源和目标范围始终具有相同的大小 当然,你可以按照你的方式使用细胞。
至于第二个错误,你可以做的最好的事情就是使用VBA“Locals窗口”,它会显示你的局部变量。您的代码不会显示阵列中正在填充的内容,但您可以在“本地”窗口中对其进行验证。您也可以使用:
debug.print current(i)
验证数组包含的内容。如果数组包含无法分配的值或对象,则需要验证分配给数组的内容
current(i) = <???>
让我知道它是否解决了您的问题。
答案 1 :(得分:0)
问题是这些工作表有内置的宏,这些宏在工作表中发生了任何变化。这发生在我的程序中,我相信正在清理我的剪贴板,并试图粘贴任何东西。
第二个问题是由于程序自动保护自己。
由于程序员明显没有做好工作,整个电子表格都是一团糟。我已经把它简短的整理了。
感谢所有帮助人员,我很快就会再次需要它。