如何隐藏VBA命名范围中的列?

时间:2018-11-15 13:35:50

标签: excel vba

我对VBA还是很陌生,我试图隐藏工作簿中的某些列。 我必须在VBA中执行此操作,因为该工作簿是Office的Analysis工作簿,因此我必须隐藏一些最终用户不必查看的列。 我的问题是,我无法指向列中的特定字母,因为,如果我指向工作簿中的特定列,则由于该工作簿可以像枢轴一样进行修改,并具有其他尺寸(针对打开它的默认值)代码,当用户添加新尺寸时将不会相同。因此,我必须找到其名称为ad的列。

所以现在我尝试了这个:

Sub Hide_Columns()
'Dim Sourcecell As Range
Dim wb As Workbook
Dim ws As Worksheet
'Set Sourcecell = Nothing
'Set Sourcecell = ThisSheet.Range("SapCrosstab1").Find("Colonna di calcolo", LookIn:=xlFormulas)
Set wb = ActiveWorkbook
Set ws = wb.Sheets("Demand Planning")

    wb.Sheets("Demand Planning").Range("Colonna di calcolo").EntireColumn.Hidden = True
End Sub

这里的问题是我有

  

“运行时错误1004:应用程序定义的错误或对象定义的错误”

,我不知道如何解决。 我评论了这3行内容,因为我不确定它们是否可以提供帮助。

1 个答案:

答案 0 :(得分:1)

您当前的尝试失败,因为Range("Colonna di calcolo")将不会搜索具有该标题的列。相反,它想要访问具有该名称的命名范围,并且,如果您未定义此名称,它将恰好抛出此错误1004。

我认为您对SourceCell的尝试还不错-发出“查找”命令并隐藏找到的单元格的EntireColumn。您的错误是没有对象ThisSheet。有一些对象ThisWorkbook指向存储代码的整个工作簿,或者是ActiveWorkbook这是当前显示的工作簿(不一定是存储宏的工作簿)。

您可以通过为列定义命名范围来解决问题-在这种情况下,您的代码应该可以使用。
或将代码更改为

Dim ws as Worksheet
Set ws = ThisWorkbook.Sheets("Demand Planning")

Dim Sourcecell as Range
Set Sourcecell = ws.Range("1:1").Find("Colonna di calcolo", LookIn:=xlFormulas)
If Not Sourcecell Is Nothing Then
    Sourcecell.EntireColumn.Hidden = True
End If