0

VBA コードをゼロから作成することについては何も知りません。自分のアクションを記録することによってのみ作成します。しかし、記録機能はレポートで私が望んでいたことを行うことができないようです。「メイン フォーム」シートから「データベース」シートに特定のデータをコピー アンド ペーストする方法を教えてください。

「メイン フォーム」シート (e3:e7、h3:h7、k3:k7、i12:i16、i18:i21、i23) からデータをコピーして、「データベース」シート (a2:y2) に貼り付けたいと思います。 「メインフォーム」シートから「保存」ボタンをクリックすると。保存ボタンをクリックするたびにこのアクションを繰り返す必要があり、新しいデータセットは「データベース」シートの次の空の行に移動する必要があります。

誰かがこれで私を助けてくれることを願っています。残念ながら、ここにファイルを添付する方法がわかりません。

ありがとうございました。

4

1 に答える 1

0

.Copyこのメソッドは、連続していない範囲では使用できません。

ただし、ほとんどの場合、人々は何かを「コピー」したいのですが、本当に気にするのは値を転送することだけです。これは、コピー/貼り付け手順なしで実行できます (書式設定などもコピーする必要がある場合、これは次のように同様に実行できます)。下)。

これを通常のコード モジュールではなく Workbook コード モジュールに入れます。Workbook コード モジュールに入れる必要があります。これにより、ワークブックでTransferValuesa を実行するたびにサブルーチンが呼び出されます。Save

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Application.Run "TransferValues"

End Sub

これを通常のコードモジュールに入れます。

改訂

範囲が連続していないため、いくつかの変更を加える必要がありました。範囲を反復処理してから.Areas、それぞれのセル内の個々のセルを反復処理する必要があります。

Private Sub TransferValues()

Dim wsMain As Worksheet: Set wsMain = Sheets("Main Form")
Dim wsData As Worksheet: Set wsData = Sheets("Database")
Dim rngToCopy As Range: Set rngToCopy = wsMain.Range("e3:e7,h3:h7,k3:k7,i12:i16,i18:i21,i23")
Dim c As Long
Dim ar As Range
Dim cl As Range

Dim lastRow As Long

Dim rngDestination As Range

'Get the last row in Database sheet:
lastRow = Application.WorksheetFunction.CountA(wsData.Range("A:A"))
Set rngDestination = wsData.Cells(lastRow + 1, 1).Resize(1, 25).Offset(1, 0)

For Each ar In rngToCopy.Areas
    For Each cl In ar
        c = c + 1
        'I used this next line for testing:
        '  rngDestination.Cells(c).Value = cl.Address
        rngDestination.Cells(c).Value = cl.Value
    Next
Next


End Sub
于 2013-08-08T14:29:44.680 に答える