.PasteSpecial不适用于Range对象

你好,

其实我的vba知识很好,通常我没有很多编码困难,但是这使我疯狂。

代码很简单。 我有一个工作表PR_DB所有我的项目存储。 对于每个项目都有一些员工,保存在单元格(sel_pr, >10+) (员工姓名和ID)中。

在这里输入图像说明

我想从项目中删除一个员工,整理项目数据库条目。 所有员工列在两个列表框中。 在项目中工作的人,不在的人。 通过button,我可以添加和删除列表框中的员工。

在这里输入图像说明

当我添加一个员工到一个项目(顶部button),我的Sub只是把ID和名称在所述项目的行末尾。 当我从项目中删除他们,因此从数据库中删除他们,我查找与员工数据单元格。 之后,我只想将所有的单元格切割到右侧,然后将一个单元格粘贴到左侧(通过偏移量),以便删除已删除的名称。

这是我的代码:

 Sub delMA_from_prBetList() Dim i, j, k, listRow, lastRowMA_DB, lastRowPR_DB, sel_pr As Integer Dim wsPR, wsMA_DB, wsPR_DB As Worksheet Dim foundMA As Boolean Dim cutRng, pasteRng As Range Set wsPR = Worksheets("Projekte") Set wsMA_DB = Worksheets("MA_DB") Set wsPR_DB = Worksheets("PR_DB") lastRowPR_DB = wsPR_DB.UsedRange.Rows.Count 'check if any employee was selected If IsNull(wsPR.prBetListe.Value) = True Then MsgBox "Please select an employee." Exit Sub End If j = 10 'look for selected project in DB For i = 2 To lastRowPR_DB If wsPR_DB.Cells(i, 1) = CInt(wsPR.prListe.Value) Then 'row ID of said project sel_pr = i End If Next 'find employee Do Until wsPR_DB.Cells(sel_pr, j) = "" 'employees are saved as "ID;NAME" If wsPR_DB.Cells(sel_pr, j) = wsPR.prBetListe.Value & ";" & wsPR.prBetListe.Column(1, wsPR.prBetListe.ListIndex) Then 'when found, look for last cell with an entry k = j Do Until wsPR_DB.Cells(sel_pr, k) = "" k = k + 1 Loop 'set cutRng so it spans from cell right to the found employee 'to last cell with an employee in that project Set cutRng = wsPR_DB.Range(wsPR_DB.Cells(sel_pr, j + 1), wsPR_DB.Cells(sel_pr, k)) 'set pasteRng like cutRng, just one cell further to the left 'so the deleted employee will be overwritten Set pasteRng = cutRng.Offset(rowOffset:=0, columnOffset:=-1) cutRng.Cut pasteRng.PasteSpecial Exit Do End If j = j + 1 Loop 're-initialize listboxes Call init_maListe_dyn Call init_prBetListe_dyn End Sub 

所以有什么问题? 一切正常,我想剪切的所有单元格都进入剪贴板,但是它们并没有粘贴到pasteRng 。 错误是Error 1004 "Application-defined or Object-defined error" 。 我尝试了一千件事情,但解决scheme可能太容易find。

希望你能帮助我,提前感谢。

PS:我有点急,所以文本格式可能不尽如人意。 请多多包涵。

直接使用:

 cutRng.Cut pasteRng 

这应该可以解决你的问题;)

如果你想向左偏移一列,它应该是

 Set pasteRng = cutRng.Offset(,-1) 

另外,你没有定义你想要粘贴的方式。 如果在此实例之前(通过代码或其他方式)对粘贴设置进行了不同的设置,粘贴设置可能不会被设置为粘贴值。 如果你想只剪切粘贴它的值

 cutRng.Cut pasteRng.PasteSpecial xlPasteValues 

让我知道,如果这有帮助,如果没有,我会进一步研究。