使用文件名单元格值保存新文件

时间:2019-02-05 13:59:29

标签: excel vba save-as

我正在为每个部门制定通用的生产时间表(wbTime),该时间表适用于所有班次和生产线。我有需要输入所有必要信息的地方,所有数据都被复制到另一个工作簿(wbLog)中的表中,并保存下来以便能够对生产数据进行分析。

但是,当试图根据班次和生产线将实际时间表保存在正确的文件夹中时,我开始遇到问题。我有它从某些单元格中提取路径的一部分,文件名形成了输入的日期。它到达最后一行,并抛出运行时错误1004“ object_Worbook的方法'SaveAs''失败”。

我只使用vba玩了两个月,所以我看不到它可能很小……

Sub TransferData()

   If ActiveSheet.Range("E2").Value = "" Then
        MsgBox "Operator Name Required", vbInformation, "ALERT: Missing Information"
    Cancel = True
   Exit Sub
   End If

   If ActiveSheet.Range("H2").Value = "" Then
        MsgBox "Date Required", vbInformation, "ALERT: Missing Information"
    Cancel = True
   Exit Sub
   End If

   If ActiveSheet.Range("K2").Value = "" Then
        MsgBox "Shift Required", vbInformation, "ALERT: Missing Information"
    Cancel = True
   Exit Sub
   End If

   If ActiveSheet.Range("M2").Value = "" Then
       MsgBox "Line Required", vbInformation, "ALERT: Missing Information"
    Cancel = True
   Exit Sub
   End If



   Dim wbTime As Workbook
   Set wbTime = ThisWorkbook
   Dim wbData As Workbook
   Dim LastRow As Long

   Set wbTime = ActiveWorkbook
   With wbTime.Sheets("Production Time Sheet")
       LastRow = .Range("E" & .Rows.Count).End(xlUp).Row
   End With
   wbTime.Sheets("Production Time Sheet").Range("A6:R" & LastRow).Copy

   Set wbData = Workbooks.Open("S:\Lean Carrollton Initiative\Michael\Time Sheet Data LT Test.xlsm")
   Set wbData = ActiveWorkbook
   wbData.Worksheets("Log").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues

   wbData.Close SaveChanges:=True



   Dim Fname As String
   Dim Path As String
   Dim shft As String
   Dim Line As String

Set wbTime = ActiveWorkbook
    Fname = Sheets("Production Time Sheet").Range("I2").Text

    shft = Sheets("Production Time Sheet").Range("Z9").Text

    Line = Sheets("Production Time Sheet").Range("AC11").Text

    Path = "K:\Groups\OFS Time Sheets\8hr Production Schedule\LT Jacketing\" & shft & Line & Fname & ".xlsx"

ActiveWorkbook.SaveAs filename:=Path, FileFormat:=xlNormal

End Sub

2 个答案:

答案 0 :(得分:1)

a)不要使用Range.Text,而要使用Range.Value2
Text会给您准确单元格中写的内容,并且如果单元格显示###,因为您的单元格要缩小以显示数字,它将给您{{ 1}}。

b)在###之前放置一个语句Debug.print path,然后在立即窗口(Ctrl + G)中检查路径是否正是您期望的路径。

c)确保发出SaveAs-命令时,尚未在Excel中打开同一文件-这种情况经常发生在您反复测试代码时(它可能从上一次测试开始仍然打开)。 SaveAs保存文件副本并保持打开状态!

d)在使用扩展名SaveAs命名文件时使用FileFormat:=xlOpenXMLWorkbookxlsx将使用旧的Excel文件格式保存文件,并期望以xlNormal作为扩展名。

e)尝试从Excel另存为对话框中保存名称完全相同的文件,以查看文件名是否正确以及您是否有权保存文件。

答案 1 :(得分:1)

您正在使用文本2/5/2019.xlsx作为文件名。据我所知,simbol /在Windows中不能用于命名文件。

尝试使用其他名称的文件。像这样:

Fname = Replace(Sheets("Production Time Sheet").Range("I2").Text,"/","-")