给我带来麻烦的是“”表格(CStr(WS_M.Cells(n,START_C)))。单元格(n,START_C).Paste“”
这应该在第3列中找到选项卡名称,然后转到该选项卡并将选项卡名称粘贴到该选项卡中。
Const START_C = 3
Const MAX_TRAN = 1000
Const START_R = 2
Const MASTER = "MASTER"
Sub MOVEDATACORRECTLY()
Dim WS_M As Worksheet
Dim thisWB As Workbook
Set thisWB = ActiveWorkbook
Set WS_M = Worksheets(MASTER)
For M = START_R To (START_R + MAX_TRAN)
If WS_M.Cells(M, (START_C + 1)) = "" Then Exit For
Next M
M = M - 1
For n = START_R To M
WS_M.Cells(n, START_C).Copy
Sheets(CStr(WS_M.Cells(n, START_C))).Cells(n, START_C).Paste
Next n
End Sub
答案 0 :(得分:1)
请改为尝试:
For n = START_R To M
WS_M.Cells(n, START_C).Copy
Sheets(CStr(WS_M.Cells(n, START_C))).Cells(n, START_C).Select
ActiveSheet.Paste
Next n
如果您查看Excel Range
对象的documentation,则Paste
不在成员列表中。但是有PasteSpecial
。我没有尝试过,但这也可能有用。
答案 1 :(得分:1)
要在Excel中复制一系列单元格,使用Copy
方法会使VBA
程序更容易崩溃/或提供不可预测的结果。
假设在您的程序中从system clipboard
复制数据并且用户正在尝试store some other to system clipboard!
并非总是如此,但是从用户那里可能会发生这种错误。
所以我总是喜欢使用更好的方法,例如Swaping the range on the fly
。这是一个小型演示:
Public Sub Sample_Copy_without_Clipboard()
Dim dRange As Range, iRange As Range
Set iRange = Range("A1:B3")
Set dRange = Range("D1:E3")
dRange.Value = iRange.Value
End Sub