使用VBA从select文件input数据

我在一家银行工作,我们经常从Nasdaq Smart获得关于市场滥用的季度数据。 我已经被分配了创build一个macros的任务来总结这些数据,以便能够在更长的时间内可视化市场滥用。

到目前为止,我可以手动select我感兴趣的工作簿,然后我要导入的工作簿的一部分被自动选中。

我遇到的问题是,它不会将所选数据input到新文件中。 如果我可以信任编译器,那么问题是在这种情况下不支持范围函数。

Private Sub CommandButton23_Click()

Dim wkbCrntWorkBook As Workbook Dim wkbSourceBook As Workbook Dim rngSourceRange As Range Dim rngDestination As Range Dim bottomCell As Range Dim rngTemp As Range Set wkbCrntWorkBook = ActiveWorkbook With Application.FileDialog(msoFileDialogOpen) .Filters.Clear .Filters.Add "Excel 97-2003", "*.xlsx; *.xlsm; *.xlsa , *.xls" .AllowMultiSelect = False .Show If .SelectedItems.Count > 0 Then Workbooks.Open .SelectedItems(1) Set wkbSourceBook = ActiveWorkbook Set bottomCell = wkbSourceBook.Sheets("par_ACCOUNT").Cells.Find(what:="Account by Type") Set rngTemp = wkbSourceBook.Sheets("par_ACCOUNT").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious) If Not rngTemp Is Nothing Then wkbSourceBook.Sheets("par_ACCOUNT").Range(bottomCell, rngTemp.Offset(0, 65)).Select End If wkbCrntWorkBook.Activate Set rngDestination = wkbCrntWorkBook.Range("A1") Selection.Copy rngDestination rngDestination.CurrentRegion.EntireColumn.AutoFit wkbSourceBook.Close False End If End With 

结束小组

提前谢谢大家的帮助。 这是我第一次使用VBA和Stackoverflow,所以欢迎任何forms的帮助。

我认为这个问题可能是由于在激活一个不同的工作簿之前select一个范围造成的,导致select失败。

  If Not rngTemp Is Nothing Then wkbSourceBook.Sheets("par_ACCOUNT").Range(bottomCell, rngTemp.Offset(0, 65)).Select End If wkbCrntWorkBook.Activate Set rngDestination = wkbCrntWorkBook.Range("A1") Selection.Copy rngDestination 

我会避免使用select ,这可以通过简单的范围对象(已经声明)来实现。

  If Not rngTemp Is Nothing Then set rngSourceRange = wkbSourceBook.Sheets("par_ACCOUNT").Range(bottomCell, rngTemp.Offset(0, 65)) End If Set rngDestination = wkbCrntWorkBook.sheets(???).Range("A1") rngSource.Copy rngDestination 

这是工作在类似项目上的任何人的工作代码。

Private Sub CommandButton23_Click()

 Dim wkbCrntWorkBook As Workbook Dim wkbSourceBook As Workbook Dim rngSourceRange As Range Dim rngDestination As Range Dim bottomCell As Range Dim rngTemp As Range Set wkbCrntWorkBook = ActiveWorkbook With Application.FileDialog(msoFileDialogOpen) .Filters.Clear .Filters.Add "Excel 97-2003", "*.xlsx; *.xlsm; *.xlsa , *.xls" .AllowMultiSelect = False .Show If .SelectedItems.Count > 0 Then Workbooks.Open .SelectedItems(1) Set wkbSourceBook = ActiveWorkbook Set bottomCell = wkbSourceBook.Sheets("par_ACCOUNT").Cells.Find(what:="Account by Type") Set rngTemp = wkbSourceBook.Sheets("par_ACCOUNT").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious) If Not rngTemp Is Nothing Then Set rngSourceRange = wkbSourceBook.Sheets("par_ACCOUNT").Range(bottomCell, rngTemp.Offset(0, 65)) End If Set rngDestination = wkbCrntWorkBook.Sheets("Tabelle1").Range("A1") rngSourceRange.Copy rngDestination rngDestination.CurrentRegion.EntireColumn.AutoFit wkbSourceBook.Close False End If End With 

结束小组