Excel VBA到另一个工作簿

我有一个有3个选项卡(报告,MI和CSR数据转储)的Excel文档。

当报告标签完成并按下“提交”button时。 当前的VBA完全写入数据转储表。

不过,我想将数据转储到一个单独的工作簿。 我试过了,失败了。 位置: – K:\呼叫质量\质量MI \质量MI.XLSM这将是相同的工作表名称“数据转储”

我目前的VBA完美的作品是

Private Sub generate_report() Dim i As Long Dim fullcount As Long Dim ws As Worksheet Application.ScreenUpdating = False Set ws = Worksheets("CSR Data Dump") With ws fullcount = Excel.WorksheetFunction.CountA(.Range("A:A")) i = fullcount + 1 Range("XER2").Select Selection.Copy Sheets("CSR Data dump").Select Range("a" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("XER5").Select Selection.Copy Sheets("CSR Data dump").Select Range("b" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("XER3:xer4").Select Selection.Copy Sheets("CSR Data dump").Select Range("c" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("XER6:xer7").Select Selection.Copy Sheets("CSR Data dump").Select Range("e" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("d11:d17").Select Selection.Copy Sheets("CSR Data dump").Select Range("g" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("d19").Select Selection.Copy Sheets("CSR Data dump").Select Range("o" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("e19:e22").Select Selection.Copy Sheets("CSR Data dump").Select Range("s" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("d23").Select Selection.Copy Sheets("CSR Data dump").Select Range("w" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("e23:e28").Select Selection.Copy Sheets("CSR Data dump").Select Range("aa" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("d29").Select Selection.Copy Sheets("CSR Data dump").Select Range("ag" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("e29:e33").Select Selection.Copy Sheets("CSR Data dump").Select Range("ak" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("d34").Select Selection.Copy Sheets("CSR Data dump").Select Range("ap" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("e34:e37").Select Selection.Copy Sheets("CSR Data dump").Select Range("at" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("d38").Select Selection.Copy Sheets("CSR Data dump").Select Range("ax" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("e38:e39").Select Selection.Copy Sheets("CSR Data dump").Select Range("az" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("d40").Select Selection.Copy Sheets("CSR Data dump").Select Range("bb" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("E40:E42").Select Selection.Copy Sheets("CSR Data dump").Select Range("Be" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("d44").Select Selection.Copy Sheets("CSR Data dump").Select Range("bh" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("E44:e46").Select Selection.Copy Sheets("CSR Data dump").Select Range("Bk" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("d47").Select Selection.Copy Sheets("CSR Data dump").Select Range("bn" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("E47:e54").Select Selection.Copy Sheets("CSR Data dump").Select Range("Bv" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("d55").Select Selection.Copy Sheets("CSR Data dump").Select Range("cd" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("E55:e56").Select Selection.Copy Sheets("CSR Data dump").Select Range("ch" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("d58").Select Selection.Copy Sheets("CSR Data dump").Select Range("cl" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("E60:e63").Select Selection.Copy Sheets("CSR Data dump").Select Range("cp" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("h65:h67").Select Selection.Copy Sheets("CSR Data dump").Select Range("ct" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("j11").Select Selection.Copy Sheets("CSR Data dump").Select Range("cw" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("j19").Select Selection.Copy Sheets("CSR Data dump").Select Range("cx" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("j44").Select Selection.Copy Sheets("CSR Data dump").Select Range("cy" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("j60").Select Selection.Copy Sheets("CSR Data dump").Select Range("cz" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select Range("j65").Select Selection.Copy Sheets("CSR Data dump").Select Range("da" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Sheets("CM Form").Select Application.CutCopyMode = False Range("j64").Select End With Application.ScreenUpdating = True End Sub 

你指的是ws ,但是你没有With任何地方使用这个引用。 你必须用一个点来引用它,像这样:

 With ws fullcount = WorksheetFunction.CountA(.Range("A:A")) i = fullcount + 1 .Range("XER2").Select Selection.Copy .Sheets("CSR Data dump").Select .Range("a" & i).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True .Sheets("CM Form").Select Application.CutCopyMode = False 

关于ws ,如果它留在另一个工作簿中,那么它应该是这样的:

 Set wbk = Workbooks.Open("K:\Call Quality\Quality MI\Quality MI.XLSM") Set ws = wbk.Worksheets("CSR Data dump") 

如何引用另一个(打开或closures)工作簿,并在VBA中将值返回? – Excel 2007

下面应该照顾到粘贴到不同的工作簿

 Private Sub generate_report() Dim i As Long Dim fullcount As Long Dim ws As Worksheet Dim wbk as Workbook Dim srcWbk as Workbook Application.ScreenUpdating = False Set srcWbk = ActiveWorkbook Set wbk = Workbooks.Open("K:\Call Quality\Quality MI\Quality MI.XLSM") Set ws = wbk.Worksheets("CSR Data dump") srcWbk.Activate 'You are not using With appropriately so let's drop this till you learn how to use it. 'With ws fullcount = Excel.WorksheetFunction.CountA(ws.Range("A:A")) i = fullcount + 1 'Do this only once Sheets("CM Form").Select ws.Range("a" & i).Value=Range("XER2").Value ws.Range("b" & i).Value=Range("XER5").Value ws.Range("c" & i & ":c" & (i+1)).Value=Range("XER3:xer4").Value ws.Range("e" & i & ":e" & (i+1)).Value=Range("XER6:xer7").Value ws.Range("g" & i & ":g" & (i+6)).Value=Range("d11:d17").Value ws.Range("o" & i).Value=Range("d19").Value ws.Range("s" & i & ":s" & (i+3)).Value=Range("e19:e22").Value ws.Range("w" & i).Value=Range("d23").Value ws.Range("aa" & i & ":aa" & (i+5)).Value=Range("e23:e28").Value ws.Range("ag" & i).Value=Range("d29").Value ws.Range("ak" & i & ":ak" & (i+4)).Value=Range("e29:e33").Value ws.Range("ap" & i).Value=Range("d34").Value ws.Range("at" & i & ":at" & (i+3)).Value=Range("e34:e37").Value ws.Range("ax" & i).Value=Range("d38").Value ws.Range("az" & i & ":az" & (i+1)).Value=Range("e38:e39").Value ws.Range("bb" & i).Value=Range("d40").Value ws.Range("Be" & i & ":be" & (i+2)).Value=Range("E40:E42").Value ws.Range("bh" & i).Value=Range("d44").Value ws.Range("Bk" & i & ":bk" & (i+2)).Value=Range("E44:e46").Value ws.Range("bn" & i).Value=Range("d47").Value ws.Range("Bv" & i & ":bv" & (i+7)).Value=Range("E47:e54").Value ws.Range("cd" & i).Value=Range("d55").Value ws.Range("ch" & i & ":ch" & (i+1)).Value=Range("E55:e56").Value ws.Range("cl" & i).Value=Range("d58").Value ws.Range("cp" & i & ":cp" & (i+3)).Value=Range("E60:e63").Value ws.Range("ct" & i & ":ct" & (i+2)).Value=Range("h65:h67").Value ws.Range("cw" & i).Value=Range("j11").Value ws.Range("cx" & i).Value=Range("j19").Value ws.Range("cy" & i).Value=Range("j44").Value ws.Range("cz" & i).Value=Range("j60").Value ws.Range("da" & i).Value=Range("j65").Value 'End With 'Save and close the target workbook wbk.Close(True) Application.ScreenUpdating = True End Sub 

下面是你的select,只是一个build议
我将保持整个函数(如图所示只有在Sub开头的变化fullcount=语句),并更改Sub的签名如下

 Private Sub generate_report(ws As Worksheet) Dim i As Long Dim fullcount As Long Application.ScreenUpdating = False . . . Application.ScreenUpdating = True End Sub 

这使您可以将数据粘贴到传入的任何目标工作表中。它可以位于相同的工作簿或不同的工作簿中。 我会打电话给下面

 Dim wbk as Workbook Dim srcWbk as Workbook Dim ws as Worksheet Application.ScreenUpdating = False Set srcWbk = ActiveWorkbook Set wbk = Workbooks.Open("K:\Call Quality\Quality MI\Quality MI.XLSM") Set ws = wbk.Worksheets("CSR Data dump") srcWbk.Activate Call generate_report(ws) wbk.Close(True) 

要么

 Dim srcWbk as Workbook Dim ws as Worksheet Application.ScreenUpdating = False Set ws = ActiveWorkbook.Worksheets("CSR Data dump") Call generate_report(ws) 

干杯!