[英]Excel VBA - copying cell contents from one sheet to another
我正在从事一个项目,其中大量数据存储在 excel 工作簿中,每个季度都有一个新工作表。 我需要创建一个数据仪表板,显示过去 4 个季度的数据图表。 我已经设置了一个下拉列表来选择季度,并试图将相关数据从源工作表拉到仪表板工作表,但我无法让它工作。
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时,它显示消息“无法编译模块”。 我错过了什么?
提前致谢
伊恩
看来你可以简单地像下面这样:
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
你的 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
我注意到您选择使用工作表的索引 Sheets(Q4),其中 Q4 是整数,如果有人在工作簿中添加、移动或删除工作表,这可能会导致错误。
我强烈建议您改用工作表的名称。 公式将是 Sheets("Sheet's name").value 如果需要,您可以构造一个简单的函数来循环名称以获取 Q3、Q3 和 Q1 的先前工作表的名称。 在所有方面,我建议您限制使用工作表索引的错误机会。
另一个注意事项,我建议您使用正式的 If, Then, Else if, , , Else, End if。 不是嵌套的如果您使用,否则使用@user3598756 建议的 select Case 语句。
此致。
感谢上述建议,尤其是选择案例。
最后,我认为问题是由于使用旧版 Office 中的文件而导致的损坏,然后在较新的 Office 版本和 Mac 版 Office 上进行处理。 我真的开始怀疑自己,但是将所有内容复制并粘贴到空白工作簿中解决了问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.