簡體   English   中英

Excel VBA - 將單元格內容從一張紙復制到另一張紙

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM