2016-10-10 201 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