Я пытаюсь написать подпрограмму VBA, чтобы открыть csv файл, скопировать и вставить значения в другую книгу, но, кажется, продолжает падать

Sub GetWorkFlowMaxData()

 Dim DataSheet As Object
 Dim InpDataBook As Object
 Dim InpDataSheet As Object
 Dim WorkFlowMaxFileName As String
 Dim vResponse As Variant
 Dim sCurrSheet As String
 Dim main As String


Application.ScreenUpdating = False
sCurrSheet = ActiveSheet.Name

ActiveSheet.Calculate




vResponse = MsgBox("This action can not be undone. Are you sure you want to clear Historic WorkFlowMax Data ?", vbYesNo, "Clear Data")

If vResponse = vbYes Then

main = ActiveWorkbook.Name

Workbooks(main).Sheets("WFM_Detail").Range("A1:G10000").ClearContents




        WorkFlowMaxFileName = Range("WorkFlowMaxFile")



            Workbooks.Open Filename:=WorkFlowMaxFileName

            Set InpDataBook = ActiveWorkbook
            Set InpDataSheet = ActiveSheet
            InpDataBook.Activate

'            other = ActiveWorkbook.Name
'            Workbooks(InpDataBook).Sheets("InpDataSheet").Range("A1:G10000").Copy


'            ActiveWorkbook.Close SaveChanges:=False
       End If


' Application.Calculate
 End Sub
2
Andy Donaldson 5 Апр 2017 в 07:03

2 ответа

Лучший ответ

После того, как вы правильно установили переменную workbook и Sheet в коде, вы можете напрямую использовать их, как показано ниже ...

InpDataSheet.Range("A1:G10000").Copy

Измените следующий код согласно вашему требованию ...

Sub GetWorkFlowMaxData()
    Dim wbDest As Workbook, wbSource As Workbook
    Dim wsDest As Worksheet, wsSource As Worksheet
    Dim WorkFlowMaxFileName As String
    Dim vResponse As String

    Application.ScreenUpdating = False

    vResponse = MsgBox("This action can not be undone. Are you sure you want to clear Historic WorkFlowMax Data ?", vbYesNo, "Clear Data?")

    If vResponse = vbNo Then Exit Sub

    Set wbDest = ThisWorkbook
    Set wsDest = wbDest.Sheets("WFM_Detail")

    WorkFlowMaxFileName = Range("WorkFlowMaxFile").Value

    wsDest.Range("A1").ClearContents

    Workbooks.Open Filename:=WorkFlowMaxFileName
    Set wbSource = ActiveWorkbook
    Set wsSource = ActiveSheet

    wsSource.Range("A1").CurrentRegion.Copy wsDest.Range("A1")

    wbSource.Close False
    Application.ScreenUpdating = ture
End Sub
0
Subodh Tiwari sktneer 5 Апр 2017 в 05:56

Это должно делать то, что вы спрашиваете после того, как вы установили для предоставленных переменных соответствующие значения.

Sub GetWorkFlowMaxData()
    Dim copyFrom, copyTo As Workbook
    Dim copyFromPath, copyToPath As String
    Dim copyFromSheet, copyToSheet As String
    Dim copyFromRange, copyToRange As Range

    Set copyFrom = Workbooks.Open(copyFromPath)
    Set copyTo = Workbooks.Open(copyToPath)

    copyFrom.Sheets(copyFromSheet).Range(copyFromRange).Copy
    copyTo.Sheets(copyToSheet).Range(copyToRange).PasteSpecial
    copyFrom.Close
End Sub
0
Kade M. 5 Апр 2017 в 04:22