Excel宏 - 保存为

时间:2016-09-16 00:52:04

标签: excel excel-vba vba

我有几百个excel工作簿都具有完全相同的格式和结构。我需要准备好以后处理的每个文件:

  1. 删除一行,
  2. 添加三列
  3. 将占位符文本添加到其中一列(稍后将使用脚本替换为文件名)
  4. 将文件保存为以其最初具有的文件名分隔的制表符。(制表符分隔更改的目的是我想要这种格式,以便我可以用文件名替换#3中的占位符文本)
  5. 理想情况下,我可以打开运行此操作所需的所有工作簿,并在每个工作簿上运行宏,将每个文件的原始名称保存为制表符分隔文件,并在1-3中进行所有更改。

    我在这段代码上一直遇到语法错误:

    Sub Macro4_eggplant()
    
        Dim newname as string
        newname = ThisWorkbook.FullName
        Rows("1:1").Select
        Selection.Delete Shift:=xlUp
        Columns("C:E").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Range("C2").Select
        ActiveCell.FormulaR1C1 = "Filename.xls"
        Range("C2").Select
        Selection.AutoFill Destination:=Range("Table4[Column1]")
        Range("Table4[Column1]").Select
        Range("D5").Select
    
        ActiveWorkbook.SaveAs Filename:= _
            "/Users/matthewhughes/Desktop/" "newname" ".txt" _
            , FileFormat:=xlText, CreateBackup:=False
    End Sub
    

1 个答案:

答案 0 :(得分:0)

ThisWorkbook.FullName将返回包含宏的工作簿的完全限定文件名。您的以下代码(在修复语法错误之后,即Desktop/" "newname" ".txt"应该是Desktop/" & newname & ".txt")只期望基本文件名(即没有路径和扩展名),并且可能应该指的是ActiveWorkbook而不是宏工作簿。

Sub Macro4_eggplant()

    Dim newname as String
    With ActiveSheet
        newname = Left(.Parent.Name, InstrRev(.Parent.Name, ".") - 1)
        .Rows(1).Delete Shift:=xlUp
        .Columns("C:E").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        .Range("C2").FormulaR1C1 = "Filename.xls"  ' or = .Parent.Name ?
        .Range("C2").AutoFill Destination:=.Range("Table4[Column1]")

        .Parent.SaveAs Filename:= "/Users/matthewhughes/Desktop/" & newname & ".txt", _
                       FileFormat:=xlText, _
                       CreateBackup:=False
    End With
End Sub

(我假设Table4存在于某个地方。)