2016-05-08 139 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上使用該文件造成的。我真的開始懷疑自己,但是將所有內容複製並粘貼到空白工作簿中解決了這個問題。

相關問題