错误1004-选择工作表时,``工作表类的选择方法失败''

时间:2018-10-09 10:38:01

标签: excel vba excel-vba

嗨,我的代码有问题,该代码的最后部分正收到以下错误:

  

错误1004-“工作表类的选择方法失败”

该代码基本上是在3个不同选项卡中执行的几乎相同代码的重复,问题出现在最后一个选项卡(sheet21)上,我不明白为什么原因,因为它适用于其他2个选项卡没问题。

因此每个选项卡的代码看起来都一样,只是表格中填充的excel公式有所不同。问题出现在工作表选择,sheet9,sheet11和sheet21中,最后一个是我收到错误的地方,以前的选项卡在适当的选项卡(表)中执行时没有任何问题。

enter image description here

整个代码很长,并且会添加带有格式和公式的列,所以这只是我收到错误的部分:

 Sub AddColumns()
'Inserts Four Columns at L:O - Q3 Week High tab

Worksheets(21).Range("L:O").EntireColumn.Insert
'Format colour

Worksheets(21).Select        '-------1004 ERROR HERE 
Range("L4:N55").Select
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With

最糟糕的是,代码的完全相同的构造适用于一次执行的Worksheets(9)和Worksheets(11),但是一旦到达Worksheet(21),我就会收到1004错误并且过程停止。

我尝试过:

 If Worksheets(21).Visible = False Then Sheets(21).Visible = True
Sheets(21).Select

但是由于某种原因,该代码正在某些完全不同的选项卡Worksheet(19)中执行,我不明白为什么。

我正在使用“ Worksheet(#)”命名约定,因为选项卡会定期更改名称,并且在添加Worksheet(21)之前,使用这种格式似乎可以正常工作。

2 个答案:

答案 0 :(得分:2)

NameIndexCodeName是工作表的三个属性,它们有很大的不同。在屏幕快照中的代码中,Sheet21CodeName,它可能对应于Worksheets(17)

要查看不同之处,请运行以下代码,并查看即时窗口:

Sub TestMe()
    Dim i As Long
    For i = 1 To Worksheets.Count
        Debug.Print Worksheets(i).Name
        Debug.Print Worksheets(i).Index
        Debug.Print Worksheets(i).CodeName
        Debug.Print "-----------------------"
    Next i
End Sub

如果工作表为If Worksheets(21).Visible = False,则

True false xlVeryHidden中无济于事。将xlVeryHidden评估为2,并将其评估为True

长话短说:

在选择前的行上写Worksheets(21).Visible = xlVisible。或Sheet21.Visible = xlVisible,因为您的数据中不存在Worksheets(21)

一般来说:

答案 1 :(得分:2)

您正尝试通过索引来选择工作表,但由于您已删除了一些工作表,因此您无法进行扩展。

称为Sheet21的选项卡可能被索引称为Sheets(16)Workheets(16)。我不确定,因为我看不到标签的顺序,此处的16是指标签栏上显示的第16个标签(包括隐藏等)。顺序。 >

无论选项卡在运行时的可见性如何,以下内容均应起作用。

Sub AddColumns()
  'Inserts Four Columns at L:O - Q3 Week High tab

  Sheet21.Range("L:O").EntireColumn.Insert
  'Format colour

  With Sheet21.Range("L4:N55").Interior
      .Pattern = xlNone
      .TintAndShade = 0
      .PatternTintAndShade = 0
  End With

如果要强制使其可见,只需使用:

Sheet21.Visible = xlVisible