我正在开发一个项目,其中大量数据存储在excel工作簿中,每个季度都有一个新工作表。我需要创建一个数据仪表板,显示过去四个季度的数据图表。我已经设置了一个下拉列表来选择该季度,并且我试图将相关数据从源表格提取到仪表板表格,但我无法让它工作。
Private Sub SelectionChange(ByVal Target As Range)
Dim Q4 As Integer, Q1 As Integer, Q2 As Integer, Q3 As Integer, selectedQ As Variant
'read selected quarter
selectedQ = ActiveSheet.Range("B3").Value
'compare selected quarter to identify sheet index
'Q4 is current quarter
If selectedQ = "15-16 Q4" Then Q4 = 10 Else
If selectedQ = "16-17 Q1" Then Q4 = 11 Else
If selectedQ = "16-17 Q2" Then Q4 = 12 Else
If selectedQ = "16-17 Q3" Then Q4 = 13 Else
If selectedQ = "16-17 Q4" Then Q4 = 14 Else
If selectedQ = "17-18 Q1" Then Q4 = 15 Else
If selectedQ = "17-18 Q2" Then Q4 = 16 Else
If selectedQ = "17-18 Q3" Then Q4 = 17 Else
If selectedQ = "17-18 Q4" Then Q4 = 18 Else
If selectedQ = "18-19 Q1" Then Q4 = 19 Else
End If
'set sheet index for previous quarters
If Q4 > 3 Then
Q3 = Q4 - 1
Q2 = Q4 - 2
Q1 = Q4 - 3
End If
'fill current quarter using Sheets(1).Range(1, 1) as source
'under 3 reg
ActiveSheet.Range("C10").Value = Sheets(Q4).Range("Z21").Value
ActiveSheet.Range("C11").Value = Sheets(Q4).Range("Z29").Value
ActiveSheet.Range("C12").Value = Sheets(Q4).Range("Z39").Value
ActiveSheet.Range("C13").Value = Sheets(Q4).Range("Z50").Value
ActiveSheet.Range("C14:C19").Value = Sheets(Q4).Range("Z60:Z65").Value
End Sub
我最初在Mac上启动了这个项目但是也尝试在Windows Office 2007上调试它。当我在PC上观察变量 selectedQ 时,它显示消息“无法编译模块” 。我错过了什么?
提前致谢
伊恩
答案 0 :(得分:1)
看起来你可能只是如下:
Q4 = 6 + (Left(selectedQ, 2) - 15)*4 + Right(selectedQ, 1)
如果你想保持它像你正在做的那样你最好使用Select Case
构造,如下所示:
Select Case
Case "15-16 Q4"
Q4 = 10
Case "16-17 Q1"
Q4 = 11
Case "16-17 Q2"
Q4 = 12
Case "16-17 Q3"
Q4 = 13
Case "16-17 Q4"
Q4 = 14
Case "17-18 Q1"
Q4 = 15
Case "17-18 Q2"
Q4 = 16
Case "17-18 Q3"
Q4 = 17
Case "17-18 Q4"
Q4 = 18
Case "18-19 Q1"
Q4 = 19
End Select
答案 1 :(得分:0)
你的If语句应该是
If selectedQ = "15-16 Q4" Then
Q4 = 10
ElseIf selectedQ = "16-17 Q1" Then
Q4 = 11
ElseIf selectedQ = "16-17 Q2" Then
Q4 = 12
ElseIf selectedQ = "16-17 Q3" Then
' Etc
End If
答案 2 :(得分:0)
我注意到您选择使用工作表的索引,表格(Q4),其中Q4是整数,如果有人从工作簿中添加,移动或删除了工作表,则可能会导致错误。
我强烈建议您改用工作表的名称。公式将是Sheets(" Sheet'的名称")。值 您可以构建一个简单的函数来循环遍历名称以获取之前的工作表' Q3,Q3和Q1的名称(如果需要)。在各方面,我建议你限制使用表索引的错误几率。
另一个通知,我建议你使用正式的If,Then,Else if,,Else,End if。不是嵌套如果使用,否则使用@ user3598756建议的select Case语句。
最诚挚的问候。
答案 3 :(得分:0)
感谢上面的建议,特别是选择案例。
最后,我认为问题是由于使用旧版办公室中的文件导致的损坏,然后是在较新的办公室版本和Mac办公室中进行的。我真的开始怀疑自己,但将所有内容复制并粘贴到空白工作簿中解决了这个问题。