2017-08-09 341 views
1

請在我身上輕鬆一下,因爲我是一名編程的新手,並且真的努力學習如何改進團隊中的流程,從而提高效率。VBA新手,錯誤1004和400

我已經放在一起的代碼複製公式拉動的數據,然後將其作爲值粘貼在同一工作表內。此代碼我已應用於多個工作簿,這些工作簿包含的工作表/選項卡數量不同。

問題1: 我在每個文件上的第一個工作表稱爲REGION。發生的情況是代碼沒有像設計的那樣在「REGION」工作表上執行,而是在它之後立即跳過工作表。

問題#2 取決於我運行代碼的工作簿,後6個工作表,我得到運行時錯誤「1004」和代碼停止,不工作表上的其餘部分進行功能

問題#3 我在工作簿上得到了錯誤400,該代碼足以讓代碼循環遍歷所有工作表,而沒有找到更多工作表在何處應用代碼。

總之,我需要:

找出什麼我做錯了,該代碼被跳過的工作表中的一個叫做地區(第一選項卡)

後立即2.找出如何防止錯誤「1004」,因爲程序在多個工作表上反覆執行相同的功能(請閱讀我應該設置爲保存每隔幾個選項卡以防止此問題,但不知道如何執行此操作循環)

3.向代碼中添加一行可停止循環而不拋出錯誤消息的行。

Sub COPYPASTE() 

    Dim ws As Worksheet 

    For Each ws In Sheets 
    If ws.Name <> "REGION" Or ws.Name <> "Legend" Then 
    Range("C3:I47").Select 
    Selection.Copy 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
    Application.CutCopyMode = False 
    Range("A2").Select 
    End If 
    ActiveSheet.Next.Select 
    Next 

End Sub 

再次,編碼,沒有不是我的專長,但我試圖改善我的團隊和我有2名團隊成員數百工作表的每月手動這樣做的,因此他們採取了相當多的時間。

+1

你需要完全限定的範圍內,牀單等類似的ThisWorkbook。工作表或工作簿(2)。工作表等。對於ws.Range(「C3:I47」)也是如此。複製粘貼需要像這樣:ws.Range(「C3:I47」)。複製 ws.Range(「C3:I47」)。Cells(1,1).PasteSpecial Paste:= xlPasteValues,Operation:= xlNone, SkipBlanks _ := False,Transpose:= False – cyboashu

+0

@cyboashu這應該是一個答案不是評論。 – Graham

+0

@JPR請將此分解爲多個問題,StackOverflow規則指出一個問題不應出現多個問題,而是一個單獨的問題。 – Graham

回答

1

Avoid using Select and/or Activate (and related: ActiveSheet, etc.)雖然我們在這裏,而不是Copy/PasteSpecial,只是使用範圍的Value屬性進行直接值賦值。

所以這:

Dim ws As Worksheet 

For Each ws In Sheets 
If ws.Name <> "REGION" Or ws.Name <> "Legend" Then 
Range("C3:I47").Select 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
:=False, Transpose:=False 
Application.CutCopyMode = False 
Range("A2").Select 
End If 
ActiveSheet.Next.Select 
Next 

變爲本(還要注意Or應該是一個And,我認爲)

Dim ws As Worksheet 
Dim rng as Range 
For Each ws In Sheets 
    'Do not operate on either of Region or Legend worksheets 
    If ws.Name <> "REGION" And ws.Name <> "Legend" Then 
     Set rng = ws.Range("C3:I47") 
     rng.Value = rng.Value2 
    End If 
Next 
+0

非常感謝!這固定了所有三個問題。 – JPR

+1

@DavidZemens,對於'And'和''''''''''''''''對於所有工作表名稱來說''是正確的....(「REGION」<>「Legend」)「 – jsotola