将单元格引用添加到文件名

时间:2018-03-16 16:00:36

标签: excel vba excel-vba

我正在尝试使用VBA保存文件,但文件名需要引用我正在运行宏的工作簿中的单元格。

我需要将启用宏的工作簿中的选项卡中的数据复制到新的逗号分隔文本文件中。文本文件(输出文件)的名称应包含对正在运行宏的工作簿中的单元格的引用。

我遇到的另一个问题是我想将输出文件中的分隔符更改为管道分隔文件,而不是逗号分隔文件。这可能吗?

这就是我试过的

Sheets("Cash Sheet").Select
    Rows("1:100000").Select
    Selection.Copy
    Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, 
SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs fileName:= _
        "C:\Desktop\CashBook_\" & Range("E3") & ".txt", FileFormat:=xlCSV, 
        CreateBackup:=False
    ActiveWindow.Close
    Sheets("Control Sheet").Select
    Range("A1").Select

3 个答案:

答案 0 :(得分:1)

问题在于:

ActiveWorkbook.SaveAs Filename:="C:\Desktop\CashBook_\" & Range("E3") & ".txt", FileFormat:=xlCSV, CreateBackup:=False

代码将引用您尝试保存的新工作簿中的单元格E3。

要修复,我会将文件的名称作为变量,然后将其传递给.SaveAs

Dim SaveName As String
   SaveName = Range("A1").Value
...

ActiveWorkbook.SaveAs Filename:="C:\temp\" & SaveName & ".txt", FileFormat:=xlCSV, CreateBackup:=False

答案 1 :(得分:1)

如果它在包含宏的文件中,则为

ActiveWorkbook.SaveAs Filename:= _
"C:\Temp\" & ThisWorkbook.Sheets("Whatever").Range("E3").text & ".txt", FileFormat:=xlCSV, _
CreateBackup:=False

答案 2 :(得分:1)

范围(“E3”)有一个日期(也许是2017年12月31日)您使用yyyymm的单元格格式来显示201712

您认为自己试图保存为201712.txt,但实际上您正在尝试保存为12/31 / 2017.txt,这是一个非法的文件名。

使用单元格的.Text属性来使用单元格显示的内容,而不是基础值。

    ActiveWorkbook.SaveAs fileName:= _
    "C:\Desktop\CashBook_\" & Range("E3").Text & ".txt", FileFormat:=xlCSV, 
    CreateBackup:=False