使用 VBA 从 Select 文件输入数据

Input Data from a Select File using VBA

我在一家银行工作,我们定期从 Nasdaq Smart 收到有关市场滥用的季度数据。我被分配了创建一个宏来总结这些数据的任务,以便能够在更长的时间线上可视化市场滥用。

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

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

私人订阅 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 和 Whosebug,因此欢迎任何形式的帮助。

我认为问题可能是在激活不同的工作簿之前选择了一个范围,导致选择失败。

       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

这是适用于从事类似项目的任何人的工作代码。

私人订阅 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

结束子