簡體   English   中英

使用特定工作表名稱的數組來更新單元格值 VBA

[英]Use an array of Specific sheet names to update cell values VBA

我有一份正在構建的報告,我將在其中插入來自 3 個不同查詢的數據。 當導出為 CSV 時,我們的報告工具不會命名所有列(列名稱實際上已在報告系統中合並)。 我想使用宏為各個列添加標題行描述,但我在完成此操作時遇到了麻煩。

我正在嘗試使用數組和循環來完成此操作。 當我刷新報告時,其中的工作表名稱和單元格引用將保持靜態。 我將在工作簿中不僅僅包含這些工作表,所以我只想用這個宏“定位”特定的數據表。 宏在立即with worksheets(count)的行出錯。 錯誤代碼“424”“需要對象”。 我認為這是因為 Excel 沒有“看到”我的數組值作為工作表名稱,但我不確定如何轉換它。

我願意接受更有效的方式來完成這項任務。

在此先感謝您的幫助!

Sub Headerfill()

    ' Headerfill Macro
    ' Macro to fill in blanks in header row from data dump

    Dim WorkSheets As Variant
    Dim Count As Integer

    WorkSheets = Array( _
        "Sheets(""VH Own Brand Component"")", _
        "Sheets(""VH Sales and Inventory Component"")", _
        "Sheets(""VH Comp Sales Component"")")

    Count = 0
        Do While Count < 3

            With WorkSheets(Count)
                .Range("B3").Value = "A Name"
                .Range("D3").Value = "B Name"
                .Range("F3").Value = "C Name"
                .Range("H3").Value = "First"
                .Range("I3").Value = "Last"
                .Range("K3").Value = "VName"
            End With

        Count = Count + 1
        Loop

End Sub

根據評論編輯。 這應該呈現工作表順序或名稱更改沒有實際意義。 函數取自Chip 有關 代號屬性,請參閱 MSDN。

Sub Headerfill()

Dim ws As Variant
Dim wsCode As Worksheet

ws = Array(4, 5, 7)

For i = 0 To UBound(ws)
Set wsCode = getCodeName("Sheet" & ws(i))

        With wsCode
            .Range("B3").Value = "A Name"
            .Range("D3").Value = "B Name"
            .Range("F3").Value = "C Name"
            .Range("H3").Value = "First"
            .Range("I3").Value = "Last"
            .Range("K3").Value = "VName"
        End With

    Next

End Sub

Function getCodeName(codeName As Variant) As Worksheet
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.WorkSheets
        If StrComp(ws.codeName, codeName, vbTextCompare) = 0 Then
            Set getCodeName = ws
            Exit Function
        End If
    Next ws
End Function

更新以包含 BruceWaynes 的建議,以保持與代碼的原始意圖保持一致。 Findwindow 的建議也不錯,但選擇下面的答案。 還發現我引用的其中一張工作表在工作表名稱(由於長度)與我正在導出的報告的全名之間有省略號,導致下標錯誤,直到我更正。

Sub Headerfill()

' Headerfill Macro
' Macro to fill in blanks in header row from data dump

Dim WS As Variant
Dim i As Integer

WS = Array(_
"VH Own Brand Component",_
"VH Sales and Inventory Compo...",_
"VH Comp Sales Component")


    For i = 0 To UBound(WS)

        With WorkSheets(WS(i))
            .Range("B3").Value = "A Name"
            .Range("D3").Value = "B Name"
            .Range("F3").Value = "C Name"
            .Range("H3").Value = "First"
            .Range("I3").Value = "Last"
            .Range("K3").Value = "VName"
        End With

    Next

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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