0

我今天遇到了这个 VBA 程序的问题,它已经运行了几天,现在它开始发臭了。我没有更改任何我知道会导致此问题的内容,因为它是一个简单的复制和粘贴,并且只是将单元格值设置为数组的值。我玩过它并寻找答案,但似乎无法解决它。

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,我尝试过普通的 paste 和 pastespecial,粘贴整行和定义的范围。但似乎没有什么可以让它发挥作用。

有错误的第二行是 Worksheets(1).Cells(3 + i, 1).Value = Current(i),这一直工作到今天,所以我不明白为什么它停止了,current(i)是一个一维数组值,它是一个名称,例如“TONY BUGGENS”。

整个程序是一个排序程序,因此它对数组中的名称进行排序,然后将它们粘贴到电子表格中的原始名称上。

感谢你们的帮助,我相信我可能忽略了一些简单的事情。这是一个清晨。

干杯,艾米

4

2 回答 2

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) = <???> 

让我知道它是否解决了您的问题。

于 2013-04-02T08:39:24.613 回答
0

问题是工作表具有内置的宏,只要工作表中的任何内容发生更改,这些宏就会运行。这发生在我的程序中,我相信它正在清除我的剪贴板并使其尝试粘贴任何内容。

第二个问题是由于程序自动保护自身。

整个电子表格是一团糟,因为程序员显然做得不好,我已经把它整理出来了。

感谢您的所有帮助,我可能很快会再次需要它。

于 2013-04-02T09:23:52.350 回答