Excel 如何在VBA中的公式中使用其他工作簿中的范围?

Excel 如何在VBA中的公式中使用其他工作簿中的范围?,excel,vba,Excel,Vba,我每天都会自动发送大量电子邮件,向经理传递KPI和支持数据 如何使网络日(开始日期、结束日期、假日)在另一个Excel工作簿上使用范围假日 整个过程是: 任务计划程序每天打开一个XLSM文件 XLSM文件打开csv输出,编辑和分析它-包括使用NETWORKDAYS 然后通过电子邮件发送csv文件,并报告其计算的KPI 我想确保假期只保留在一个Excel工作簿上,与xlsm文件分开,因为将有许多这样的xlsm文件被安排-如果假期日期更改,我只想更新一个范围 我已经尝试了许多使用、设置、命名范围的方

我每天都会自动发送大量电子邮件,向经理传递KPI和支持数据

如何使网络日(开始日期、结束日期、假日)在另一个Excel工作簿上使用范围假日

整个过程是:

  • 任务计划程序每天打开一个XLSM文件
  • XLSM文件打开csv输出,编辑和分析它-包括使用NETWORKDAYS
  • 然后通过电子邮件发送csv文件,并报告其计算的KPI
  • 我想确保假期只保留在一个Excel工作簿上,与xlsm文件分开,因为将有许多这样的xlsm文件被安排-如果假期日期更改,我只想更新一个范围

    我已经尝试了许多使用、设置、命名范围的方法。(我只使用VBA几天,因此可能遗漏了一些明显的内容。)

    “我的网络日”列输出为#值。我希望输出是一个整数。

    这似乎是在公式字符串中使用对外部
    ListObject
    表的结构化引用的一种方法

    使用带有指向其他工作簿中Excel表的外部链接的工作簿如果工作簿包含指向其他工作簿中Excel表的外部链接,则必须在Excel中打开该链接的源工作簿,以避免#REF!包含链接的目标工作簿中存在错误。如果首先打开目标工作簿并#REF!出现错误时,如果您打开源工作簿,这些错误将得到解决。如果先打开源工作簿,则不会看到错误代码

    一种解决方法是不使用结构化引用,而是引用范围的绝对地址,假设工作表名称为“HolidaysTable”,或者根据需要修改:

    C:\Users\TChivs\Desktop\Macro\[holidays.xlsx]HolidaysTable!$A$2:$A:$20
    
    或者,由于您似乎正在使用这些计算生成CSV,因此最好只在VBA端生成计算(即,不在工作表公式中,在保存为CSV时,该公式随后仅被销毁为其值),我认为我将对您的应用程序设计采取稍微不同的方法:

    不要打开多个执行(相同?)操作的XLSM文件中的一个,只使用一个包含假日信息和任何其他宏/VBA代码的.XLSM文件。现在,对于“许多”XLSM文件,它们中的每一个都应该作为各自计划任务的一个参数给定,因此

  • Task1=打开带有参数“C:\pathto\bar.xlsm”的main.xlsm
  • Task2=打开带有参数“C:\pathto\foo.xlsm”的main.xlsm
  • Task3=打开带有参数“C:\pathto\other.xlsm”的main.xlsm
  • 通过这种方式,您可以将所有代码和假日等放在一个源(“main.xlsm”)中,通过任务管理器按计划对其他文件进行处理。

    这似乎是一种在公式字符串中使用外部
    列表对象的结构化引用的方法

    使用带有指向其他工作簿中Excel表的外部链接的工作簿如果工作簿包含指向其他工作簿中Excel表的外部链接,则必须在Excel中打开该链接的源工作簿,以避免#REF!包含链接的目标工作簿中存在错误。如果首先打开目标工作簿并#REF!出现错误时,如果您打开源工作簿,这些错误将得到解决。如果先打开源工作簿,则不会看到错误代码

    一种解决方法是不使用结构化引用,而是引用范围的绝对地址,假设工作表名称为“HolidaysTable”,或者根据需要修改:

    C:\Users\TChivs\Desktop\Macro\[holidays.xlsx]HolidaysTable!$A$2:$A:$20
    
    或者,由于您似乎正在使用这些计算生成CSV,因此最好只在VBA端生成计算(即,不在工作表公式中,在保存为CSV时,该公式随后仅被销毁为其值),我认为我将对您的应用程序设计采取稍微不同的方法:

    不要打开多个执行(相同?)操作的XLSM文件中的一个,只使用一个包含假日信息和任何其他宏/VBA代码的.XLSM文件。现在,对于“许多”XLSM文件,它们中的每一个都应该作为各自计划任务的一个参数给定,因此

  • Task1=打开带有参数“C:\pathto\bar.xlsm”的main.xlsm
  • Task2=打开带有参数“C:\pathto\foo.xlsm”的main.xlsm
  • Task3=打开带有参数“C:\pathto\other.xlsm”的main.xlsm

  • 这样,您就可以将所有代码和假日等放在一个源(“main.xlsm”)中,通过任务管理器按计划处理其他文件。

    您应该在公式中包含工作簿名和表名。您是否可以尝试手动构建这样的公式(例如,通过Excel中的点击),然后与当前使用的公式进行比较?应该很容易发现语法上的差异。嗨,大卫,我昨天就这么做了。在那次会议上,它起了作用。但是当宏今天运行时,它要求我更新假日文件的文件位置。我不确定你的意思。您是否可以包括从该尝试中获得的确切提示/消息?文件位置是否已更改?嗨,大卫,我将尝试重新创建错误。当我从XLSM文件复制和粘贴时,代码更改为ActiveCell.FormulaR1C1=“=MAX(网络天数([@[生效请求日期],[@[计划日期]),holidays.xlsx!HolidaysTable[假日]),网络天数([@[生效请求日期],[@ExamDate],holidays.xlsx!HolidaysTable[假日])” 这将生成一个#ref,当您手动执行此操作时,该公式是有效的,对吗?好像它返回一个值?但是,当使用VBA制作时,它会为您提供#REF?您应该需要在公式中包含工作簿名和表名。你能试着手动建立这样一个公式吗