2017-10-19 102 views
0

我可以发誓,这是以前工作 - 但由于某种原因,这似乎并没有工作了。我正在尝试使用活动工作表(同样,这可能不是非常漂亮或干净,但对于VBA我还是很新的),将它复制到新的工作表中,在新的工作表中,我想打开Excel保存为对话框,并在工作表被保存(以CSV)格式,我想工作簿关闭(或者即使不关闭),至少用户返回到原来的工作簿,并结束子VBA复制方法保持失败?

Sub saveExportAs() 
    Application.CutCopyMode = False 
    Sheets("load").Select 
    ActiveWorkbook.Activate 
    Sheets("load").Copy 
    Dim varResult As Variant 
    Dim ActBook As Workbook 
    'display the save as dialog 
    varResult = Application.GetSaveAsFilename(InitialFileName:="\\network\folder\upload_" & Format(Date, "yyyy-mm-dd") & ".csv", FileFilter:= _ 
    "Comma Delimited/Upload Files (*.csv),*.csv", Title:="Save Upload File") 
    'check to make sure the user didn't cancel 
    If varResult <> False Then 
     ActiveWorkbook.saveAs Filename:=varResult, _ 
     FileFormat:=xlCSV 
     Exit Sub 
    End If 
End Sub 
+0

你是否循环了代码?哪一部分你收到错误? –

+0

我有,它挂在表格(“负载”)。复制 – cespeedish

+2

如果你拿出第二和第三行('.Select'和'.Activate')有帮助吗?选择工作表后,为什么要激活活动工作簿?另外请注意,最好的做法是[避免使用'.Select' /'.Activate'](https://stackoverflow.com/questions/10714251)。 – BruceWayne

回答

0

你可以使用定义为工作簿/工作表,以避免出现问题的床单......可能是这样的:

Sub saveExportAs() 
Dim wb1, wb2 As Workbook 
Dim ws As Worksheet 
Dim varResult As Variant 
Set wb1 = ThisWorkbook 
Set ws = ThisWorkbook.Worksheets("load") 
ws.Copy 
Set wb2 = ActiveWorkbook 
varResult =  Application.GetSaveAsFilename(InitialFileName:="\\network\folder\upload_" & Format(Date, "yyyy-mm-dd") & ".csv", FileFilter:= _ 
"Comma Delimited/Upload Files (*.csv),*.csv", Title:="Save Upload File") 
    If varResult <> False Then 
     wb2.SaveAs Filename:=varResult, FileFormat:=xlCSV 
     wb2.Close Savechanges:=True 
     Exit Sub 
    End If 
wb1.Activate 
End Sub 
+0

所以尝试后,我得到的消息:“未找到路径:XXXX”其中XXXX只是一群神秘的字符,而不是字母或数字,但无法识别的乱码。然后运行时错误'1004'被抛出; “方法'复制'对象'_Worksheet'失败” – cespeedish

+0

尝试使用您的实际文件夹路径而不是“\\ network \ folder \ upload”。如果您仍然只能在路径选择中遇到错误,请尝试使用文件系统对象(FSO) –

0

尝试......

Sub exportAsCSV() 
    Dim wb As Workbook 
    Set wb = ActiveWorkbook 

    SaveCopyAsCSV ("Sheet1") ' replace Sheet1 with whatever sheet name you need 
    wb.Activate 

End Sub 

Private Function SaveCopyAsCSV(SourceSheet As String) 

    Application.DisplayAlerts = False 

    ThisWorkbook.Sheets(SourceSheet).copy 
    ActiveWorkbook.SaveAs fileName:=SourceSheet, FileFormat:=xlCSV, CreateBackup:=True 
    ActiveWorkbook.Close 

    Application.DisplayAlerts = True 

End Function 
+0

我认为这会起作用 - 但我一直在使用.copy方法失败。我不知道可能会导致这种情况。 – cespeedish

+0

你得到的错误是什么? – Maldred

+0

运行时错误'1004'被抛出; “对象'_Worksheet'的方法”复制“失败” – cespeedish