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 

这简直太奇怪了