我正在尝试运行由其他人运行的代码,但遇到运行时错误。在最后两行
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子并将结果数据粘贴回主文件)。因为我没有编写代码,所以我不确定在这两行中发生了什么。
关于如何摆脱困境的任何想法?
谢谢
答案 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本质上不需要任何其他东西。