2016-05-08 136 views
1

我正在处理大量数据存储在Excel工作簿中的项目,每个季度都有一个新表单。我需要创建一个数据显示板,显示过去4个季度的数据图。我已经设置了一个下拉菜单来选择季度,并试图将相关数据从源表单中提取到仪表板表单中,但我无法使其工作。Excel VBA - 将单元格内容从一个表单复制到另一个表单

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上这个项目,但也尝试当我看着它显示消息“无法编译模块”在PC上的可变selectedQ调试这在Windows Office 2007中。我错过了什么?

在此先感谢

伊恩

+0

我应该补充说,Q1 - Q4是从4张不同的纸张中选择数据。然而,调试这个表明代码没有从工作表中拾取selectedQ然后识别其他工作表以从中检索单元格内容。 – Rossi

+0

确保'ActiveSheet'是你的单元格“B3”你必须从中选择的值。你最好使用一些完全合格的名字,比如'Worksheets(“MySheet”)。范围(“B3”)' – user3598756

回答

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 
+0

谢谢。我会试试这个。 – Rossi

0

你如果说法应该是

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 
0

我注意到,您选择使用的板材,片材(Q4),其中Q4为整数的索引,这可能会导致错误,如果有人添加,移动或移除工作簿片材。

我强烈建议您改用工作表的名称。公式将为表格(“工作表名称”)值 如果需要,可以构造一个简单的函数,该函数循环使用名称以获取Q3,Q3和Q1的前一页名称。无论如何,我建议您限制使用图表索引的错误机会。


另一个通知,我建议你使用正式的If,然后,否则,如果,,,否则,结束如果。不是嵌套的如果您使用了,否则使用@ user3598756建议的选择Case语句。

最好的问候。

0

感谢上述建议,尤其是选择案例。

最后,我认为问题是由于使用旧版Office文件导致的损坏,然后在较新的Office版本和Mac版的Office上使用该文件造成的。我真的开始怀疑自己,但是将所有内容复制并粘贴到空白工作簿中解决了这个问题。

相关问题