Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:Workbookfunction如果下拉列表更改,则使用不同的图纸调用Sub_Excel_Vba - Fatal编程技术网

Excel VBA:Workbookfunction如果下拉列表更改,则使用不同的图纸调用Sub

Excel VBA:Workbookfunction如果下拉列表更改,则使用不同的图纸调用Sub,excel,vba,Excel,Vba,我有一个工作表函数,一旦E4中的下拉菜单更改了工作表债务明细,它就会自动调用CopyValues。此宏仅在工作表名称为“Debt Detail”时运行,否则将退出Sub。此宏至今运行良好。我添加了另一张名为“借款人声明”的表格,如果E4在表格借款人声明中发生变化,该表格应称为“借款人声明” 我需要修改现有工作簿函数以完成此操作。 以下是现有代码。对于如何实现这一目标的任何帮助和建议,我们将不胜感激: Private Sub Workbook_SheetChange(ByVal sh As Ob

我有一个工作表函数,一旦E4中的下拉菜单更改了工作表债务明细,它就会自动调用CopyValues。此宏仅在工作表名称为“Debt Detail”时运行,否则将退出Sub。此宏至今运行良好。我添加了另一张名为“借款人声明”的表格,如果E4在表格借款人声明中发生变化,该表格应称为“借款人声明”

我需要修改现有工作簿函数以完成此操作。 以下是现有代码。对于如何实现这一目标的任何帮助和建议,我们将不胜感激:


Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)


Application.ScreenUpdating = False

If sh.Name <> "Debt Detail" Then Exit Sub

    If Target.Address = Range("$E$4").Address Then

Call CopyValues

Range("A1").ClearOutline
Range("d2").Select

End If

Application.ScreenUpdating = True

End Sub

私有子工作簿(ByVal sh作为对象,ByVal目标作为范围)
Application.ScreenUpdating=False
如果sh.名称为“债务明细”,则退出Sub
如果Target.Address=范围($E$4”)。则
调用CopyValues
范围(“A1”)。清晰轮廓
范围(“d2”)。选择
如果结束
Application.ScreenUpdating=True
端接头

关于代码的一些建议:

  • 缩进代码
  • 如果要关闭屏幕更新和其他功能,请至少使用一些错误处理
  • 不需要Call语句
代码:

Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)

    On Error GoTo CleanFail
    
    ' Exit if modified cell is not E4
    If Target.Address <> "$E$4" Then Exit Sub

    ' Turn off stuff to speed up process (only if modified cell is E4)
    Application.ScreenUpdating = False
    
    ' Check the sheet name and call procedure accordingly
    Select Case sh.Name
    Case "Debt Detail"
        ' Do stuff if it's the target sheet
        CopyValues ' Calls the sub CopyValues
        
        sh.Range("A1").ClearOutline
        sh.Range("D2").Select
    
    Case "Borrower Statement"
        ' Do stuff if it's the target sheet
        BorrowerStatementCall ' calls the sub BorrowerStatementCall
        
    End Select

CleanExit:
    ' Turn on stuff again
    Application.ScreenUpdating = True
    Exit Sub

CleanFail:
    MsgBox "An error occurred:" & Err.Description
    GoTo CleanExit

End Sub
Private子工作簿\u SheetChange(ByVal sh作为对象,ByVal Target作为范围)
出错时转到CleanFail
'如果修改的单元格不是E4,则退出
如果目标地址为“$E$4”,则退出Sub
'关闭填充以加快进程(仅当修改的单元格为E4时)
Application.ScreenUpdating=False
'相应地检查图纸名称和调用过程
选择案例名称
案例“债务详情”
“如果是目标工作表,就做一些事情
CopyValues'调用子CopyValues
sh.Range(“A1”).清晰轮廓
sh.Range(“D2”)。选择
案例“借款人声明”
“如果是目标工作表,就做一些事情
BorrowerStatementCall'调用子BorrowerStatementCall
结束选择
清洁出口:
“再打开东西
Application.ScreenUpdating=True
出口接头
清除失败:
MsgBox“发生错误:”&错误说明
转到清洁出口
端接头
让我知道它是否有效

您的代码中没有提及“借款人声明”。