我正在尝试运行由其他人运行的代码,但遇到运行时错误。在最后两行
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
如果我不激活文件并将单元格放入应用程序中,请像这样转到:
Application.Goto Reference:=prodProfilesSheet.Cells(r - 5, c(, Scroll:=True
代码运行但不做它应该做的事情(即将数据从主文件复制到辅助文件,运行计算组合子并将结果数据粘贴回主文件(。由于我没有编写代码,因此我不太确定这两行中发生了什么。
关于如何摆脱它的任何想法?
谢谢
tldr:摆脱 .激活操作,只需使用应用程序。
它适用于,
Application.Goto Reference:=prodProfilesSheet.Cells(r - 5, c), Scroll:=True
。因为您可以将Reference参数作为实际范围对象或 xlR1C1 字符串传递给 Application.Goto 方法,并且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 方法将选择集中在该单元格上后将单元格放在工作表窗口的左上角。由于 Application.GoTo 自己执行这两个操作,因此 .激活操作是多余的,如果 prodProfilesSheet 不是活动工作表,则可能会导致问题。
换句话说,Application.GoTo 可以移动到并激活当前工作表或其他工作表上的单元格,但是 .激活只能将焦点放在当前工作表上的单元格上。进一步。激活需要 Application.GoTo 将单元格带到工作表窗口的左上角,而当应用 Scroll:=True 参数时,Application.GoTo 本质上不需要任何其他内容。