Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA从excel选项卡名称中删除前缀_Vba_Excel - Fatal编程技术网

VBA从excel选项卡名称中删除前缀

VBA从excel选项卡名称中删除前缀,vba,excel,Vba,Excel,我有一个包含许多选项卡的excel文件。所有选项卡都命名为:“pboro bz.csv”、“pboro fd.csv”、“pboro ha.csv”等 我希望将所有这些重命名为“bz.csv”、“fd.csv”、“ha.csv” 此外,根据其他VBA导入的数据,选项卡名称可能有不同的前缀。因此,我在标题为“Setup”的表格中有一个单元格(B8),其前缀我希望删除,在本例中为“pboo” 我正在尝试使用以下代码: Sub RemovePrefix() Dim WS As Worksheet

我有一个包含许多选项卡的excel文件。所有选项卡都命名为:“pboro bz.csv”、“pboro fd.csv”、“pboro ha.csv”等

我希望将所有这些重命名为“bz.csv”、“fd.csv”、“ha.csv”

此外,根据其他VBA导入的数据,选项卡名称可能有不同的前缀。因此,我在标题为“Setup”的表格中有一个单元格(B8),其前缀我希望删除,在本例中为“pboo”

我正在尝试使用以下代码:

Sub RemovePrefix()
  Dim WS As Worksheet
  Dim Val As String
  Val = Setup.Range("B8").Value
  Const Prefix As String = Val
  For Each WS In Worksheets
    If WS.Name Like Prefix & "*" Then WS.Name = Mid(WS.Name, Len(Prefix) + 1)
  Next
End Sub
代码在线路上崩溃

 Const Prefix As String = Val
错误为“需要常量表达式”

我怀疑这是因为我将Dim与Val一起使用,然后将Const与Prexif一起使用。 但是,当我将代码改编为以下内容时:

Sub RemovePrefix()
  Dim WS As Worksheet
  Dim Val As String
  Val = Setup.Range("B8").Value
   For Each WS In Worksheets
   If WS.Name Like Val & "*" Then WS.Name = Mid(WS.Name, Len(Val) + 1)
  Next
End Sub
我收到与我的代码行相关的错误“objectrequired”

  Val = Setup.Range("B8").Value

我不确定自己哪里出了问题(作为一个相对的VBA noob可能没有帮助)。

现在它崩溃了,因为您从未将
设置设置为工作表

Dim setup as Worksheet
Set setup = Sheets("Setup")

我们应该做到这一点。另外,它看起来像
Val
会改变,所以您不想将其设置为
常量

问题1:a
const
只能设置为const,而
Val
不是。所以这些代码永远不会工作。您的第二次尝试更好,但我怀疑问题2,
Setup
不是您其中一张工作表的代码名?啊,我想是因为我以前将其设置为工作表,它将携带整个工作表-只是看到我没有将其设置为“公共”工作表。非常感谢您的快速响应!请注意,如果您将工作表对象(在VBE中)命名为
Setup
@ScottHoltzman,则
Setup.Range(“B8”).Value
将起作用-您的意思是如果我在项目视图中更改工作表的名称(其中是工作表图标,然后是
thiswoolk
图标,以及该图标下的模块),您可以只执行
设置
,而不声明它吗?整洁的我不知道,是的。您可以更改它,或者将其称为
Sheet1.Cells(x,y)
。这是一个很酷的特性,但是如果你能很明显地看到阅读代码时出现的问题,那么
Sheet1…
Sheet2所以你必须有意义地命名它们。