Excel VBA - 将单元格内容从一个工作表复制到另一个工作表

时间:2016-05-08 08:22:25

标签: excel vba excel-vba

我正在开发一个项目,其中大量数据存储在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 时,它显示消息“无法编译模块” 。我错过了什么?

提前致谢

伊恩

4 个答案:

答案 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办公室中进行的。我真的开始怀疑自己,但将所有内容复制并粘贴到空白工作簿中解决了这个问题。