我正在尝试对宏进行编码,以将特定值从工作表复制到另一个。当我运行代码时,它可以正常运行,但是如果运行,它就不能运行。
该想法是将所有行从一个工作簿复制到一个新工作簿,但一次仅复制两个行中的某些单元。我用一些琐碎的验证制作了一个宏,然后调用一个函数进行复制。 (可以在“ espaciosEnBlanco”为0或具有正值的情况下调用该函数,并且columnaValorTotal可以是两个不同的列)
参数为:
originWorksheet:原始工作簿
newWorksheet:命运工作簿
valueColumn:我需要其中之一值的列
iFirstRow:索引(从0开始)
blankRows:保留空白行的索引(当您调用该函数并且不需要保留空行时,在此fild中发送0)
iWithoutTitle:另一个索引(从2开始,每次迭代递增1)
nextRowsNeedBlankSpaces:布尔值,表示您需要保留空白行
我试图以多种方式复制它们;复制它们,匹配值,将单元格更改为Range并将值与Range匹配。 我还尝试导入Sleep函数并将其放在所有行之间,并与wait相同,以防万一它没有足够的时间来复制值,但是它也不起作用。
我不明白的是,当我逐行调试它时,它工作得很好。
Public Function CopiarRegistros(originWorksheet, newWorksheet, valueColumn, iFirstRow, blankRows, iWithoutTitle, nextRowsNeedBlankSpaces)
If (Cells((iWithoutTitle + iFirstRow), valueColumn).Value < 0) Then
originWorksheet.Cells((iWithoutTitle + iFirstRow), "T").Copy Destination:=newWorksheet.Cells((iWithoutTitle - 1 + iFirstRow + blankRows), "B")
originWorksheet.Cells((iWithoutTitle + 1 + iFirstRow), "T").Copy Destination:=newWorksheet.Cells((iWithoutTitle + 1 - 1 + iFirstRow + blankRows), "B")
originWorksheet.Cells((iWithoutTitle + 1 + iFirstRow), valueColumn).Copy Destination:=newWorksheet.Cells((iWithoutTitle - 1 + iFirstRow + blankRows), "K")
newWorksheet.Range("I" & (iWithoutTitle - 1 + iFirstRow + blankRows)).Value = "D"
newWorksheet.Range("I" & (iWithoutTitle + 1 - 1 + iFirstRow + blankRows)).Value = "C"
Else
originWorksheet.Cells((iWithoutTitle + iFirstRow), "T").Copy Destination:=newWorksheet.Cells((iWithoutTitle - 1 + iFirstRow + blankRows), "B")
originWorksheet.Cells((iWithoutTitle + 1 + iFirstRow), "T").Copy Destination:=newWorksheet.Cells((iWithoutTitle + 1 - 1 + iFirstRow + blankRows), "B")
originWorksheet.Cells((iWithoutTitle + 1 + iFirstRow), valueColumn).Copy Destination:=newWorksheet.Cells((iWithoutTitle - 1 + iFirstRow + blankRows), "K")
newWorksheet.Range("I" & (iWithoutTitle - 1 + iFirstRow + blankRows)).Value = "C"
newWorksheet.Range("I" & (iWithoutTitle + 1 - 1 + iFirstRow + blankRows)).Value = "D"
End If
iFirstRow = iFirstRow + 1
If (nextRowsNeedBlankSpaces) Then
blankRows = blankRows + 2
End If
End Function
答案 0 :(得分:4)
在标准代码模块中:
Cells((iWithoutTitle + iFirstRow), valueColumn).Value
将引用活动表中的任何内容-通常会导致错误的结果或错误。引用范围时,您需要更加具体-始终指定要涉及的工作表。
答案 1 :(得分:0)
它也可能是微不足道的。我在调试时复制数据时遇到问题。我的代码在调试模式下运行顺利,但是当我尝试运行它时,我得到了不同的结果。这让我发疯,我花了几个小时寻找原因。事实证明,它是折叠的列分组,在调试和运行中改变了代码的行为。为了防止它发生,在工作表中的数据操作之前使用 ThisWorkbook.Sheets("Your sheet name").Outline.ShowLevels ColumnLevels:=8 。