首页 文章

Excel VBA:从数据复制到工作表

提问于
浏览
-2

我冒这个问题失去声誉的风险,但我需要程序员而不是高级用户 . 我可以用PHP编写,但Excel VBA不在我的联盟中,我需要快速解决方案 .

我得到了一个包含2张“表格”和“数据”的Excel文件 . 在第一张纸上是一个“保存”按钮 . 当用户单击此按钮时,我需要执行以下操作:

  • 复制工作表"Form"中不同列的数据(在本例中为C2和C4)

  • 将数据粘贴到新行的工作表"Data"中,两列水平

  • 清除工作表中的列"Form"

代码是:

Private Sub SaveButton_Click()

    Application.ScreenUpdating = False

    Dim r As Range
    Set r = Sheets("Form").Range("C2,C4")
    For Each cell In r
        If IsEmpty(cell) Then
            MsgBox ("Error - all boxes must be filled in!")
            Cancel = True
            Exit Sub
            Exit For
        End If
    Next

    Dim NextRow As Range
    Set NextRow = Sheets("Data").Range("A2:L2").End(xlUp).Offset(1, 0)
    Set NextRow = Sheets("Data").Range("A" & Rows.Count).End(xlUp).Offset(1,0)
    Sheets("Form").Range("C2,C4").Copy
    NextRow.PasteSpecial (xlValues)

    MsgBox ("Data added successfully!")

    Sheets("Form").Range("C2,C4").ClearContents

    Application.CutCopyMode = False
    Application.ScreenUpdating = True
end sub

我已经编写了一个脚本,但这些列是垂直复制的,而不是水平复制 .

2 回答

  • 2

    您希望表单单元格C2和C4最终位于数据表中的1个空行中

    Private Sub SaveButton_Click()
        Worksheets("Data").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) = Worksheets("Form").Range("C2")
        Worksheets("Data").Cells(Rows.Count, "A").End(xlUp).Offset(0, 1) = Worksheets("Form").Range("C4")
    End Sub
    
  • 0

    好 . 浏览Stackoverflow 3个小时后,我终于得到了我所需要的一切 . 我希望这会有助于其他人 .

    整点是“Transpose:= True” .

    Dim NextRow As Range
    'find next clear row, set it as target'
    Set NextRow = Sheets("Data").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
    
    'copy the cell values from range'
    Sheets("Form").Range("C2,C4").Copy
    
    'paste values as horizontal line into target'
    NextRow.PasteSpecial (xlValues), Transpose:=True
    

相关问题