worksheet_change 事件未调用子例程
Subroutine not called from worksheet_change event
通过更改单元格中的值,调用 macro/module )。当 运行 来自功能区的此宏或 Alt + F8 时,它可以完美运行。
为什么第一个宏的调用不起作用?
Sheet1 背后的宏
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Range("E25") Then
Call GasFlow
End If
End Sub
模块中的宏 'Converse'
Sub GasFlow()
' GasFlow Macro
' This macro converts all gas units to Nm3/h
'
If Range("InputGasFlowUnit") = "Nm3/h" Then
Range("GasFlowH") = Range("FeedGasFlowRate")
ElseIf Range("InputGasFlowUnit") = "Nm3/d" Then
Range("GasFlowH") = Range("FeedGasFlowRate") / 24
ElseIf Range("InputGasFlowUnit") = "kg/h" Then
Range("GasFlowH") = Range("FeedGasFlowRate") / Range("GasMolWeight") / Range("MoleInNm3")
ElseIf Range("InputGasFlowUnit") = "kg/d" Then
Range("GasFlowH") = Range("FeedGasFlowRate") / Range("GasMolWeight") / Range("MoleInNm3") / 24
ElseIf Range("InputGasFlowUnit") = "kmol/h" Then
Range("GasFlowH") = Range("FeedGasFlowRate") / Range("MoleInNm3") / 1000
ElseIf Range("InputGasFlowUnit") = "kmol/d" Then
Range("GasFlowH") = Range("FeedGasFlowRate") / Range("MoleInNm3") / 1000 * 24
ElseIf Range("InputGasFlowUnit") = "SCFD" Then
Range("GasFlowH") = Range("FeedGasFlowRate") * 0.02831685 / 24
ElseIf Range("InputGasFlowUnit") = "MMSCFD" Then
Range("GasFlowH") = Range("FeedGasFlowRate") * 28316.85 / 24
ElseIf Range("InputGasFlowUnit") = "TPA" Then
Range("GasFlowH") = Range("FeedGasFlowRate") / 1000 / 365 / Range("MoleInNm3") / Range("GasMolWeight")
Else
'No correct unit selected'
End If
End Sub
将工作表代码更改为:
更简单的替代方案(编辑 1)
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E" Then
Call GasFlow
End If
End Sub
更好的选择
即使一次更改多个单元格也能正常工作,包括“E25”:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E25")) Is Nothing Then
Call GasFlow
End If
End Sub
通过更改单元格中的值,调用 macro/module )。当 运行 来自功能区的此宏或 Alt + F8 时,它可以完美运行。
为什么第一个宏的调用不起作用?
Sheet1 背后的宏
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Range("E25") Then
Call GasFlow
End If
End Sub
模块中的宏 'Converse'
Sub GasFlow()
' GasFlow Macro
' This macro converts all gas units to Nm3/h
'
If Range("InputGasFlowUnit") = "Nm3/h" Then
Range("GasFlowH") = Range("FeedGasFlowRate")
ElseIf Range("InputGasFlowUnit") = "Nm3/d" Then
Range("GasFlowH") = Range("FeedGasFlowRate") / 24
ElseIf Range("InputGasFlowUnit") = "kg/h" Then
Range("GasFlowH") = Range("FeedGasFlowRate") / Range("GasMolWeight") / Range("MoleInNm3")
ElseIf Range("InputGasFlowUnit") = "kg/d" Then
Range("GasFlowH") = Range("FeedGasFlowRate") / Range("GasMolWeight") / Range("MoleInNm3") / 24
ElseIf Range("InputGasFlowUnit") = "kmol/h" Then
Range("GasFlowH") = Range("FeedGasFlowRate") / Range("MoleInNm3") / 1000
ElseIf Range("InputGasFlowUnit") = "kmol/d" Then
Range("GasFlowH") = Range("FeedGasFlowRate") / Range("MoleInNm3") / 1000 * 24
ElseIf Range("InputGasFlowUnit") = "SCFD" Then
Range("GasFlowH") = Range("FeedGasFlowRate") * 0.02831685 / 24
ElseIf Range("InputGasFlowUnit") = "MMSCFD" Then
Range("GasFlowH") = Range("FeedGasFlowRate") * 28316.85 / 24
ElseIf Range("InputGasFlowUnit") = "TPA" Then
Range("GasFlowH") = Range("FeedGasFlowRate") / 1000 / 365 / Range("MoleInNm3") / Range("GasMolWeight")
Else
'No correct unit selected'
End If
End Sub
将工作表代码更改为:
更简单的替代方案(编辑 1)
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E" Then
Call GasFlow
End If
End Sub
更好的选择
即使一次更改多个单元格也能正常工作,包括“E25”:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E25")) Is Nothing Then
Call GasFlow
End If
End Sub