Vba 在将数据从一个excel工作表传输到另一个excel工作表时需要转换行

Vba 在将数据从一个excel工作表传输到另一个excel工作表时需要转换行,vba,excel,Vba,Excel,我原来的问题被贴出来了 基本上,我需要一些帮助,根据第一张表中的值将数据从一张表传输到另一张表。我使用的是用户提供的经过修改的代码 我在IF语句中添加了一个针对另一行的额外检查,我的代码中有: Option Explicit Dim MyWorkbook As Workbook Dim MyWorksheet As Worksheet Dim MyOutputWorksheet As Worksheet 所以我只需要输出某些列。我还需要将它们导入到第二张工作表,即合同工作表上的某些行和列中。主

我原来的问题被贴出来了

基本上,我需要一些帮助,根据第一张表中的值将数据从一张表传输到另一张表。我使用的是用户提供的经过修改的代码

我在
IF
语句中添加了一个针对另一行的额外检查,我的代码中有:

Option Explicit
Dim MyWorkbook As Workbook
Dim MyWorksheet As Worksheet
Dim MyOutputWorksheet As Worksheet
所以我只需要输出某些列。我还需要将它们导入到第二张工作表,即合同工作表上的某些行和列中。主工作表上的A列转到合同工作表第17行开始的A列。B至B、E至D、F至E,均从合同表第17行开始。 合同表上的第17-42行将包含数据

Sub PullData()
    Set MyWorkbook = Workbooks(ActiveWorkbook.Name)
    Set MyWorksheet = MyWorkbook.Sheets("MAIN")
    Set MyOutputWorksheet = MyWorkbook.Sheets("CONTRACT")

    Dim myValue As Long
    Dim RowPointer As Long

    For RowPointer = 6 To MyWorksheet.Cells(Rows.Count, "B").End(xlUp).Row
        If MyWorksheet.Range("A" & RowPointer).V  alue > 0 And 
        MyWorksheet.Range("A" & RowPointer).Value <> "" 
        MyWorksheet.Range("F" & RowPointer).Value > 0 And 
        MyWorksheet.Range("F" & RowPointer).Value <> ""Then
            If MyOutputWorksheet.Cells(Rows.Count, "B").End(xlUp).Row > 15 
            Then
                Exit Sub
            End If
            MyWorksheet.Range(("A" & RowPointer) & ":C" & RowPointer).Copy 
            Destination:=MyOutputWorksheet.Range("A" & 
            MyOutputWorksheet.Cells(Rows.Count, "B").End(xlUp).Row + 1)
        End If
    Next RowPointer
End Sub
Sub-PullData()
设置MyWorkbook=工作簿(ActiveWorkbook.Name)
设置MyWorksheet=MyWorkbook.Sheets(“主”)
设置MyOutputWorksheet=MyWorkbook.Sheets(“合同”)
将我的值变长
暗淡的指针和长的指针一样
对于RowPointer=6,指向MyWorksheet.Cells(Rows.Count,“B”).End(xlUp).Row
如果MyWorksheet.Range(“A”&RowPointer).V值>0,并且
MyWorksheet.Range(“A”&行指针).Value“”
MyWorksheet.Range(“F”和RowPointer).Value>0和
MyWorksheet.Range(“F”和RowPointer).Value“”然后
如果MyOutputWorksheet.Cells(Rows.Count,“B”).End(xlUp).Row>15
然后
出口接头
如果结束
MyWorksheet.Range((“A”和“:C”和“行指针”)。复制
目的地:=MyOutputWorksheet.Range(“A”&
MyOutputWorksheet.Cells(Rows.Count,“B”).End(xlUp).Row+1)
如果结束
下一行指针
端接头
尝试一下:

Sub PullData()

Dim wRow As Long, _
    RowPointer As Long, _
    MyWorkbook As Workbook, _
    Ws As Worksheet, _
    OutWs As Worksheet

Set MyWorkbook = Workbooks(ActiveWorkbook.Name)
Set Ws = MyWorkbook.Sheets("MAIN")
Set OutWs = MyWorkbook.Sheets("CONTRACT")

With Ws
    For RowPointer = 6 To .Cells(.Rows.Count, "B").End(xlUp).Row
        If .Range("A" & RowPointer).Value > 0 And _
                .Range("A" & RowPointer).Value <> "" And _
                .Range("F" & RowPointer).Value > 0 And _
                .Range("F" & RowPointer).Value <> "" Then
            'This line would get you out of the loop after the first copy because _
            'You first paste on line 17 and then the below left part will be equal to 18
            'If OutWs.Cells(OutWs.Rows.Count, "B").End(xlUp).Row > 15 Then Exit Sub


            wRow = OutWs.Rows(OutWs.Rows.Count).End(xlUp).Row + 1
            'Always start copy after (or at) line 17
            If wRow <= 17 Then wRow = 17
            'More efficient way to copy data between ranges
            OutWs.Range("A" & wRow).Value = Ws.Range("A" & RowPointer)
            OutWs.Range("B" & wRow).Value = Ws.Range("B" & RowPointer)
            OutWs.Range("D" & wRow).Value = Ws.Range("E" & RowPointer)
            OutWs.Range("E" & wRow).Value = Ws.Range("F" & RowPointer)
        End If
    Next RowPointer
End With

Set MyWorkbook = Nothing
Set Ws = Nothing
Set OutWs = Nothing

End Sub
Sub-PullData()
暗苦笑了很久_
只要_
我的工作簿作为工作簿_
Ws-As工作表_
作为工作表输出
设置MyWorkbook=工作簿(ActiveWorkbook.Name)
设置Ws=MyWorkbook.Sheets(“主”)
Set OutWs=MyWorkbook.Sheets(“合同”)
与Ws
对于RowPointer=6的.Cells(.Rows.Count,“B”).End(xlUp).Row
If.Range(“A”&行指针).Value>0和_
.Range(“A”&行指针).Value“”和_
.Range(“F”和行指针)。值>0和_
.Range(“F”和RowPointer).Value“”然后
'这一行将使您在第一次复制后退出循环,因为_
'首先粘贴到第17行,然后左下方的部分将等于18
'如果OUTPS.单元格(OUTPS.Rows.Count,“B”).结束(xlUp).Row>15,则退出Sub
wRow=OutWs.Rows(OutWs.Rows.Count)。End(xlUp)。Row+1
'始终在第17行之后(或在第17行处)开始复制

If wRow FYI*在您的If语句中有轻微的间距问题