我正在尝试将手动复制的工作表粘贴到名为“Digital - Input”的工作表中。
我有时会收到错误
Range类的Pastespecial方法失败
这是我的粘贴声明:
Worksheets("Digital - Input").range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
这是我的完整代码:
Sub pasteDigitalInput()
Application.ScreenUpdating = False
'open the source sheet
Call unlockAll
'show the input sheet
Call showerfunc("Digital - Input")
'paste values
'On Error GoTo feilmeld
Worksheets("Digital - Input").range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Update cell references
Call getTotals
'Set the start of ukestrykk for digital
showerfunc ("Kilder")
Sheets("Kilder").Select
range("J2").Select
Call findAnd("Netto spend pr uke:", "Kilder", "Digital - Input", 2, 0, , , True)
hiderfunc ("Kilder")
'Hide sheet
Call hiderfunc("Digital - Input")
Sheets("Digital").Select
Application.ScreenUpdating = True
'locks the sheet again
Call lockAll
Exit Sub
feilmeld:
'hiderfunc ("Digital - Input")
Sheets("Digital").Select
Call lockAll
Application.ScreenUpdating = True
MsgBox ("Du må kopiere planen fra excel utskriften til Adform før du bruker denne knappen. OBS! kopier planen på nytt og lås opp Digital arket før du prøver igjen.")
End Sub
修改 它在打开两本工作簿之后似乎正常工作。但是,如果我使用任何其他宏,特别是清理输入表的宏,我得到错误。
清理输入表宏:
Sub clearInputDigital()
Call ClearInput("Digital - Input", "Digital")
End Sub
Sub ClearInput(inputsheet As String, sourceSheet As String)
Application.ScreenUpdating = False
'Show the sheet
showerfunc (inputsheet)
Sheets(inputsheet).Select
Cells.Select
Selection.ClearContents
'Hide the sheet
hiderfunc (inputsheet)
Sheets(sourceSheet).Select
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:0)
(显然我不确定你所呼唤的sub
和function
中发生了什么事情)
我并不总是相信excel VBA编译器引用我编码引用的对象,所以我总是尝试完全限定我的代码,如下所示
Sub pasteDigitalInput()
Excel.Application.ScreenUpdating = False
'open the source sheet
Call unlockAll
'show the input sheet
Call showerfunc("Digital - Input")
'paste values
'On Error GoTo feilmeld
Excel.ThisWorkbook.Worksheets("Digital - Input").Range("A1").PasteSpecial Paste:=Excel.xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'Update cell references
Call getTotals
'Set the start of ukestrykk for digital
showerfunc ("Kilder")
With Excel.ThisWorkbook.Sheets("Kilder")
.Activate
.Range("J2").Select
End With
Call findAnd("Netto spend pr uke:", "Kilder", "Digital - Input", 2, 0, , , True)
hiderfunc ("Kilder")
'Hide sheet
Call hiderfunc("Digital - Input")
Excel.ThisWorkbook.Sheets("Digital").Activate
Excel.Application.ScreenUpdating = True
'locks the sheet again
Call lockAll
Exit Sub
feilmeld:
'hiderfunc ("Digital - Input")
Excel.ThisWorkbook.Sheets("Digital").Activate
Call lockAll
Excel.Application.ScreenUpdating = True
MsgBox ("Du må kopiere planen fra excel utskriften til Adform før du bruker denne knappen. OBS! kopier planen på nytt og lås opp Digital arket før du prøver igjen.")
End Sub
如果您只是移动值,也许您可以尝试避免使用剪贴板,并使用更像这样的结构:
Sub WithoutPastespecial()
'WORKING EAXAMPLE
Dim firstRange As Excel.Range
Dim secondRange As Excel.Range
Set firstRange = Excel.ThisWorkbook.Worksheets("Cut Sheet").Range("S4:S2000")
With Excel.ThisWorkbook.Worksheets("Cutsheets")
Set secondRange = .Range("A" & .Rows.Count).End(Excel.xlUp).Offset(1)
End With
With firstRange
Set secondRange = secondRange.Resize(.Rows.Count, .Columns.Count)
End With
secondRange.Value = firstRange.Value
End Sub
答案 1 :(得分:0)
通常,当打开的当前窗口(工作表)与粘贴某些内容的窗口(工作表)不同时,会显示此错误。 Excel对此非常严格。当您手动执行此操作时,显然在粘贴之前选择了工作表,因此您永远不会看到错误。
因此,在粘贴到“Digital - Input”工作表之前,只需在其上方插入一行,以选择要粘贴的工作表,然后粘贴。另外,如果您正在处理多个文件,我建议您使用“Thisworkbook”,以便...您知道... excel不会混淆您所指的工作簿。所以你的代码将是
Thisworkbook.Worksheets("Digital - Input").Select
Worksheets("Digital - Input").range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
希望这有帮助。