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

我正在开发一个项目,其中大量数据存储在Excel工作簿中,每个季度都有一个新表格。 我需要创build一个显示过去4个季度数据图表的数据显示板。 我已经设置了一个下拉菜单来select季度,并试图将相关数据从源表单中提取到仪表板表单,但是我无法使其工作。

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上进行debugging。当我在PC上观察variablesselectedQ时,显示消息“无法编译模块”。 我错过了什么?

提前致谢

伊恩

看来你可以简单地去像这样:

 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 

我注意到您select使用表格的索引,表格(Q4),其中Q4是整数,如果有人从工作簿中添加,移动或删除工作表,可能会导致错误。

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


另外还有一个通知,那就是我build议你用正式的If,那么,否则,如果,其他的,End if。 不是嵌套如果您使用了,否则使用@ user3598756build议的selectCase语句。

最好的祝福。

感谢上面的build议,尤其是select案例。

最后,我认为问题是由于使用旧版Office的文件而导致的,然后在新的Office版本和Mac版本的办公室中进行。 我真的开始怀疑自己了,但是把所有东西都复制并粘贴到空白的工作簿中解决了这个问题。