【问题标题】:How to set a workbook to a variable name?如何将工作簿设置为变量名?
【发布时间】:2020-04-14 15:51:21
【问题描述】:

如何将工作簿设置为稍后在 sub 中使用的变量名称?

我正在尝试打开一个工作簿 (PriceFile) 并将此工作簿中的值设置为原始工作簿 (TestFile) 中的值。我可以打开 PriceFile 但无法命名工作簿。

Public Sub Get_Sum_Assured()
    Dim TestFile As Workbook
    Dim PriceFile As Workbook
    Dim PriceFileName As String
    Dim Test_Cases As Integer
    Dim FirstTest As Integer
    Dim CommDate As Date
    Dim DOB As Date
    Dim MonthPrem As Long
    Dim SumAssured As Long
    Dim TestCount As Integer

    Set TestFile = ThisWorkbook
    Call Open_Pricing_File
    TestFile.Activate
    PriceFileName = Range("Pricing_File").Value
    Set PriceFile = Workbooks(PriceFileName)

Open_Pricing_File 打开以“Pricing_File”命名的文件,当我逐步完成这项工作时。当我尝试将 PriceFile 设置为此工作簿时,代码会落在最后一行。

【问题讨论】:

  • PriceFileName = Range("Pricing_File").Value 您应该始终指定范围所在的工作表(以及工作簿,如果有多个)。对于最佳实践,请使用Testfile.Sheets("your sheet here").Range( 等。不确定这是否是这里的问题,但很可能。否则它将只取所显示的工作表的范围,这可能是不正确的。
  • workbooks 集合是指当前打开的工作簿。工作簿是否以存储在PriceFileName 中的任何字符串命名,打开?如果你想打开它,你需要使用workbooks.open()方法。
  • Plutian:我已按照您的建议更新了代码,并且在监视窗口中获得了正确的 PriceFileName 值。当我尝试将工作簿命名为 PriceFile 时,仍然出现运行时错误 9。值是“filepath.xlsx” - 名称周围的“”会影响这个吗?
  • Stavros Jon:PriceFileName 中的工作簿是在 Open_Pricing_File 中打开的工作簿,因此肯定会打开。该代码正在设法打开文件,然后无法应对。
  • 为什么你有一个单独的子来打开文件?有什么特别的原因吗?如果Workbooks.Open 行在这个Get_Sum_Assured 子中,那么你可以在那个时候Set 它。

标签: excel vba variables


【解决方案1】:

以下宏打开两个工作簿,并为它们命名为“wb1”和“wb2”。 最后,单元格 A1 中的值从“wb1”复制到“wb2”。

Sub copyValue_wb1wb2()
Dim wb1 As Workbook
Dim wb2 As Workbook

  'wb1 (workbook1)
  Workbooks.Open Filename:="C:\Data\ExcelFile1.xlsm", Local:=True, ReadOnly:=False
  Set wb1 = ActiveWorkbook

  'wb2 (workbook2)
  Workbooks.Open Filename:="C:\Data\ExcelFile2.xlsm", Local:=True, ReadOnly:=False
  Set wb2 = ActiveWorkbook

  'Now you can jump between workbooks like:
  wb1.Activate
  wb2.Activate

  'You can insert a value from wb1 to wb2 like:
  wb2.Sheets(1).Range("A1").Value = wb1.Sheets(1).Range("A1").Value

End Sub

【讨论】:

  • 你不需要这样做。根本不需要使用ActiveWorkbook。而是:Set wb1 = Workbooks.Open(Filename:="C:\Data\ExcelFile1.xlsm", Local:=True, ReadOnly:=False)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 2022-10-12
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
相关资源
最近更新 更多