【问题标题】:Error 438 when opening a workbook with variables打开带有变量的工作簿时出现错误 438
【发布时间】:2018-12-10 04:45:52
【问题描述】:

我仍在学习 VBA,但我知道这很可能是一个简单的错误,我需要一些帮助来解决这个错误代码。我为替换每天更改其名称的工作簿而创建的变量“isum”出现错误 438。由于“&”,我无法使用“文件路径和 wb”打开它,因此我为它们都创建了一个变量。我正在尝试从一个工作簿复制工作表上的一个部分,然后粘贴到另一个工作簿上的另一个工作表区域。这是我的代码:

    Sub Summary()
Application.ScreenUpdating = False

'create variables
Dim wb As String
Dim filepath As String
Dim isum As Workbook
Dim CBD As Workbook

'variables for file with changing date in name title
filepath = "\\main\stuff\Summary\"
wb = "Today Summary " & Format(Date, "m.dd") - 0.01 & ".xlsb"

'open both
Set isum = Workbooks.Open(filepath & wb)
Set CBD = Workbooks.Open("\\main\other\CBD forecast.xlsx")

'copy
CBD.Sheets("Sheet3").Range("B3:J3000").Copy
'Now, transfer values from x to y:
isum.Sheets("Sheet7").Range("A2").Paste 'error 438, it copies but does not paste

'Close x:
CBD.Close

Application.ScreenUpdating = True
End Sub

【问题讨论】:

  • 摘要是文件夹还是工作簿名称的第一部分?如果是前者,则主机文件夹和工作簿名称之间缺少反斜杠。
  • 抱歉,我刚刚进行了编辑以更正它。它以前在那里,当我将代码复制并粘贴到这个问题中时,我只是不小心擦掉了斜线。所以,问题还是出现了。
  • wb = "Today Summary " & Format(Date, "m.dd") & " - 0.01.xlsb" 可能更接近真相。如果不是,请确切地披露您尝试将字符串连接到的内容。 `
  • 不,但谢谢。字符串 'wb' 应该是根据日期每天更改的文件名(即今日摘要 6.20、今日摘要 6.21、今日摘要 6.22 等)。我想打开这个文件进行粘贴,但是因为'&'符号,它不允许我粘贴'filepath & wb',所以我做了isum = filepath & wb。 “-.01”是打开文件名从当前日期之前的日期开始重新评估。我希望这会有所帮助。
  • 好的,wb(工作簿)字符串应该链接到上面的确切filepath,并且应该在wb 文件中作为周五日期的“Today Summary 6.29”。因此Today Summary 6.28 工作簿将位于该文件路径下的文件“摘要”下。希望我能回答你的问题。

标签: excel vba syntax-error


【解决方案1】:

周五日期的 wb 文件为“Today Summary 6.29”。

wb = "Today Summary " & Format(Date, "m.dd") - 0.01 & ".xlsb"

您似乎将测试字符串的某些部分连接到所需的工作簿名称中。

'variables for file with changing date in name title
filepath = "\\main\stuff\Summary\"
wb = "Today Summary " & Format(Date, "m.dd") & ".xlsb"

还建议在粘贴到单个目标时使用复制操作的 Destination 参数。

CBD.Sheets("Sheet3").Range("B3:J3000").Copy _
   destination:=isum.Sheets("Sheet7").Range("A2")

【讨论】:

  • 所以,这是准确的,工作簿正在打开,CBD 工作表被复制;但是,isum(用于文件路径和 wb)没有激活要粘贴的 sheet7。这就是错误 438 所在。
  • CBD.Sheets("Sheet3").Range("B3:J3000").Copy destination:=isum.Sheets("Sheet7").Range("A2")一样在一行中尝试所有这些。
  • 完美运行,谢谢。非常感谢前一种方法不起作用的简要原因。
  • 遗憾的是,我不再使用剪贴板了,我更喜欢使用 Destination:= 参数,所以我真的没有给你简洁的回应。也许如果有相关经验的人通过这个线程来,他们可以添加一个。
猜你喜欢
  • 2017-01-17
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多