[英]VBA - Copy pasting across visible columns
我有一个导入表的代码,然后继续隐藏与最终用户无关的列。
作为格式化过程的一部分,我需要向包含合并和未合并单元格的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
最好的循环遍历列或行(如果要删除其中的一些)的方法是倒退:
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
这样,您不必弄乱变量,也不必担心删除的单元格的效果。 在“添加”中:删除前无需选择列。
因此,问题的答案最终如下:
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
这很简单
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.