Application.Goto出现活动文件运行时错误

时间:2018-07-06 12:29:55

标签: excel-vba vba excel

我正在尝试运行由其他人运行的代码,但遇到运行时错误。在最后两行

Sub calculateCompositions()

    Set prodProfilesSheet = Workbooks("Production Profiles (revised).xlsb").Sheets("Ref Compr - Wells")

    Set fluidCompSheet = Workbooks("Production Profiles (revised).xlsb").Sheets("Well Base Compositions")

    Set flashCalcSheet = Workbooks("Production Profiles (revised).xlsb").Sheets("Well Base Compositions")

    total_columns = prodProfilesSheet.Range("C1").CurrentRegion.Columns.Count

    c = ActiveCell.CurrentRegion.Column

    numberOfRowsInRegion = ActiveCell.CurrentRegion.Rows.Count
    numberOfheaderRows = 6
    numberOfDataRows = numberOfRowsInRegion
    firstDataRow = ActiveCell.Row

    Do While c < total_columns
    fluidCompSheet.Range("L2").Value = current_well_name
    compositionName = fluidCompSheet.Range("O1").Value
    fluidCompSheet.Range("O3:O32").Copy
    flashCalcSheet.Range("I8").PasteSpecial Paste:=xlPasteValues, 
    Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False   
    If current_well_name = "Existing wells" Then 
    Exit Do
    For r = firstDataRow To firstDataRow + numberOfDataRows

  prodProfilesSheet.Cells(r - 5, c).Activate
  Application.Goto Reference:=Active, Scroll:=True

  '...
end sub

如果我不激活文件,则将单元格放入应用程序Goto中,如下所示:

Application.Goto参考:= prodProfilesSheet.Cells(r-5,c),滚动:= True

代码将运行,但没有执行应做的工作(将数据从主文件复制到辅助文件,运行calculate composition子并将结果数据粘贴回主文件)。因为我没有编写代码,所以我不确定在这两行中发生了什么。

关于如何摆脱困境的任何想法?

谢谢

1 个答案:

答案 0 :(得分:1)

  

tldr:。摆脱.Activate操作,仅使用Application.GoTo。

它适用于

Application.Goto Reference:=prodProfilesSheet.Cells(r - 5, c), Scroll:=True

...,因为您可以将 Reference 参数作为实际范围对象或xlR1C1字符串传递给Application.Goto Method,而prodProfilesSheet.Cells(r - 5, c)是范围对象。要将单元格引用作为字符串传递,请使用

dim addr as string
addr = prodProfilesSheet.Cells(r - 5, c).Address(0, 0, ReferenceStyle:=xlR1C1, external:=true)
Application.Goto Reference:=addr, Scroll:=True

您没有提供有关 Active 代表什么的信息,但我强烈怀疑它曾经是ActiveCell和Application。GoTo仅用于将单元格放在窗口的左上角。使用Range.Activate Method将“选择”集中于该单元格后的工作表窗口。由于Application.GoTo本身会同时执行这两个操作,因此如果prodProfilesSheet不是活动工作表,则.Activate操作是多余的,并且可能会导致问题。

换句话说,Application.GoTo可以移至并激活当前工作表或另一个工作表上的单元格,但是.Activate只能将焦点移至当前工作表上的单元格。此外,.Activate需要Application.GoTo将单元格移到工作表窗口的左上角,而当应用Scroll:= True参数时,Application.GoTo本质上不需要任何其他东西。