1

私はマクロを持っているので、sheet1の行を強調表示すると、マクロはこの行からすべての情報を取得し、これをsheet2に単独で表示します。sheet1の別の行を強調表示すると、sheet2の情報が変更され、その行の情報が表示されます。

私の問題は、sheet2に表示されている情報を変更しても、sheet1の情報が変更されないことです。この機能を追加する方法はありますか?

現在、次のコードがあります。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim myList
If Target.Address <> Target.EntireRow.Address Then Exit Sub
If Target.Rows.Count > 1 Then Exit Sub
myList = [{"B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","B11","B12","B13","B14","B15"}] '<- adjust to your need
With Target.EntireRow
    For i = 1 To UBound(myList)
        Sheets("sheet2").Range(myList(i)).Value = .Cells(i).Value
    Next
End With
End Sub

どんな助けでも素晴らしいでしょう!:)

4

2 に答える 2

0

sheet1 行を sheet2 にコピーした後、値の元の元の行 # を記録することもできます。次に、シート 2 の値をシート 1 の値と比較する追加のマクロを追加できます。その後、すべての変更を移行できます。

考えられる基本的な流れ:

  • sheet1 行を sheet2 にコピー (現在のマクロ)
  • シート 1 の行番号をシート 2 にコピー (つまり、1 行下)
  • シート 2 に変更を加える
  • シート 2 の行をシート 1 の行にコピーします (シート 2 に保存されている行番号を使用します) -> これは、シート 1 に変更が加えられないことを前提としています。
于 2011-03-18T13:13:15.473 に答える
0

現在、Worksheet_SelectionChangeイベント マクロを使用して、1 行全体が選択されたことを認識しています。B1:B15 範囲の値がいつ変更されたかを認識し、その変更を Sheet1 に戻すには、Sheet2のWorksheet_Changeイベント マクロが必要です。

Worksheet_Change は値の変更時にトリガーされるため、Application.EnableEvents プロパティを無効にして、Sheet1 の Worksheet_SelectionChange サブから値を書き込んだときにトリガーされないようにする必要があります。

いくつかのパブリック変数が必要になります。1 つは変更を戻す位置を記憶するためのもので、もう 1 つは Sheet2 のターゲット セルを見つけるためのものです。これらは、モジュール コード シートでのみ公開できます。

Book1 - Module1 (コード)

Option Explicit

Public Const sRNG As String = "B1:B15"
Public rRNG As Range

元の Worksheet_SelectionChange にいくつかの小さな変更を加え、イベント処理の無効化を追加しました。

Book1 - Sheet1 (コード)

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count = Columns.Count And Target.Rows.Count = 1 And _
      CBool(Application.CountA(Target)) Then   '<~~ one complete non-blank row 
        On Error GoTo bm_Safe_Exit
        Application.EnableEvents = False
        With Sheet2.Range(sRNG)
            Set rRNG = Target.Cells(1, 1).Resize(.Columns.Count, .Rows.Count)
            .Cells = Application.Transpose(rRNG.Value)
        End With
    End If

bm_Safe_Exit:
    Application.EnableEvents = True
End Sub

Worksheet .CodeName プロパティを使用してSheet2を識別しました。これは、ワークシートの名前を慣習的に変更しても変更されないためです。

値が変更された後に値を返す行を特定する方法については、少し不明確です。Module1 で宣言された public range-type 変数を使用して、シート 1 からシート 2 に値が転送された最後の場所を記録しました。Sheet2 を変更すると、最後に記録された場所に戻ります。

Book1 - Sheet2 (コード)

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range(sRNG)) Is Nothing Then
        Debug.Print rRNG.Address(0, 0, external:=True)
        On Error GoTo bm_Safe_Exit
        Application.EnableEvents = False
        rRNG = Application.Transpose(Range(sRNG).Value)
    End If

bm_Safe_Exit:
    Application.EnableEvents = True
End Sub

「記憶された」場所はメモリ内にのみあることに注意してください。ワークブックを閉じて再度開くと、実質的に「ゼロ」になります。Sheet1 から新たに値をロードしない限り、Sheet2 を変更しないでください。

于 2016-02-15T02:04:59.937 に答える