繁体   English   中英

将特定内容从一个excel工作簿复制到另一工作簿

[英]copy specific content from one excel workbook to another workbook

我是VB的新手,正在开发一个VB脚本,该脚本将使用输入的excel文件并将其转换为另一个excel文件(新的Excel文件)。

我创建了一个宏文件,该文件将接收并输入文件,并创建一个与原始文件完全相同的新excel文件,但是具有新名称并位于给定位置。

转换工具宏文件

将J3转换为阶段1按钮会将所选的excel工作簿转换为具有相同内容的新工作簿。

到目前为止,这是我的代码。 抱歉,如果不遵循编码标准,因为我是VB的新手。

Sub convertJ3ToPhase1()
j3ExcelSheet = Application.GetOpenFilename(FileFilter:="Excel Workbooks (*.xls*),*.xls*", Title:="Open Database File")
Dim SourceFile, DestinationFile
SourceFile = j3ExcelSheet
DestinationFile = "C:\Test\ABC.xlsx" ' Define target file name.
FileCopy SourceFile, DestinationFile ' Copy source to target.
End Sub

ABC.xlsx包含与原始excel工作簿相同的数据。

但是我的要求是不同的。

这是我的原始Excel文件

原始Excel文件

现在我想要的是从第一个单元格到第9个单元格(即从站点到所有部分传输),将内容复制到新创建的工作簿的第一个表(名为页眉表),而对于第10行之后的其他数据(即表数据) )我只希望新工作簿中的特定列(即,我希望存在10/19列),而工作簿的单独工作表(详细信息表)中也是如此。

这是我如何在新工作簿中获取数据的快照。

新的工作簿标题表

在上图中,我想要“标题”选项卡中的前9行数据

表Detils表格

在第二张(详细信息表)中,我只希望原始工作簿中的特定列。

因为我对VB脚本的语法和方法不了解太多,所以有人可以帮助我编写VB脚本吗?

这样的事情怎么样,您将不得不在代码中更改一些变量以匹配工作表的名称,等等:

Sub BrowseForJ3File()
Dim x As Workbook
    j3ExcelSheet = Application.GetOpenFilename(FileFilter:="Excel Workbooks (*.xls*),*.xls*", Title:="Open Excel File")
    If fileToOpen <> False Then
        MsgBox "Open " & fileToOpen
    End If

    ActiveSheet.Range("H9") = j3ExcelSheet

    Pos = InStrRev(j3ExcelSheet, "\")
    Filename = Mid(j3ExcelSheet, Pos + 1)
    'above get the filename

    Pos = InStrRev(Filename, ".")
    Extension = Mid(Filename, Pos + 1)
    'above get the extension

    Savepath = "C:\Users\Me\Desktop\"
    'get the path to save the new file

    NewFilename = "New Report"
    'above new filename

    Application.DisplayAlerts = False
    SheetName = "Sheet1" 'change this to the original Sheet Name

    Set x = Workbooks.Open(j3ExcelSheet)
    With x
        x.Sheets(SheetName).Range("A1:B9").Copy 'copy range to paste headers
        x.Sheets.Add().Name = "Header" 'add sheet Header
        x.Sheets("Header").Paste 'paste the copied range
        x.Sheets.Add().Name = "Detail" 'add details sheet
        LastRow = x.Sheets(SheetName).Cells(x.Sheets(SheetName).Rows.Count, "A").End(xlUp).Row 'get the last row with data from original sheet
        x.Sheets(SheetName).Range("A11:Q" & LastRow).Copy 'copy range
        x.Sheets("Detail").Paste 'paste into Detail
        x.Sheets("Detail").Range("D:D,F:N").Select 'select columns to delete
        Selection.Delete Shift:=xlToLeft
        x.Sheets(SheetName).Delete 'delete original Sheet

        .SaveAs Savepath & NewFilename & "." & Extension 'save with new name
        .Close
    End With
    Application.DisplayAlerts = True
 End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM