0

私に問題を引き起こしている行は ""Sheets(CStr(WS_M.Cells(n, START_C))).Cells(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
4

2 に答える 2

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

注: このメソッドは、フォーマットされていないテキスト データでのみ機能します。そうでない場合は、Timの提案またはDanMの回答を使用してください。

于 2012-07-31T05:33:32.250 に答える
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オブジェクトのドキュメントを見ると、メンバーのリストにありません。ただし、あります。私はそれを試していませんが、それもうまくいくかもしれません。RangePastePasteSpecial

于 2012-07-30T22:40:13.063 に答える