我对VBA
有点新意,我遇到了一个问题,我无法解决,也无法在之前的问题中找到合适的解决方案。实际上它看起来很简单。我想在工作表中复制名称为"Blad3"
的范围,并将值粘贴到工作表中,名称为"Blad1"
。这就是我所做的,它出了什么问题?
ActiveSheet.Cells(dattel, 4).Select
ActiveCell.Range("A1:J1").Copy
Sheets("Blad1").Select
Cells(8 + aantkk, 6).Select
ActiveSheet.Unprotect
' ActiveCell.PasteSpecial xlPasteValues
Selection.PasteSpecial Paste:=xlValue
' ActiveSheet.Paste
ActiveSheet.Protect
答案 0 :(得分:0)
这对你有用吗?
表( “Blad3”)范围。( “A1:J1”)。复制
表格(“Blad1”)。范围(“A1:J1”)。PasteSpecial Paste:= xlValue
我在一个新工作簿上测试了它,它似乎工作得很好。
答案 1 :(得分:0)
首先,您的困境的真正答案是protect the worksheet使用 UserInterfaceOnly:= True 参数,这样您就不必使用VBA代码取消保护它来写入值。
运行一次。
sub protectBlad1FromUser()
worksheets("Blad1").unprotect
worksheets("Blad1").protect UserInterfaceOnly:=True
end sub
现在,您可以对VBA中的Blad1工作表执行任何操作,同时保护其免受用户的侵害。
至于您的原始代码,这很令人困惑。如果Blad3工作表上的.Cells(dattel, 4)
为D4,则ActiveCell.Range("A1:J1").Copy
不会复制A1:J1;它复制D4:M4。无论如何,直接值传输是一种比复制,粘贴特殊值,值更有效的传输值的方法。
dim rng as range
set rng = worksheets("blad3").cells(dattel, 4).resize(1, 10) '<~~ figure out what this is supposed to be
with worksheets("Blad1")
.cells(8 + aantkk, 6).resize(rng.rows.count, rng.columns.count) = rng.value
end with
答案 2 :(得分:-1)
可以试试这个
Sub Demo()
Dim srcSht As Worksheet, destSht As Worksheet
Dim rng As Range
Set srcSht = ThisWorkbook.Sheets("Blad3") 'this is source sheet
Set destSht = ThisWorkbook.Sheets("Blad1") 'this is destination sheet
With destSht
.Unprotect 'unprotect sheet Blad1
Set rng = srcSht.Range("A1:J1") 'set range to copy
.Cells(8 + aantkk, 6).Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value 'paste only values
.Protect 'protect sheet Blad1
End With
End Sub
应避免使用 SELECT
和ACTIVATE
。有关详细信息,请参阅this。