VBA使用数组中的值创buildExcel图表

我有一个二维数组中的一些数据,我需要使用Excel图表创build图表。 但是,图表setsourcedata似乎只接受范围。 这意味着我必须将数组存储在某个电子表格的某个范围内,然后将范围作为input传递给图表。 所以我创build了一个临时表来将数据存储在一个特定的范围内,然后计划将它传递给create chart调用。 这是我创build的一个types

Private Type CItem CName As Variant CWeek(13) As Variant CDisabled(13) As Variant CEmpty(13) As Variant CEnabled(13) As Variant End Type Dim CItemArray(100) As CItem cnt1 = 0 //.. do something ActiveWorkbook.Sheets.Add(After:=Sheets("MainSheet")).Name = "WK_Report" Worksheets("WK_Report").Range("C3:C15").value = CItemArray(cnt1).CWeek() Worksheets("WK_Report").Range("D3:D15").value = CItemArray(cnt1).CDisabled() Worksheets("WK_Report").Range("E3:E15").value = CItemArray(cnt1).CEnabled() Worksheets("WK_Report").Range("F3:F15").value = CItemArray(cnt1).CEmpty() 

我的目标是将第一个CItem的整个CWeek数组分配给C3:C15的范围。 但是,上面使用的语法将Cweek,CDisabled,CEnabled,CEmpty的第一个元素分配给整个范围。 我在CWeek和其他人之后尝试了括号,但结果是一样的。

如何将数组值分配给范围? 我知道这些值在数组中,因为我在分配validation后执行了debug.print。

您已经遗漏了如何填充用户定义的types数组,但是您应该移动到二维变体数组。

 Private Type CItem CName As Variant CStuff(1 to 13, 1 to 4) As Variant End Type Dim CItemArray(100) As CItem, cnt1 as long //.. populate 100 CItemArray.CStuff with 13 rows by 4 columns each ActiveWorkbook.Sheets.Add(After:=Sheets("MainSheet")).Name = "WK_Report" cnt1 = 1 with Worksheets("WK_Report").Range("C3") .resize(ubound(CItemArray(cnt1).CStuff, 1), ubound(CItemArray(cnt1).CStuff, 2)) = CItemArray(cnt1).CStuff end with 

从我的angular度来看,用户定义的types只是阻碍,但一旦你得到它的工作,它可能是一个“设置和忘记”types的事情。 我使用了一个基于1的数组,所以你不必添加1到ubounds。

可以使用Application.Transpose :这里是一个简单的例子

 Option Explicit Private Type CItem CWeek(13) As Variant End Type Sub Tester() Dim itm As CItem, x As Long For x = 1 To 14 itm.CWeek(x - 1) = x Next x ActiveSheet.Range("C3:C15").Value = itm.CWeek '>> all "1" ActiveSheet.Range("D3:D15").Value = Application.Transpose(itm.CWeek) '>> 1 to 13 End Sub