2016-10-10 149 views
0
Dim wbTarget As Workbook 
Dim wbSource As Workbook 

Set wbTarget = ThisWorkbook 
Set wbSource = Workbooks.Open("C:\Users\alibe\Desktop\PoS\Alain.xlsx") 

wbSource.Worksheets("Spain").Range("plage_sp").Copy 
wbSource.Activate 

Set wbTarget = ThisWorkbook 
wbTarget.Worksheets("Feui1").Range("A1").PasteSpecial xlPasteAll 

wbTarget.Save 
wbTarget.Close 

大家嗨之间剪切和粘贴单元格,VBA - 工作簿

我想剪切和粘贴两种不同的工作簿之间的细胞。但是我的粘贴行中出现了失败9或438。请有人帮忙。

+1

为什么从源文件复制后激活源工作簿?摆脱那条线。而是激活目标工作簿。 –

+0

'wbSource.Activate'和第二个'Set wbTarget = ThisWorkbook'没用。将'Worksheets()'改成'Sheets()'。你最有可能在那里有一个错字:'Sheets(“Feui1”)'应该是'Sheets(“Feuil1”)',你错过了'L';) – R3uK

+2

格式对你来说很重要吗?有这样做的更快的方法,不涉及复制+面食。 – Tyeler

回答

-3

一些变化

Dim wbTarget As Workbook 
Dim wbSource As Workbook 

Set wbTarget = ThisWorkbook 
Set wbSource = Workbooks.Open("C:\Users\alibe\Desktop\PoS\Alain.xlsx") 

wbSource.Sheets("Spain").Range("plage_sp").Copy 
wbTarget.Sheets("Feui1").Range("A1").PasteSpecial Paste:=xlPasteAll 

wbTarget.Save 
wbTarget.Close 
+1

你有没有改变任何其他的双变量设置?这将有助于给你的代码旁边的解释 – Tom

+0

是的。将工作表更改为工作表并添加粘贴:= xlPasteAll –

+0

如此小的更改和解释... – R3uK

1

还有我们要改变几件事情。

首先,养成excel检查文件位置是否存在的习惯是很好的做法。你可能会认为你把它放在了正确的位置,但最好确保excel的感觉是一样的。 (这也使得你的代码更加灵活,以备后用。)

当打开工作簿并关闭它们时,没有理由让系统停下来试图快速打开新窗口。由于我们不需要知道它正在做什么,只需完成它,就可以将ScreenUpdatingDisplayAlerts设置为false,直到我们的代码结束。

您应该检查工作表“Feui1”上的拼写,它实际上并不是“Feuil”。当

对于由工作簿定义不同范围的应用,我们需要使用.Sheets()对象,而不是.Worksheets()

而且,这不是经常可以看到,你有,你要关闭同一个文件的代码,你正在打开另一个文件。在此例程结束时,ThisWorkbook即将关闭,并且wbSource将保持打开状态。这是故意的吗?只是我想我会指出的。

Sub CopyPasta() 
    Dim wbTarget As Workbook: Set wbTarget = ThisWorkbook 
    Dim wbSource As Workbook, sourceFile As String 

    sourceFile = "C:\Users\alibe\Desktop\PoS\Alain.xlsx" 
    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 

    If Dir(sourceFile) = "" Then 'Checks that file location exists 
     MsgBox "File not found.", vbCritical, "Bad File Address" 
     Exit Sub 
    End If 

    Set wbSource = Workbooks.Open(sourceFile) 

    wbSource.Sheets("Spain").Range("plage_sp").Copy 

    wbTarget.Sheets("Feuil").Range("A1").PasteSpecial xlPasteAll 'Spelling on 'Feuil' 

    Application.ScreenUpdating = True 
    Application.DisplayAlerts = True 
    wbTarget.Save 
    wbTarget.Close 'You want to close the workbook that this code is in? 
End Sub