将工作表复制到VBA中的另一个工作簿不会复制

时间:2017-05-02 12:08:49

标签: excel vba excel-vba copy-paste

我正在尝试将特定工作表从一个工作簿复制到另一个工作簿,但似乎它不会复制工作表的内容并返回一个空工作表。

第二个问题是,当我复制工作表时,我使用Sheet.Count在我的工作簿中创建另一个工作表,我粘贴新工作表但它无法正常工作,因为它不会创建一个新工作表而是我的最后一个并重命名然后将其删除。

可能出现什么问题,如何添加错误处理代码?

Sheets(filesheet).COPY After:=ThisWorkbook.Sheets(Sheets.Count)

'Application.AskToUpdateLinks = False
wb.Close savechanges:=False

'naming of the copied sheet
ActiveWorkbook.Sheets(Sheets.Count).Name = "Imported data"

'copy the material as values to sourcing template sheet
Sheets("Imported data").Cells.COPY
Sheets("Sourcing template").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

'delete the imported copied sheet (named ranges etc, to avoid file size growing too much)
Sheets("Imported data").Delete

2 个答案:

答案 0 :(得分:0)

这里有很多问题,但我们试图解释一些......

  1. 不要复制和粘贴。你改为thisCell.Value = ThatCell.Value。
  2. 引用Active(无论如何)最终会导致糟糕的结果。键入更多内容似乎是一个痛点,但明确地将其拼写出来,无论您打算参考什么工作簿/表单,都将解决将来的许多挫败感。
  3. 我很有可能会像这样接近这个。这很容易修改,以完成工作簿中的所有工作表。

    Dim sheetCopy as variant
    dim sheet as Worksheet
    dim rowC as long
    dim colC as long
    
    set sheet = ThisWorkBook.Sheets("Imported Data")
    
    rowC = sheet.UsedRange.Rows.Count
    colC = sheet.UsedRange.Columns.Count
    sheetCopy = sheet.UsedRange
    
    ThisWorkBook.Sheets("Sourcing template").Range(ThisWorkBook.Sheets("Sourcing template").Cells(1,1), ThisWorkBook.Sheets("Sourcing template").Cells(rowC,colC).Value2 = sheetCopy
    
    sheet.Delete
    

答案 1 :(得分:0)

坦率地说,我不完全理解你的问题。

但根据我的理解,这段代码适合我。 filesheet中的Sheets(filesheet)对我没有意义,因此我将其更改为"Sheet1"。您可以将其更改为您的确切工作表名称。

Sub test()


Sheets("Sheet1").Copy After:=ThisWorkbook.Sheets(Sheets.Count)

ActiveWorkbook.Sheets(Sheets.Count).Name = "Imported Data"

Sheets("Imported data").Cells.Copy
Sheets("Sourcing template").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

Sheets("Imported data").Delete

End Sub

代码将Sheet1的所有内容复制到新工作表,并将新工作表名称更改为“导入的数据”。

然后,复制“导入的数据”中的所有单元格,并仅将值粘贴到“采购模板”。因此,只有值将显示在“采购模板”中(任何图表或表格都将被忽略)。

如果您希望粘贴包括格式在内的所有内容,则应使用Activesheets.Paste代替。