vba - 424 错误 需要对象

标签 vba excel

此功能只是为了运行一大堆工作表并清除旧数据并将其复制到历史范围,为实际数据分析和传输做准备。当我尝试重置范围对象以继续执行工作表中单元格的清除时,我收到“运行时错误‘424’:需要对象。

我对这个错误特别困惑,因为它适用于之前的两个对象,没有问题。拼写似乎是正确的。有任何想法吗?函数底部的 Else 语句中发生错误 Set historStartRangePuts = historStartRangePuts.Offset(0,10)

    Sub ClearTransferHistoricalOI(oiSheet As Worksheet)

    Dim continue As Boolean
    Dim startRangePuts As Range, startRangeCalls As Range, historStartRangePuts As Range, historStartRangeCalls As Range
    Dim newStartRangePuts As Range, newstartRangeCalls As Range, newHistorStartRangePuts As Range, newHistorStartRangeCalls As Range
    Dim columnCounter As Integer

    'Sets start range
    Set startRangePuts = oiSheet.Cells(5, 1)
    Set startRangeCalls = oiSheet.Cells(5, 3)
    Set historStartRangePuts = oiSheet.Cells(5, 6)
    Set historStartRangeCalls = oiSheet.Cells(5, 8)

    continue = True

    oiSheet.Activate

    'Attempts to catch already cleared sheets
    If IsEmpty(startRangePuts) = True Then
        continue = False

    End If

    Do While continue = True

        'Clears puts and calls historical data
        oiSheet.Range(historStartRangePuts, historStartRangePuts.Offset(0, 1)).Select
        oiSheet.Range(Selection, Selection.End(xlDown)).ClearContents

        oiSheet.Range(historStartRangeCalls, historStartRangeCalls.Offset(0, 1)).Select
        oiSheet.Range(Selection, Selection.End(xlDown)).ClearContents

        'Transfers puts and calls current data to historical data cols
        'Puts
        oiSheet.Range(startRangePuts, startRangePuts.Offset(0, 1)).Select
        oiSheet.Range(Selection, Selection.End(xlDown)).Cut historStartRangePuts
        'Calls
        oiSheet.Range(startRangeCalls, startRangeCalls.Offset(0, 1)).Select
        oiSheet.Range(Selection, Selection.End(xlDown)).Cut historStartRangeCalls

        If IsEmpty(startRangePuts.Offset(0, 10)) = True Then
            continue = False

        Else

            Set startRangeCalls = startRangeCalls.Offset(0, 10)
            Set startRangePuts = startRangePuts.Offset(0, 10)
            Set historStartRangePuts = startRangePuts.Offset(0, 5)
            Set historStartRangeCalls = startRangeCalls.Offset(0, 5)


        End If


    Loop


End Sub

最佳答案

您收到错误是因为没有为该变量分配任何内容。这里 - '清除看跌期权和看涨期权历史数据 oiSheet.Range(historStartRangePuts, historStartRangePuts.Offset(0, 1)).Select oiSheet.Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents

        oiSheet.Range(historStartRangeCalls, historStartRangeCalls.Offset(0, 1)).Select
        oiSheet.Range(Selection, Selection.End(xlDown)).Select
        Selection.ClearContents

您将丢失两个 histor 范围的定义。所以当你尝试

Set historStartRangePuts = historStartRangePuts.Offset(0, 10)
Set historStartRangeCalls = historStartRangeCalls.Offset(0, 10)

没有什么可以引用的。 认为这是因为 clearcontents返回一个变体 - 它是一个对象。

事情就发生在这里 -

    historStartRangePuts.Select
    ActiveSheet.Paste

删除该过程,您将看到 Puts 可以工作,但 Calls 仍然失败。

关于vba - 424 错误 需要对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35584842/

相关文章:

excel - 将许多后继关系从 Excel 文件导入 MS Project

excel - 如何在执行时设置动态数组大小?

excel - 将 xlsm 保存为 xlsx 后,为什么打开新文件会关闭旧文件?

arrays - 如何使用函数、 "For"循环和 Excel VBA 中的两个现有数组输出值数组?

通过 Excel/VBA 调用的 DLL 中的 C++ 函数在传递双参数时生成异常

EXCEL VBA,更改单元格组和 Worksheet_Change 事件

excel - 将一张纸的列宽设置为与另一张相同

excel - 从命名范围的 Name 对象获取工作表名称

sql - VBA:使用两个参数调用 SQL Server 存储过程

vba - 循环浏览选定的 Excel 工作表