0

私はかなりばかげた問題を抱えています。セル A1:A2 を 1 つのワークシート (namedFP) から別のワークシート (Log) にコピーするマクロ (ボタンにリンク) があります。マクロ ボタンを押すたびに、これら 2 つのセルをログ シートにコピーするつもりです。私が現在直面している問題は、ボタンを複数回使用すると、次の使用可能な行を使用してセルを貼り付けるのではなく、これらのセルが互いにコピーされることです。

これは私が今持っているもので、「Rowcount+1」を「RowCount+2」に変更しようとしましたが、うまくいきませんでした。どんな助けでも大歓迎です。

DHRSheet.Select
 Range("A1:A2").Select
 Selection.Copy

 LogSheet.Select
 RowCount = LogSheet.UsedRange.Rows.Count
 Dim r As Integer
 r = RowCount + 1
 Dim infocell As Range
 Set infocell = Cells(r, 1)
 infocell.Select
 ActiveSheet.Paste
 infocell.Value = DHRSheet.Name & "$" & infocell.Value

 DHRSheet.Select
 ActiveWorkbook.Save
4

2 に答える 2

0

これはあなたがしようとしていることですか?

Sub Sample()
    Dim LogSheet As Worksheet, DHRSheet As Worksheet
    Dim lrow As Long

    '~~> Change this as applicable
    Set LogSheet = Sheets("Sheet1")
    Set DHRSheet = Sheets("Sheet2")

    With LogSheet
        lrow = LogSheet.Range("A" & .Rows.Count).End(xlUp).Row + 1

        DHRSheet.Range("A1:A2").Copy .Range("A" & lrow)
    End With
End Sub
于 2012-07-09T14:36:47.273 に答える
0

これは私が使用する非常に信頼性が高く、常にシートの最後の行を必ず返す関数です: (単純な使用には過剰かもしれませんが、常にお勧めします)

Public Function LastRowOfSheet(ByVal TestSheetNumber As Variant)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'   Input: Sheet index # or Sheet name
'   Output: Last row of sheet.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Dim intNumberOfRowsInWorksheet As Long

    intNumberOfRowsInWorksheet = Sheets(TestSheetNumber).UsedRange.Rows.Count
    intNumberOfRowsInWorksheet = intNumberOfRowsInWorksheet +     Sheets(TestSheetNumber).UsedRange.Row - 1

    LastRowOfSheet = intNumberOfRowsInWorksheet
End Function

上記のコードをクリーンアップして、次のようなものを使用します。

Sub Move2RowsToEnd()

    Dim iNextRowOfOutput As Long
    Dim iRowNumber As Long
    '- use the function to find the last row of the output sheet. we'll be pasting to the first row after.
    iNextRowOfOutput = (LastRowOfSheet("Log") + 1)

    '- you can adjust this for loop to loop through additional cells if you need to paste more than 2 rows in the future.
    For iRowNumber = 1 To 2
        '- for each row of input (2 total) set the value of the output sheet equal to it.
        Sheets("Log").Range("A" & iNextRowOfOutput).Value = Sheets("namedFP").Range("A"     & iRowNumber).Value
        iNextRowOfOutput = iNextRowOfOutput + 1
    Next iRowNumber

    '- not sure which of these you want to save (one or both)
    Sheets("namedFP").Save
    Sheets("Log").Save

End Sub

サブルーチンの上または下に関数を貼り付けるだけで、「Move2RowsToEnd」コードに関して問題や質問がある場合はお知らせください。

于 2012-07-09T13:52:27.903 に答える