VBA – 复制粘贴可见的列
我有一个代码,导入一个表,然后继续隐藏与最终用户不相关的列。
作为格式化过程的一部分,我需要添加一个头到由合并和非合并单元格组成的Excel文档。
我的问题是考虑到一些列已被隐藏的事实,这是不可能的导入标题。 标题需要被粘贴在许多非连续的列上。 有没有办法做到这一点?
作为参考我有复制粘贴我用来隐藏列的第一个地方的代码。 我猜测我将需要find一种方法来删除列。 这个问题是,如果我做列(我).delete,循环结束后删除第一列。
注意:代码中的counta产生17列。 为了保密,我改变了一些在if条件下检查的命名和列数。 如果还有其他需要的信息,请告诉我
编辑:经过进一步的调查和YowE3K的评论在代码中的问题是,删除一个给定的列后处理删除(因为它现在在我认为它已经处理的第一列)
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
循环遍历列或行(如果你要删除其中的一部分)的最好方法是倒退:
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
这样,你不必惹你变数或担心被删除单元格的效果。 另外:在删除之前,你不需要select列。
所以,这个问题的答案如下:
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
这简直太奇怪了