![](/img/trans.png)
[英]Excel VBA - Paste values from array based on cell values on the sheet
[英]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.