我今天遇到了这个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).Cells(3+ i,1).Value = Current(i),这一直持续到今天,所以我不明白它为什么会停止,current(i)是一个一维数组值,它是一个名称,比如"TONY BUGGENS“。
整个程序是一个排序程序,所以它对数组中的名称进行排序,然后将它们粘贴到电子表格中的原始名称上。
谢谢你们的帮助,我相信我可能忽略了一些简单的事情。今天一大早。
干杯,艾米
发布于 2013-04-02 16:39:25
不要使用Activesheet,而是使用以下样式命名工作表:
Thisworkbook.Sheets("Sheetname")Activesheet最终可能会导致错误。
此外,不是复制粘贴,而是以此样式指定值:
Thisworkbook.Sheet("Destination").range("A1:B2").Value = Thisworkbook.Sheet("Source").range("A1:B2").Value确保源范围和目标范围始终具有相同的大小。
当然,以您的方式使用cells是可以的。
至于第二个bug,最好的办法就是使用VBA的“局部变量窗口”,它会显示您的局部变量。您的代码不会显示数组中填充的内容,但可以在“局部变量”窗口中对其进行验证。您还可以使用:
debug.print current(i) 来验证数组中包含的内容。如果数组包含无法赋值的值或对象,则需要验证分配给该数组的值或对象
current(i) = <???> 如果它解决了你的问题,请告诉我。
发布于 2013-04-02 17:23:52
问题是工作表内置了宏,无论工作表中的任何内容发生变化,这些宏都会运行。这发生在我的程序中,我相信它正在清除我的剪贴板,并使它尝试粘贴任何东西。
第二个问题是由于程序的自动保护。
整个电子表格是一团糟,因为程序员显然没有做好工作,我已经画出了整理它的短稻草。
谢谢你们的帮助,我可能很快又需要它了。
https://stackoverflow.com/questions/15758971
复制相似问题