2013-08-05 35 views
0

我想將sheet1的一個單元格(D1)複製到所有工作簿其他工作表的其他工作表的單元格(D1)(我正在這裏循環查看文件,工作表數量會發生變化)。VBA從一張紙複製/粘貼到所有其他

運行下面的代碼時,行「ActiveSheet.Paste」給我以下錯誤:「運行時錯誤'10004':Worksheet類的粘貼方法失敗」。

這裏是有問題的代碼:

'copy MSA code to sheets!=1 
Sub MSAallSheets(wb As Workbook) 
    With wb 
    Range("D1").Copy 
     For Each ws In wb.Worksheets 
      If ws.Name <> "Page 1" Then 
      ws.Activate 
      ws.Range("D1").Select 
      ActiveSheet.Paste 
      End If 
     Next 
    End With 
End Sub 

在情況下,它可能是必要的,這是我如何通過文件中定義我的循環:

Dim Filename, Pathname As String 
Dim wb As Workbook 
Pathname = "C:\Users\julia.anderson\Documents\HMDA\test\" 
Filename = Dir(Pathname & "*.xlsx") 
Do While Filename <> "" 
Set wb = Workbooks.Open(Pathname & Filename) 
DoWork wb 
Delete wb 
MSAallSheets wb 
wb.Close SaveChanges:=True 
Filename = Dir() 
Loop 
End Sub 

建議將是最受歡迎的!

謝謝。

+0

歡迎來到SO!只是一個提示:'With wb'塊沒有用處和混淆,你沒有使用與你一起使用的對象變量,刪除它只會提高可讀性。並且隨時修復你的縮進,我試圖編輯它,但是我的編輯被拒絕,因爲「這個編輯不正確,或者試圖回覆或評論現有的文章。」,一個邪惡的獨角獸說*真的*知道他的東西。所以我想我會留下評論然後... –

回答

0

我猜你是從哪個拷貝紙...

Sub MSAallSheets(wb As Workbook) 
    With wb 
    Range("D1").Copy 
     For Each ws In wb.Worksheets 
      If ws.Name <> "Page 1" Then 
       wb.Sheets("Page 1").Range("D1").Copy _ 
             ws.Range("D1")      
      End If 
     Next 
    End With 
End Sub 
0

這對我的作品有輕微的改變:

Sub MSAallSheets(wb As Workbook, SourceSheet As String, SourceAddress As String) 
    With wb 
    Sheets(SourceSheet).Range(SourceAddress).Copy 
     For Each ws In wb.Worksheets 
      If ws.Name <> SourceSheet Then 
       ws.Activate 
       ws.Range(SourceAddress).Select 
       ActiveSheet.Paste 
      End If 
     Next 
    End With 
End Sub 

例如呼叫:

call MSAallSheets(activeWorkbook, "Page 1", "D1") 

這些參數可以更輕鬆地更改次要細節/重新使用代碼。

+0

'調用'已經是VB6中的遺留物... –

+0

它的工作原理是什麼? – ChrisProsser

相關問題