将动态范围的单元格从非活动工作簿复制到粘贴到指定位置的活动工作簿

时间:2017-06-01 19:14:26

标签: excel vba excel-vba

我是vba的新手,在stackoverflow指导的帮助下,我正在学习。 我试图复制四个不同范围的单元格(本质上是动态的,但都有相同的行号,但是列不同)(源书应该打开,用户可以按特定顺序选择范围),这样就可以了以相同的顺序粘贴到目标工作簿。 我无法附加示例源工作簿(将来的名称将更改)和目标工作簿,因为我是新手。 源书包含各种col like,slno,acct no,name,amt,ifsc,remarks,arrears等,并且行的数量可能正在变化。 目标书包含,只有四个列,例如,amt,acct no,name和ifsc在同一顺序中。

从源书中,我需要将acct,ifsc,name和amt col数据粘贴到目标工作簿中,即,amt,acct no,name和ifsc。

我使用这个论坛尝试了以下代码......

但是,它只将col a复制到g而不是动态。我希望,它可以询问所有四个范围的一些用户输入。

感谢..

Private Sub CommandButton1_Click()

    Dim excel As excel.Application
    Dim wb As excel.Workbook
    Dim sht As excel.Worksheet
    Dim f As Object

    Set f = Application.FileDialog(3)
    f.AllowMultiSelect = False
    f.Show

    Set excel = CreateObject("excel.Application")
    Set wb = excel.Workbooks.Open(f.SelectedItems(1))
    Set sht = wb.Worksheets("Sheet1")

    sht.Activate

    sht.Columns("A:G").Copy
    Range("A1").PasteSpecial Paste:=xlPasteValues

    wb.Close

End Sub

1 个答案:

答案 0 :(得分:0)

如果您的代码有效,则可以通过在Range("A1").PasteSpecial Paste:=xlPasteValueswb.close之间添加此代码来删除不需要的列。

    Dim cel As Range

    With ThisWorkbook.Sheets(1)
        For Each cel In Intersect(.UsedRange, .[1:1])
            If cel.Value2 = "" Or InStr(1, "amtacct nonameifsc", cel.Value2) = 0 Then
                cel.EntireColumn.Delete
            End If
        Next
    End With