繁体   English   中英

设置给定工作表中的最后一行并复制所有数据并粘贴到另一个工作表中并更新数据透视表

[英]Setting the last row in a given worksheet and copy all the data and paste into another sheet and update a pivot table

嗨,我有一个第三方软件,它根据我运行的报告生成一个 excel 文件。 它将数据临时存储在名为reportdata.txt的文本文件中,然后生成名为reportdata.txt的工作簿,并将文本文件中的数据复制到该文件中。 我希望 VBA 将所有数据从 A 列到 N 列复制到最后一行,并将其粘贴到工作簿 1 中名为 ExcelList 的工作簿中。这反过来将用于填充数据透视表。 但是,我使用的代码并未复制所有数据。 并且数据透视表不刷新,这是代码

Sub Auto_Open()
'On Error GoTo ErrorHandler



Application.ScreenUpdating = False
Application.DisplayStatusBar = False

ThePath = ThisWorkbook.Path
Workbooks.Open Filename:=ThePath + "\ReportData.txt"

' Copy the workbook, and close the source text file (having marked it as saved)
Set Wbook = ActiveWorkbook
ActiveSheet.Copy
Wbook.Saved = True

'copy select bits of ReportData to Student Details and make the latter active


LastRow = Workbooks("ExcelList.xlsm").Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
Workbooks("ExcelList.xlsm").Sheets("Sheet1").Range("A1:N" & LastRow) = Workbooks("ReportData.txt").Sheets("Reportdata").Range("A3:N" & LastRow).value
Workbooks("ReportData.txt").Close
Workbooks("Book1").Saved = True
Workbooks("ExcelList.xlsm").Sheets("Sheet1").Activate

'Recalculate the worksheet
Application.Calculation = xlCalculationAutomatic

' Refresh_Macro Macro
    Sheets("Sheet2").Select
    ActiveWorkbook.ShowPivotTableFieldList = False
    ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh

' Mark the active workbook as saved
ActiveWorkbook.Saved = True
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Workbooks("ExcelList.xlsm").Saved = True
'Workbooks("ExcelList.xls").Close

Exit Sub

它没有导入所有数据可能是因为您在工作表上使用 LastRow

LastRow = Workbooks("ExcelList.xlsm").Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row

作为 LastRow 也在您的文本文件中。

Workbooks("ReportData.txt").Sheets("Reportdata").Range("A3:N" & LastRow).value

尝试

Option Explicit
Sub Auto_Open_1()

    Const TEXTFILE = "ReportData.txt"

    Dim Path, wbSource As Workbook, wsSource As Worksheet
    Dim wb As Workbook, ws As Worksheet, iLastRow As Long
    Dim rngSource As Range

    Path = ThisWorkbook.Path
    'Debug.Print Path

    Set wbSource = Workbooks.Open(ThisWorkbook.Path & "\" & TEXTFILE, False, True)
    Set wsSource = wbSource.Sheets(1)
    iLastRow = wsSource.Cells(Rows.Count, 1).End(xlUp).Row
    Set rngSource = wsSource.Range("A3:N" & iLastRow)
    'Debug.Print wsSource.Name, iLastRow

    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Sheet1")
    'ws.Cells.Clear
    rngSource.Copy ws.Range("A1")
    wbSource.Close False

    ' refresh pivot
    wb.ShowPivotTableFieldList = False
    wb.Sheets("Sheet2").PivotTables("PivotTable1").PivotCache.Refresh

    ' end
    MsgBox iLastRow - 2 & " rows copied from " & TEXTFILE, vbInformation
    'wb.Saved = True
    wb.Close

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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