Excel 使用工作表时调用Sub#U Change Won';跑不动

Excel 使用工作表时调用Sub#U Change Won';跑不动,excel,call,worksheet,vba,Excel,Call,Worksheet,Vba,我试图调用一个名为ScaleAxes的子模块,它位于其他模块中。ScaleAxes代码是: Option Explicit Sub ScaleAxes() Worksheets("Dashboard").ChartObjects("Measure Chart").Activate With ActiveChart.Axes(xlCategory, xlPrimary) .MaximumScale = Sheets("Lists and Data").Range("R7").Val

我试图调用一个名为ScaleAxes的子模块,它位于其他模块中。ScaleAxes代码是:

Option Explicit
Sub ScaleAxes()
  Worksheets("Dashboard").ChartObjects("Measure Chart").Activate
  With ActiveChart.Axes(xlCategory, xlPrimary)
    .MaximumScale = Sheets("Lists and Data").Range("R7").Value
    .MinimumScale = Sheets("Lists and Data").Range("Q7").Value
    .MajorUnit = Sheets("Lists and Data").Range("S7").Value
  End With
  With ActiveChart.Axes(xlValue, xlPrimary)
    .MaximumScale = Sheets("Lists and Data").Range("R9").Value
    .MinimumScale = Sheets("Lists and Data").Range("Q9").Value
    .MajorUnit = Sheets("Lists and Data").Range("S9").Value
  End With
End Sub
我试图调用它的代码如下:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("H2:N2")
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
        Is Nothing Then
        Dim addIn As COMAddIn
        Dim automationObject As Object
        Set addIn = Application.COMAddIns("PI DataLink")
            Set automationObject = addIn.Object
        Dim MyRange As Range
            Set MyRange = Range("J2")
            MyRange.Select
            automationObject.SelectRange
            automationObject.ResizeRange
            Application.CalculateFull
     End If
     If Not Application.Intersect(KeyCells, Range(Target.Address)) _
        Is Nothing Then
        Call ScaleAxes
    End If
End Sub
当我单独运行ScaleAxes时,它可以独立工作,当调用它的代码运行时,不会出现错误。问题是上面的代码似乎运行正常,但ScaleAxes代码没有运行。我还尝试将代码从ScaleAxes()子函数中拉出,并将其粘贴到代码的工作部分所在的IF函数中,但这也不起作用

如果您能帮助我解决这个问题,我们将不胜感激

编辑1:

以下是我当前状态下的代码:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Sheets("Dashboard").Range("C2:G2")
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
        Is Nothing Then
        Dim addIn As COMAddIn
        Dim automationObject As Object
        Set addIn = Application.COMAddIns("PI DataLink")
            Set automationObject = addIn.Object
        Dim MyRange As Range
            Set MyRange = Range("N2")
            MyRange.Select
            automationObject.SelectRange
            automationObject.ResizeRange
            Application.CalculateFull
    End If
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
        Is Nothing Then
        Call ScaleAxes
    End If
End Sub
同样的问题也在发生。上面的代码在表2中(仪表板),调用的代码在模块2中

编辑2:


作为更新。当我使用命令按钮调用ScaleAxes子函数时,它就工作了。作为一个临时解决方案,这是可以的,但是如果可能的话,我想让sub与代码的其余部分同时被调用

更改
专用子工作表\u更改(ByVal目标为范围)
专用子工作表\u选择更改(ByVal目标为范围)
@PortlandRunner我做了您建议的更改,但仍然遇到相同的问题。快速检查,工作表\u选择更改代码是否位于工作表后面的代码中?一旦我改变了方法,我就可以很好地运行你的代码了。你是说我在“仪表板”工作表的原始帖子中有第二块代码吗?那么是的。我在那里有代码,我试图在一个单独的模块中调用代码。我稍微修改了代码,我将把它作为编辑添加到我的原始帖子中。只是为了确认,@nickelcap,您正在检查
C2:G2
上的交叉点,因此如果您更改任何其他单元格,它肯定不会运行,对吗?更改
私有子工作表\u更改(ByVal目标为范围)
专用子工作表\u SelectionChange(ByVal目标作为范围)
@PortlandRunner我做了您建议的更改,但仍然遇到相同的问题。快速检查,工作表\u SelectionChange代码是否位于工作表后面的代码中?一旦我改变了方法,我就可以很好地运行你的代码了。你是说我在“仪表板”工作表的原始帖子中有第二块代码吗?那么是的。我在那里有代码,我试图在一个单独的模块中调用代码。我稍微修改了代码,我将把它作为编辑添加到我的原始帖子中。只是为了确认,@nickelcap,您正在检查
C2:G2
上的交叉点,因此如果您更改任何其他单元格,它肯定不会运行,对吗?