繁体   English   中英

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

[英]Error 1004 - 'select method of worksheet class failed' when worksheet is Selected

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

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

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

因此,每个选项卡的代码看起来相同,但仅在表格中填充的 excel 公式有所不同。问题出现在工作表选择、工作表 9、工作表 11 和工作表 21 中,最后一个是我收到错误的地方,以前的标签是在正确的选项卡(工作表)中执行没有任何问题。

在此处输入图片说明

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

 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

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

我试过了:

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

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

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

NameIndexCodeName是工作表的三个属性,区别很大。 在屏幕截图的代码中, Sheet21是一个CodeName ,它可能对应于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表是xlVeryHidden ,则TruefalseIf Worksheets(21).Visible = FalsexlVeryHidden xlVeryHidden被评估为2 ,这被评估为True

长话短说:

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

一般来说:

您正在尝试按索引选择工作表,但由于您删除了一些工作表,因此您做得太过分了。

名为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM