Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
Vba 运行时错误';438'-只是有时候_Vba_Excel_Runtime Error - Fatal编程技术网

Vba 运行时错误';438'-只是有时候

Vba 运行时错误';438'-只是有时候,vba,excel,runtime-error,Vba,Excel,Runtime Error,我一直收到此错误消息,但仅在第一次运行vba代码时收到。如果我在出错后再次运行它,它就会工作。 此代码根据我从第一个答案中理解的内容进行编辑 任何帮助都将不胜感激 新代码 Sheets("Sheet1").Copy Dim wb As Workbook Set wb = ActiveWorkbook.Sheets("Sheet1").Add 'this creates the "Save as". Change sheets as to your sheet. The new 'workbo

我一直收到此错误消息,但仅在第一次运行vba代码时收到。如果我在出错后再次运行它,它就会工作。 此代码根据我从第一个答案中理解的内容进行编辑 任何帮助都将不胜感激


新代码

Sheets("Sheet1").Copy
Dim wb As Workbook
Set wb = ActiveWorkbook.Sheets("Sheet1").Add

'this creates the "Save as". Change sheets as to your sheet. The new
'workbook is now the active one
strFileName = "C:\Users\" & Sheets("Sheet1").Name & ".xls"
ActiveWorkbook.SaveAs Filename:=Range("B4").Value & Range("E6").Value & " vs " _
& Range("E7").Value & " - " & Format(Date, "dd-mm-yyyy")
wb.Close

有问题的原始代码:

strFileName = "C:\Users\" & Sheets("Sheet1").Name & ".xls"
If strFileName = "False" Then Exit Sub
ActiveWorkbook.SaveAs Filename:=Range("B4").Value & Range("E6").Value & " vs " _
& Range("E7").Value & " - " & Format(Date, "dd-mm-yyyy")
ActiveWorkbook.Close0

工作簿对象没有
.Close0

这一行:

ActiveWorkbook.Close0
应该是:

ActiveWorkbook.Close

注:

  • 您可以选择指定是否要使用
    ActiveWorkbook保存更改。关闭保存更改:=True
    ActiveWorkbook。关闭保存更改:=False

  • 如果一次打开多个工作簿,则使用
    ActiveWorkbook.Close
    可能会关闭与预期不同的工作簿。通常最好使用以下选项之一:

  • 此工作簿。关闭
    ——如果正在关闭的工作簿中包含代码
  • 工作簿(“名称”)。关闭
    ——如果您没有将工作簿作为变量关闭的工作簿不是带有代码的工作簿。但是,不鼓励使用这种方法,因为它需要将工作簿名称硬编码到代码中。如果名称发生更改,这可能会导致代码中断
  • wbk.Close
    ——其中
    wbk
    是引用/保存要关闭的工作簿的工作簿对象

  • 如果工作簿是预先存在的,则可以将其设置为以下变量:
这个


  • 如果工作簿是新创建的,则可以将其设置为以下变量:
这个


编辑:

strFileName = "C:\Users\" & Sheets("Sheet1").Name & ".xls"
If strFileName = "False" Then Exit Sub
ActiveWorkbook.SaveAs Filename:=Range("B4").Value & Range("E6").Value & " vs " _
& Range("E7").Value & " - " & Format(Date, "dd-mm-yyyy")
ActiveWorkbook.Close0

意识到您可能试图使用
ActiveWorkbook.Close 0
来表示
SaveChanges
True/False
,但最好使用
True/False
而不是
-1,0,1
,等等。

您打算怎么做<代码>设置wb=ActiveWorkbook.Sheets(“Sheet1”)。是否添加?
Sheet
对象没有
Add
方法。这是一个438错误

要在运行时创建新工作簿,可以使用
工作簿.Add
方法

Set wb = Workbooks.Add
要从现有工作表中创建新工作簿,正如您可能正在尝试做的那样,使用
ActiveWorkbook
,这是为数不多的几次操作之一:

Dim ws as Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
ws.Copy   ' If Destination isn't specified, this creates a new workbook
Dim wb As Workbook
Set wb = ActiveWorkbook ' The newly created workbook is Active now

strFileName = "C:\Users\" & ws.Name & ".xls" '<~~ this variable is never used, it doesn't do anything. You may want to remove it to avoid ambiguity.

wb.SaveAs Filename:=Range("B4").Value & Range("E6").Value & " vs " _
& Range("E7").Value & " - " & Format(Date, "dd-mm-yyyy")
wb.Close
Dim ws as工作表
设置ws=ThisWorkbook.Sheets(“Sheet1”)
ws.Copy'如果未指定目标,将创建一个新工作簿
将wb设置为工作簿
设置wb=ActiveWorkbook'新创建的工作簿现在处于活动状态

strFileName=“C:\Users\”&ws.Name&“.xls”哪一行有错误?最后一行中的0之前是否有空格?这一行
如果strFileName=“False”则Exit Sub
永远不会为true???您打算如何处理<代码>设置wb=ActiveWorkbook.Sheets(“Sheet1”)。是否添加?
Sheet
对象没有
Add
方法。这是一个438错误。要在运行时创建新工作簿,只需执行以下操作:
Set wb=Workbooks.Add
另外,请执行
wb.SaveAs…
而不是
ActiveWorkbook
。我正在尝试使新工作簿包含工作表1任务,我正在尝试关闭由此代码生成的其他工作簿。我只是不确定如何设置wbk,以确保它引用了这个新工作簿。@theudster我编辑了我的答案以包括一些示例。非常感谢您的帮助。我是新来的,这可能是一个noob问题,但我编辑了我的问题,以反映您建议的更改,但仍然不断出现错误。非常感谢您的帮助。@theudster错误仍然是
438
错误吗?如果是,它在更新的代码中的什么位置?如果没有,你可能应该提出一个新问题;因为这似乎是一个新问题。此外,如果你正试图按照@David Zemens的推测去做——从现有的工作表中创建一个新的工作簿——那么在新问题中添加额外的解释(或更正的解释)会很有帮助。嗨,谢谢,但这似乎也会关闭当前的excel工作簿,并停止我代码的其他部分工作。请尝试
Set wb=Workbooks(Workbooks.Count)
。这将确保它是新创建的工作簿。否则,您需要澄清问题所在,或许还需要通过试错学习一点调试(请参阅:)上述代码将关闭新创建的工作簿。这不是你想要的吗?如果您不想关闭它,那么只需省略
wb.close
语句即可。如果要关闭其他工作簿,则需要指定要关闭的工作簿。
' Although the previous method is preferred
Dim wkb as Workbook
Workbooks.Add
Set wkb = ActiveWorkbook
Set wb = Workbooks.Add
Dim ws as Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
ws.Copy   ' If Destination isn't specified, this creates a new workbook
Dim wb As Workbook
Set wb = ActiveWorkbook ' The newly created workbook is Active now

strFileName = "C:\Users\" & ws.Name & ".xls" '<~~ this variable is never used, it doesn't do anything. You may want to remove it to avoid ambiguity.

wb.SaveAs Filename:=Range("B4").Value & Range("E6").Value & " vs " _
& Range("E7").Value & " - " & Format(Date, "dd-mm-yyyy")
wb.Close