【问题标题】:How to use the filename of an excel file to change a column of cells?如何使用excel文件的文件名更改一列单元格?
【发布时间】:2012-06-26 21:30:44
【问题描述】:

我正在尝试编写一个 excel 宏/VBA 代码来根据文件的标题调整列的内容。目前,我有一个宏设置,可以根据我输入的 URL 下载 csv 文件。宏会自动格式化和命名文件。我想使用文件名/标题的前 5 个字符来自动格式化其他单元格。

例如,文件名为 48GHY_fjfdkjfe33.RHRH-msadklfjeiojo。我的文件中有一个名为 name+type 的列。我想将“名称”行与标题结合起来并让它填充字段。下面的两张图片提供了之前和之后的情况。

目前,我必须在单独的字段中输入前 5 个字符,然后使用: ="48GHY"&a2 函数。

有没有办法在 excel/VBA 中做到这一点?


最初的问题已得到解答,但现在我在尝试将其放入宏时寻求更多帮助。因为这仍然是同一个问题,所以我认为不需要再发一个帖子。

这是我正在使用的当前宏/VBA。当我运行它时,它只会显示#VALUE!在细胞中。两组代码唯一不同的是A和B列现在是J和K。

' Insert Column after name and then rename it name+type

Rows(1).Find("name").Offset(0, 1).EntireColumn.Insert
Rows(1).Find("name").Offset(0, 1).FormulaR1C1 = "name+type"

' 冻结第一行

Rows("1:1").Select
With ActiveWindow
    .SplitColumn = 0
    .SplitRow = 1
End With
ActiveWindow.FreezePanes = True

'保存文件

ActiveWorkbook.Save

'将内容添加到名称+类型列

Range("K2").Select
ActiveCell.FormulaR1C1 = "=LEFT(MID(CELL(""filename"",RC[-1]),SEARCH(""["",CELL(""filename"",RC[-1]))+1,SEARCH(""]"",CELL(""filename"",RC[-1]))-SEARCH(""["",CELL(""filename"",RC[-1]))-1),5)&RC[-1]"
Range("K2").Select
Selection.Copy
Range("K2:K8294").Select
ActiveSheet.Paste

' 自动调整所有列

Columns("A:AK").Select
Selection.Columns.AutoFit

结束子

*一条附加评论。我修改了您在宏中提供的代码,但是在我运行它之后的每个单元格中,以下代码位于 k 列中:

=LEFT(MID(CELL("filename",J2),SEARCH("[",CELL("filename",J2))+1,SEARCH("]",CELL("filename",J2))-SEARCH("[",CELL("filename",J2))-1),5)&J2

*最后一个音符。文件名被保存为 48GHY_fjfdkjfe33.RHRH-msadklfjeiojo#csv.txt (这和它有什么关系吗?)

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    把这个放在B2

    =LEFT(MID(CELL("filename",A2),SEARCH("[",CELL("filename",A2))+1, SEARCH("]",CELL("filename",A2))-SEARCH("[",CELL("filename",A2))-1),5)&A2

    编辑

    说明

    这个公式=CELL("filename",A2) 为您提供文件名。例如

    C:\Users\Siddharth Rout\Desktop\[Book1.xlsx]Sheet1

    还有这个公式

    =MID(CELL("filename",A2),SEARCH("[",CELL("filename",A2))+1, SEARCH("]",CELL("filename",A2))-SEARCH("[",CELL("filename",A2))-1)

    只取出上面的文件名给你Book1.xlsx

    Left() 根据您指定的字符数返回文本字符串中的第一个或多个字符。

    HTH

    【讨论】:

    • +1 好了,同时发布几乎相同的内容。
    • 文件名不是保存在本地还是只读的有关系吗?
    • @Jonny:您不必输入文件名 :) 只需复制并粘贴公式即可:)
    • 很奇怪。当文件未在本地保存时,我遇到了#value 错误。保存后,代码运行良好。
    • 很好 - 您可能希望按照 Scott 的建议在 CELL 函数的第二个参数中添加一个引用,以便在您重新计算另一个工作簿处于活动状态时工作簿名称保持固定。
    【解决方案2】:

    也许您甚至不需要 VBA。像这样的东西对我有用。

    =MID(CELL("filename",A2),FIND("[",CELL("filename",A2))+1,5) & A2
    

    查找单元格公式以了解文件名的工作原理。

    【讨论】:

    • + 1 是的。再次相同的时间:)
    • 是的,不过在这个上加倍努力。
    • 当我在本地保存文件后,代码运行良好,但在只读文件时返回 #value 错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2017-08-18
    • 1970-01-01
    相关资源
    最近更新 更多