粘贴在“如果”部分的陈述中,但不是“其他”
我自动化一个进程从工作表导入数据,但为了数据完整性(并最终追加到数据库),我不希望标识符input两次。 如果标识符(SHC_No)不在列A中,我的代码就可以导入数据,并提示是否要更换条目,因为某些内容已更改。 它将删除条目,并find下一个空白行,但.pastefunction将不会运行。 (即使它在我要粘贴的单元格上,我可以在剪贴板中看到数据。)
我得到了运行时错误1004“工作表类的粘贴方法失败”和“粘贴特定方法的范围类失败”以及438“对象不支持此属性或方法”。
我对Excel VBA比较新。 我已经尝试了不同的.paste和.pastespecial的变化,似乎没有任何工作。 我试着用陈述,并且定义范围。 我不知所措
任何想法或build议,将不胜感激。
Sub ImportAPDR() Dim wbImport As Workbook Dim wbCurrent As Workbook Dim strSHC As String Set wbImport = Workbooks("ImportPhase2.xlsm") 'Ensure name of the workbook... and don't change it. Set wbCurrent = ActiveWorkbook 'On Error GoTo Handler: Application.ScreenUpdating = False 'Prevents flickering screen. 'Activate Page 3 of the APDR Worksheets("Page 3").Activate strSHC = Range("A11").Value Range("A11").Activate Do If ActiveCell.Value = "" Then Exit Do ActiveCell.Offset(1, 0).Activate Loop 'Selects All data from A11 until the EOR ActiveCell.Offset(-1, 12).Activate Range("A11", ActiveCell).Select Selection.Copy 'Find the first blank cell in the Import workbook. wbImport.Activate Worksheets("Import").Activate FindSHC (strSHC) 'Must send a variable or the other subroutine will not work. Application.ScreenUpdating = True Exit Sub 'Handler: 'MsgBox ("Ensure to run the macro on the APDR workbook, not the import workbook.") End Sub Sub FindSHC(strSHC As String) Dim foundSHC As String Dim Rng As Range Dim StartRange As Range Dim PasteRng As Range FindString = strSHC If Trim(strSHC) <> "" Then With Sheets("Import").Range("A:A") Set Rng = .Find(What:=FindString, _ After:=.Cells(.Cells.Count), _ LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False) If Rng Is Nothing Then Range("A1").Activate Do If ActiveCell.Value = "" Then Exit Do ActiveCell.Offset(1, 0).Activate Loop ActiveSheet.Paste Application.CutCopyMode = False MsgBox ("The Tenant/Unit Details have been copied for import.") Else Application.Goto Rng, True Set StartRange = ActiveCell Answer = MsgBox("This APDR looks like it has already been imported." & vbNewLine & "Do you want to reimport and replace?", vbYesNo) If Answer = vbYes Then 'Finds the values that have previously been entered and loops to select them all for deletion. Do If ActiveCell.Value <> strSHC Then Exit Do ActiveCell.Offset(1, 0).Activate Loop ActiveCell.Offset(-1, 0).Activate Range(StartRange, ActiveCell).Select Selection.EntireRow.Delete Shift:=xlUp 'Find the next open row Range("A1").Activate Do If ActiveCell.Value = "" Then Exit Do ActiveCell.Offset(1, 0).Activate Loop ActiveSheet.Paste '<-----This is where I get my error. Application.CutCopyMode = False MsgBox ("The Tenant/Unit Details have been replaced.") Else Application.CutCopyMode = False MsgBox ("Import has been cancelled.") End If End If End With End If End Sub
这里有一些提示,以避免陷入这样的时刻。
-
总是尝试通过手动执行所有操作来模拟macros执行的操作。 在你的情况下,你可以为QAselect2个标识符 – 一个不存在,另一个存在。 第一个问题不会有任何问题,但第二个问题 – 只要在复制某个范围后删除任何单元格内容,您的select和复制范围将从剪贴板中丢失。 这实际上是一个麻烦。
-
做适当的debugging。 只要你进入奇怪的例外 – debugging什么使你的代码到这一点。 再次 – 在你的情况下,你可以看到,只要你删除内容复制范围周围的“虚线边框”将消失,这意味着你没有复制范围了,你可以粘贴。
-
这一个直接去复制粘贴组合。 无论何时您需要使用复制和粘贴function来构build代码,以便这两个代码一个接一个地执行。 避免这两个函数之间的任何范围交互。 如果您需要做一些计算,只需将范围参数(如范围矩形尺寸,起始行+列,结束行+列)保存到其他variables,并且只有在使用这些保存的参数完成所有事情时才进行复制。
祝你好运。