Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba .PasteSpecial不适用于范围对象_Vba_Excel - Fatal编程技术网

Vba .PasteSpecial不适用于范围对象

Vba .PasteSpecial不适用于范围对象,vba,excel,Vba,Excel,Y helo thar 事实上,我的vba知识相当好,通常我在编码方面没有太多困难,但这让我发疯 代码非常简单。我有一个工作表PR_DB,其中存储了我的所有项目。每个项目都有许多员工,保存在单元格(sel_pr,>10+)(员工姓名和ID)中 我想从项目中删除一名员工,并整理项目数据库条目。所有员工都列在两个列表框中。那些在项目中工作的和那些没有工作的。通过按钮,我可以从任一列表框中添加和删除员工 当我将员工添加到项目(顶部按钮)时,我的Sub仅将ID和姓名放在所述项目行的末尾。 当我将它们

Y helo thar

事实上,我的vba知识相当好,通常我在编码方面没有太多困难,但这让我发疯

代码非常简单。我有一个工作表
PR_DB
,其中存储了我的所有项目。每个项目都有许多员工,保存在单元格
(sel_pr,>10+)
(员工姓名和ID)中

我想从项目中删除一名员工,并整理项目数据库条目。所有员工都列在两个列表框中。那些在项目中工作的和那些没有工作的。通过按钮,我可以从任一列表框中添加和删除员工

当我将员工添加到项目(顶部按钮)时,我的
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
。错误是
错误1004“应用程序定义或对象定义错误”
。我尝试了一千种方法,但解决方法可能太容易了

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


PS:我有点赶时间,所以文本的格式可能不如它可能的好。请耐心等待。

如果您想将一列偏移到左侧

Set pasteRng = cutRng.Offset(,-1)
此外,您没有定义要粘贴的方式。如果粘贴设置在此实例之前的设置不同(通过代码或其他方式),则不能将粘贴设置设置为粘贴值。如果您只想剪切粘贴这些值,那么

cutRng.Cut
pasteRng.PasteSpecial xlPasteValues

让我知道这是否有帮助,如果没有,我会进一步调查

如果要将一列偏移到左侧,则应

Set pasteRng = cutRng.Offset(,-1)
此外,您没有定义要粘贴的方式。如果粘贴设置在此实例之前的设置不同(通过代码或其他方式),则不能将粘贴设置设置为粘贴值。如果您只想剪切粘贴这些值,那么

cutRng.Cut
pasteRng.PasteSpecial xlPasteValues
让我知道这是否有帮助,如果没有,我会进一步调查

直接使用即可:

cutRng.Cut pasteRng
这应该可以解决您的问题;)

直接使用即可:

cutRng.Cut pasteRng

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

天哪。。非常感谢。但是我仍然不明白,为什么.PasteSpecial不起作用。因为
Application.CutCopyMode
需要为1才能使用
Range.PasteSpecial
。我不知道这是什么原因,但你也可以在用户界面中看到:如果你“剪切”一个范围,唯一的选择是直接粘贴到某个地方。。。没有特别优惠;)好吧,这会给黑暗带来一些光明。再次感谢你,天哪。。非常感谢。但是我仍然不明白,为什么.PasteSpecial不起作用。因为
Application.CutCopyMode
需要为1才能使用
Range.PasteSpecial
。我不知道这是什么原因,但你也可以在用户界面中看到:如果你“剪切”一个范围,唯一的选择是直接粘贴到某个地方。。。没有特别优惠;)好吧,这会给黑暗带来一些光明。再次感谢。呜呜,我试过
1
进行测试,但忘了设置。在原来的帖子中编辑了它
xlPasteValues
只是可选的,因此它不会对方法本身产生任何影响。见上面的答案,这是有效的。但正如我所评论的,我仍然不知道为什么。不过还是要谢谢你啊,很好。这发生在我们所有人身上,很高兴你找到了一个有效的答案:)呜呜,我尝试了
1
进行测试,但忘了设置它。在原来的帖子中编辑了它
xlPasteValues
只是可选的,因此它不会对方法本身产生任何影响。见上面的答案,这是有效的。但正如我所评论的,我仍然不知道为什么。不过还是要谢谢你啊,很好。这发生在我们所有人身上,很高兴你找到了一个有效的答案:)