2013-08-05 32 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

相关问题