从不同工作表上的已定义名称复制/粘贴的子

时间:2018-09-10 08:41:17

标签: excel vba excel-vba

我遇到以下问题:

我有两个(动态)列表,分别名为MarketsEquitiesMarketsBonds,分别在工作表SummaryEquitiesSummaryBonds上找到。

然后我有一个名为PnL的工作表,我想在其中创建先前工作表中列出的市场列表。这些市场都应列在C列中,并且在股票列表的末尾与债券列表的开始之间应留一个空格,我将在B列Bonds中进行写。

这是到目前为止我得到的:

Sub InsertEquitiesBonds()
    Dim ws As Worksheet, r1 As Range, r2 As Range
    Set ws = Worksheets("PnL")
    ws.Activate
    Set Range("B3").Value = "Equities"
    Set r1 = Worksheets("SummaryEquities").Range("MarketsEquities")
    r1.Copy Range("C4")

    'I want to then insert "Bonds" in Column B at the end of the listing of equities and then list all bonds in column C below that. 

    Set r2 = Worksheets("SummaryBonds").Range("MarketsBonds")
End Sub

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

  1. 我建议为每一个 Range()Cells()语句(例如ws.Range("C4"))指定工作表,否则Excel会猜测您的意思是哪个工作表。

  2. 您可以使用以下命令确定列中最后使用的单元格

    ws.Cells(ws.Rows.Count, "B").End(xlUp) 'last used cell in column B
    

    ,您可以使用.Offset(row, column)从该单元格相对移动行/列。

所以我建议以下内容:

Public Sub InsertEquitiesBonds()
    Dim ws As Worksheet
    Set ws = Worksheets("PnL")

    ws.Range("B3").Value = "Equities"
    Worksheets("SummaryEquities").Range("MarketsEquities").Copy ws.Range("C4")


    Dim LastUsedCell As Range
    Set LastUsedCell = ws.Cells(ws.Rows.Count, "B").End(xlUp) 'last used cell in column B

    LastUsedCell.Offset(2, 0).Value = "Bonds" 'move 2 cells down and write Bonds
    Worksheets("SummaryBonds").Range("MarketsBonds").Copy LastUsedCell.Offset(3, 1) 'copy MarketsBonds 3 cells down and one cell right of the last used cell
End Sub