如何隐藏VBA命名区域中的列



我对VBA很陌生,正试图在工作簿中隐藏一些列。我必须在VBA中执行此操作,因为该工作簿是一个Analysis for Office工作簿,所以我必须隐藏一些最终用户不必看到的列。我的问题是,我无法指向列的特定字母,因为工作簿可以像枢轴一样进行修改,相对于打开时使用的默认维度,它具有其他维度,如果我指向代码中的特定列,那么当用户添加新维度时,它将不一样。所以我必须找到有名字的专栏并将其隐藏起来。

所以现在我尝试了这个:

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行,因为我不太确定它们是否有帮助。

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

我认为您对SourceCell的尝试还不错——发出Find命令并隐藏找到的单元格的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

最新更新