简体   繁体   中英

Excel VBA to another workbook

I have an excel document with 3 tabs (Report, MI & CSR Data Dump).

When the report tab is complete and "submit" button pushed. The current VBA writes to the data dump sheet perfectly.

However I want to move the data dump into a separate workbook. I have tried and failed. Location:- K:\\Call Quality\\Quality MI\\Quality MI.XLSM This will be the same worksheet name "Data Dump"

My current VBA which works perfectly is

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

You are refering to ws , but then you are not using this With reference anywhere. You have to refer to it with a point, like this:

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

Concerning the ws , if it stays in another workbook, then it should be refered like this:

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

How do I reference to another (open or closed) workbook, and pull values back, in VBA? - Excel 2007

The below should take care of pasting into a different workbook

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

Below is completely your choice, and just a suggestion
I will keep the whole function as is(With only changes at start of Sub to fullcount= statement as shown) and change the signature of the Sub as below

Private Sub generate_report(ws As Worksheet)

Dim i As Long
Dim fullcount As Long

Application.ScreenUpdating = False    
.
.
.
Application.ScreenUpdating = True

End Sub

This allows you to paste the data into any target sheet that you pass in. It could be in the same workbook or a different workbook. And I would call it as below

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)

OR

Dim srcWbk as Workbook
Dim ws as Worksheet

Application.ScreenUpdating = False

Set ws = ActiveWorkbook.Worksheets("CSR Data dump")
Call generate_report(ws)

Cheers!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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