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
Excel VBA Can';t使用变量holding date值保存文件名_Excel_File_Vba - Fatal编程技术网

Excel VBA Can';t使用变量holding date值保存文件名

Excel VBA Can';t使用变量holding date值保存文件名,excel,file,vba,Excel,File,Vba,我有一些代码,可以将当前工作表复制并粘贴到一个空白的新工作簿中,然后根据某些单元格(存储在变量中)的值进行保存 具体来说,这些是站点、客户和访问日期 对于站点和客户端,这一切都可以正常工作,但是当我在要保存的文件名中包含日期变量时,它会抛出一个错误:运行时错误76-找不到路径 如有任何帮助/建议,我将不胜感激 Sub Pastefile() Dim client As String Dim site As String Dim visitdate As String client = Rang

我有一些代码,可以将当前工作表复制并粘贴到一个空白的新工作簿中,然后根据某些单元格(存储在变量中)的值进行保存

具体来说,这些是站点、客户和访问日期

对于站点和客户端,这一切都可以正常工作,但是当我在要保存的文件名中包含日期变量时,它会抛出一个错误:运行时错误76-找不到路径

如有任何帮助/建议,我将不胜感激

Sub Pastefile()

Dim client As String
Dim site As String
Dim visitdate As String
client = Range("B3").Value
site = Range("B23").Value
screeningdate = Range("B7").Value

Dim SrceFile
Dim DestFile

SrceFile = "C:\2013 Recieved Schedules\schedule template.xlsx"
DestFile = "C:\2013 Recieved Schedules" & "\" & client & " " & site & " " & visitdate  & ".xlsx"

FileCopy SrceFile, DestFile

ActiveWindow.SmallScroll Down:=-12
Range("A1:I37").Select
Selection.Copy
ActiveWindow.SmallScroll Down:=-30
Workbooks.Open Filename:= _
    "C:\Schedules\2013 Recieved Schedules" & "\" & client & " " & site & " " &     visitdate & ".xlsx", UpdateLinks:= _
0
Range("A1:I37").PasteSpecial Paste:=xlPasteValues
Range("C6").Select
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWindow.Close

End Sub

在文件名中使用日期时,您永远不希望依赖日期的默认文本表示形式,因为这取决于当前区域设置

首先,您应该将日期存储为date,并以安全的方式为文件名显式设置格式:

Dim visitdate As Date
visitdate = Range("b7").Value

dim visitdate_text as string
visitdate_text = Format$(visitdate, "yyyy\-mm\-dd")

您还可以考虑从您的其他值中删除任何特殊字符,如“代码> \/COD>”,例如“代码>客户端< /代码>和<代码>站点< /代码>。否则问题可能会再次出现。

以下是我对代码重写的建议:

Sub Pastefile()

Dim client As String
Dim site As String
Dim visitdate As String
client = Range("B3").Value
site = Range("B23").Value
visitdate = Range("B7").Value

Dim SrceFile
Dim DestFile

If IsDate(visitdate) Then

SrceFile = "C:\2013 Received Schedules\schedule template.xlsx"
DestFile = "C:\2013 Received Schedules" & "\" & Trim(client) & " " & Trim(site) & " " & Str(Format(Now(), "yyyymmdd")) & ".xlsx"

If Trim(Dir("C:\2013 Received Schedules\schedule template.xlsx")) <> "" Then
FileCopy SrceFile, DestFile
Else
MsgBox (SrceFile & " is not available in the folder")
GoTo EndCode
End If

Range("A1:I37").Select
Selection.Copy

Workbooks.Open Filename:= _
"C:\Schedules\2013 Received Schedules" & "\" & client & " " & site & " " & visitdate & ".xlsx", UpdateLinks:= 0
Range("A1:I37").PasteSpecial Paste:=xlPasteValues
Range("C6").Select
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWindow.Close

Else
MsgBox ("Please input the correct date in cell B7")
ActiveSheet.Range("B7").Activate
End If
EndCode:
End Sub
子文件()
将客户端设置为字符串
将站点设置为字符串
将visitdate设置为字符串
客户=范围(“B3”).值
站点=范围(“B23”)。值
visitdate=范围(“B7”)。值
暗SrceFile
暗色文件
如果是IsDate(visitdate),则
SrceFile=“C:\2013已接收计划\计划模板.xlsx”
DestFile=“C:\2013已收到计划”&“\”&Trim(客户端)&“&Trim(站点)&”&Str(格式(Now(),“yyyymmdd”)&.xlsx”
如果Trim(Dir(“C:\2013已接收计划\计划模板.xlsx”)”),则
FileCopy SrceFile,DestFile
其他的
MsgBox(SrceFile&“在文件夹中不可用”)
转到结束码
如果结束
范围(“A1:I37”)。选择
选择,复制
工作簿。打开的文件名:=_
“C:\Schedules\2013已收到计划”&“\”&客户端和站点和访问日期和.xlsx”,更新链接:=0
范围(“A1:I37”)。粘贴特殊粘贴:=XLPasteValue
范围(“C6”)。选择
Application.CutCopyMode=False
活动工作簿。保存
活动窗口,关闭
其他的
MsgBox(“请在单元格B7中输入正确的日期”)
ActiveSheet.范围(“B7”).激活
如果结束
结束代码:
端接头

如果日期包含
/
它们将被解释为路径的一部分。
msgbox“C:\Schedules\2013已收到的日程表”&“\”&客户端和站点和访问日期和.xlsx”
看起来像什么?你说得对,谢谢你的提醒。我已经确定这些文件的格式是“2013年1月1日”,假设它不会绊倒我。我怎样才能避免这个问题?谢谢,你好。事实上,您的代码似乎有缺陷。您看到了吗,您提到的是screeningdate,而不是上面声明的变量visitdate?最好使用调试一步一步(F8)来运行代码,而不是使用F5来彻底检查代码。希望这个小小的想法能帮助你更好地编码:-)随着文件数量的增加,你会意识到用这样的扩展名保存文件是一种不好的方法。我建议将其保存到具有名称的文件夹中,即客户、站点、访问日期。从长远来看,这将使您更容易进行任何类型的搜索或分析感谢您的帮助,这两个问题都已得到纠正,现在一切正常。