簡體   English   中英

VBA-跨可見列復制粘貼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM