使用VBA将一行从一张纸复制到另一张纸

法里亚·玛丽亚姆(Faaria Mariam)

我有两张包含员工记录的表。Sheet1包含事件日期,卡号,员工姓名,部门ID,员工编号,进出时间,总工作时间,状态,ConcatinatedColumn和备注(通过sheet2中的vlookup复制)

Sheet2包含ConcatinatedColumn,事件日期,员工编号,姓名,备注。

如果sheet2的备注列中的数据为“ Sick Off”,则应将该行插入到sheet1中,而不影响以前的记录。

我已经为它编写了代码,但是它不起作用。

如果有人可以帮助我,将不胜感激!

提前致谢 !

我的密码:

Sub SickOff()

Dim objWorksheet As Sheet2
Dim rngBurnDown As Range
Dim rngCell As Range
Dim strPasteToSheet As String

'Used for the new worksheet we are pasting into
Dim objNewSheet As Sheet1

Dim rngNextAvailbleRow As Range

'Define the worksheet with our data
Set objWorksheet = ThisWorkbook.Worksheets("Sheet2")


'Dynamically define the range to the last cell.
'This doesn't include and error handling e.g. null cells
'If we are not starting in A1, then change as appropriate
Set rngBurnDown = objWorksheet.Range("G2:G" & objWorksheet.Cells(Rows.Count,       "G").End(xlUp).Row)

'Now loop through all the cells in the range
For Each rngCell In rngBurnDown.Cells

objWorksheet.Select

If rngCell.Value = "Sick Off" Then
'select the entire row
rngCell.EntireRow.Select

'copy the selection
Selection.Copy

'Now identify and select the new sheet to paste into
Set objNewSheet = ThisWorkbook.Worksheets("Sheet1" & rngCell.Value)
objNewSheet.Select

'Looking at your initial question, I believe you are trying to find the next     available row
Set rngNextAvailbleRow = objNewSheet.Range("A1:A" & objNewSheet.Cells(Rows.Count, "A").End(xlUp).Row)


Range("A" & rngNextAvailbleRow.Rows.Count + 1).Select
ActiveSheet.Paste
End If

Next rngCell

objWorksheet.Select
objWorksheet.Cells(1, 1).Select

'Can do some basic error handing here

'kill all objects
If IsObject(objWorksheet) Then Set objWorksheet = Nothing
If IsObject(rngBurnDown) Then Set rngBurnDown = Nothing
If IsObject(rngCell) Then Set rngCell = Nothing
If IsObject(objNewSheet) Then Set objNewSheet = Nothing
If IsObject(rngNextAvailbleRow) Then Set rngNextAvailbleRow = Nothing

End Sub
悉达思·劳特

假设您有Sheet2如下所示的数据

在此处输入图片说明

假设数据的结尾Sheet1看起来像这样

在此处输入图片说明

逻辑:

我们正在使用自动筛选来获得在相关范围内Sheet2,其匹配Sick OffCol G一旦得到,就将数据复制到中的最后一行Sheet1复制数据后,我们只需对数据进行混洗以匹配列标题即可。正如您所提到的,标题不会改变,因此我们可以自由地对列名称进行硬编码,以便对数据进行混排。

代码:

将此代码粘贴到模块中

Option Explicit

Sub Sample()
    Dim wsI As Worksheet, wsO As Worksheet
    Dim lRow As Long, wsOlRow As Long, OutputRow As Long
    Dim copyfrom As Range

    Set wsI = ThisWorkbook.Sheets("Sheet1")
    Set wsO = ThisWorkbook.Sheets("Sheet2")

    '~~> This is the row where the data will be written
    OutputRow = wsI.Range("A" & wsI.Rows.Count).End(xlUp).Row + 1

    With wsO
        wsOlRow = .Range("G" & .Rows.Count).End(xlUp).Row

        '~~> Remove any filters
        .AutoFilterMode = False

        '~~> Filter G on "Sick Off"
        With .Range("G1:G" & wsOlRow)
            .AutoFilter Field:=1, Criteria1:="=Sick Off"
            Set copyfrom = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
        End With

        '~~> Remove any filters
        .AutoFilterMode = False
    End With

    If Not copyfrom Is Nothing Then
        copyfrom.Copy wsI.Rows(OutputRow)

        '~~> Shuffle data
        With wsI
            lRow = .Range("A" & .Rows.Count).End(xlUp).Row

            .Range("A" & OutputRow & ":A" & lRow).Delete Shift:=xlToLeft
            .Range("F" & OutputRow & ":F" & lRow).Copy .Range("K" & OutputRow)
            .Range("F" & OutputRow & ":F" & lRow).ClearContents
            .Range("B" & OutputRow & ":B" & lRow).Copy .Range("E" & OutputRow)
            .Range("B" & OutputRow & ":B" & lRow).ClearContents
        End With
    End If
End Sub

输出:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

VBA - 将数据从一张纸复制到另一张纸

将Excel行从一张纸复制到另一张纸

将行从一张纸复制到另一张纸

从一张纸复制到另一张纸并复制到下一行

无法使用VBA将整行从一张纸复制到另一张纸

VBA,使用标题名称将值从一张纸复制到另一张纸

使用 vba 以相反的顺序将数据从一张纸复制到另一张纸

使用VBA将数据从一张纸复制到另一张纸时出错

使用 vba 宏代码将特定列从一张纸复制到另一张纸

使用VBA将值从一张纸复制到另一张纸

仅将值从一张纸复制到另一张纸

将数据从一张纸复制到另一张纸的问题

需要VBA宏-循环将数据从一张纸复制到另一张纸

VBA将已过滤的字段从一张纸复制到另一张纸而不激活

将行(不是整行)从一张纸复制到另一张纸

Excel VBA-从一张纸复制到另一张纸>仅复制一行

根据多个条件在 VBA 中将随机唯一行从一张纸复制到另一张纸

如果该行包含数字列表中的任何数字,如何将一行从一张纸复制到另一张纸?

将列从一张纸复制到另一张工作簿

将文本从一张纸复制到另一张纸,具体取决于复制的来源

VBA:从一张纸到另一张纸的多次复制和粘贴

将范围从一张纸复制到另一张纸并粘贴多次,直到循环到下一张纸为止

如果满足三个不同条件,如何使用VBA将数据从一张纸复制到另一张纸?

将值从一张纸复制到另一张纸时出错

Excel宏将范围从一张纸复制到另一张纸

Excel根据条件将数据从一张纸复制到另一张纸

根据名称和日期将数据从一张纸复制到另一张纸

如果符合条件(相对行),则将数据从一张纸复制到另一张纸

仅当第一个缺少 id 时,才将行从一张纸复制到另一张纸