我有一个导入表的代码,然后继续隐藏与最终用户无关的列。
作为格式化过程的一部分,我需要为包含合并和未合并单元格的Excel文档添加标题。
我的问题是,考虑到隐藏了许多列这一事实,证明无法导入标题。标题需要粘贴到许多非连续的列中。有没有办法做到这一点?
作为参考我已经复制粘贴了我用来隐藏列的代码。我猜我需要找到一种删除列的方法。问题是,如果我执行Columns(I).delete,循环在删除第一列后结束。
注意:代码中的counta产生17列。为了保密,我已经更改了我在if条件中检查的一些命名和列数。如果您需要任何其他信息,请告诉我
编辑:经过进一步调查和YowE3K的注释,代码中的问题是在删除一个列之后它正在跳过给定列的处理(因为它现在在列i中,代码认为它已经处理过了)
Sub NewView()
ActiveWindow.DisplayHeadings = False
Application.ScreenUpdating = False
ActiveSheet.Range("A14:Z14").Copy
ActiveWorkbook.Sheets.Add Before:=Worksheets(Worksheets.Count)
ActiveWorkbook.ActiveSheet.Name = "Temp_View"
ActiveWorkbook.Sheets("Temp_View").Activate
Worksheets("Temp_View").Range("B1").Formula = "=COUNTA($8:$8)"
ActiveSheet.Range("B8").PasteSpecial _
Paste:=xlPasteValues
Dim countUsedCols As Long
countUsedCols = ActiveWorkbook.Sheets("Temp View").Range("B1").Value
Dim currentColName As String
Dim newColName As String
For i = 2 To countUsedCols + 1
currentColName = ActiveSheet.Cells(8, i).Value
If currentColName <> "Salary" and currentColName<>"Net Worth" Then
ActiveSheet.Columns(i).Select
Selection.EntireColumn.Hidden = True
'Selection.EntireColumn.Delete
答案 0 :(得分:2)
循环遍历列或行的最佳方式(如果你要删除其中一些)是倒退的:
For i = countUsedCols To 2 Step -1
currentColName = ActiveSheet.Cells(8, i).Value
If currentColName <> "Salary" And currentColName <> "Net Worth" Then
ActiveSheet.Columns(i).Delete
End If
这样你就不必弄乱你的变量或者担心被删除的细胞的效果。 另外:您需要在删除之前选择该列。
答案 1 :(得分:0)
所以,问题的答案最终如下:
For i = 2 To countUsedCols
currentColName = ActiveSheet.Cells(8, i).Value
If currentColName <> "Salary" and currentColName<>"Net Worth" Then
ActiveSheet.Columns(i).Select
'Selection.EntireColumn.Hidden = True
Selection.EntireColumn.Delete
i = i - 1
If currentColName = "" Then
Exit for
End if
....
End if
这很奇怪