我对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行内容,因为我不确定它们是否可以提供帮助。
答案 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