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
中。错误是
Error 1004 "Application-defined or Object-defined error"
。我尝试了很多东西,但解决方案可能很容易找到。
希望你能提前帮助我。
PS:我有点匆忙,因此文本的格式可能不尽如人意。请耐心等待。答案 0 :(得分:3)
直接使用:
cutRng.Cut pasteRng
这应该可以解决你的问题;)
答案 1 :(得分:0)
如果要将一列偏移到左侧,则应为
Set pasteRng = cutRng.Offset(,-1)
此外,您还没有定义要粘贴的方式。如果在此实例之前以不同方式设置粘贴设置(通过代码或其他方式),则粘贴设置可能不会设置为粘贴值。如果您只想剪切粘贴值
cutRng.Cut
pasteRng.PasteSpecial xlPasteValues
让我知道这是否有帮助,如果没有,我会进一步研究它。