Excel ActiveSheet.受保护工作表上的粘贴错误[已解决]
我有两个工作表(输入和记录),我只想把一些数据从“输入”复制到“记录”,它工作了,但如果我保护“记录”工作表类的粘贴方法失败出现。 所以我添加了用于未受保护的工作表和保护工作表的脚本,但仍然出现了“1004”。 这里是我的项目的细节Excel ActiveSheet.受保护工作表上的粘贴错误[已解决],excel,vba,Excel,Vba,我有两个工作表(输入和记录),我只想把一些数据从“输入”复制到“记录”,它工作了,但如果我保护“记录”工作表类的粘贴方法失败出现。 所以我添加了用于未受保护的工作表和保护工作表的脚本,但仍然出现了“1004”。 这里是我的项目的细节 输入工作表是我向一行输入一些值的区域。在一行中,在不同的列中至少有10个值 我最多可以添加十行 根据我要添加的输入工作表中的行数,记录工作表作为表1存储在数据库中 这是我的剧本 Sub adddata() 'this sub code from button o
- 输入工作表是我向一行输入一些值的区域。在一行中,在不同的列中至少有10个值
- 我最多可以添加十行
- 根据我要添加的输入工作表中的行数,记录工作表作为表1存储在数据库中
Sub adddata() 'this sub code from button on "Input" sheet
Sheets("Input").Select
Range("C15").Offset(1, 0).Select 'select range start from C16
If Range("M27") = 1 Then 'value for how much row that i'll add
Range(Selection, Selection.End(xlToRight)).Select
Else
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
End If
Selection.Copy
Sheets("Record").Select
Worksheets("Record").Unprotect Password:="4321"
If Range("B2").Offset(1, 0).Value = "" Then
Range("B2").Offset(1, 0).Select
Else
Range("B2").End(xlDown).Offset(1, 0).Select
End If
ActiveSheet.Paste '<< The trouble maker
Application.CutCopyMode = False
Worksheets("Record").Protect Password:="4321", UserInterfaceOnly:=True
End Sub
Sub adddata()”此子代码来自“输入”表上的按钮
工作表(“输入”)。选择
范围(“C15”)。偏移量(1,0)。选择“从C16开始选择范围”
如果Range(“M27”)=1,那么我将添加多少行的值
范围(选择,选择。结束(xlToRight))。选择
其他的
范围(选择,选择。结束(xlToRight))。选择
范围(选择,选择。结束(xlDown))。选择
如果结束
选择,复制
表格(“记录”)。选择
工作表(“记录”)。取消保护密码:=“4321”
如果范围(“B2”).偏移量(1,0).Value=”“,则
范围(“B2”)。偏移量(1,0)。选择
其他的
范围(“B2”)。结束(xlDown)。偏移量(1,0)。选择
如果结束
这个网站对新来者有点不友好。我不能评论,因为我没有足够的声誉。你能补充一下你的问题吗,你想做什么?我认为所有这些Select
过程都是不必要的,您可以避免。我可以编辑我的答案,如果你愿意添加你的意图“你想做什么”
是否要从Input
复制一些范围,并将其粘贴到Record
始终粘贴到下一个空行
如果我没听错的话,也许是这样
Sub adddata()
On Error GoTo ErrorHandler
Application.ScreenUpdating = False
ThisWorkbook.Worksheets("Record").Unprotect Password:="4321"
Dim NextFreeCell As Range
Set NextFreeCell = ThisWorkbook.Worksheets("Record").Cells(Rows.Count, "B").End(xlUp).Offset(RowOffset:=1)
With ThisWorkbook.Worksheets("Input")
If .Range("B2").Value = 1 Then
.Range("C15", .Range("C15").End(xlToRight)).Copy
Else
.Range("C15", .Range("C15").End(xlDown).End(xlToRight)).Copy
End If
End With
NextFreeCell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
ThisWorkbook.Worksheets("Record").Protect Password:="4321", UserInterfaceOnly:=True
ThisWorkbook.Worksheets("Input").Activate
Application.ScreenUpdating = True
Application.CutCopyMode = False
Exit Sub
ErrorHandler:
Application.CutCopyMode = False
ThisWorkbook.Worksheets("Input").Activate
Application.ScreenUpdating = True
ThisWorkbook.Worksheets("Record").Protect Password:="4321", UserInterfaceOnly:=True
End Sub
以下是它的工作原理:
这不包括在你原来的问题中。因此,您必须创建一个新问题,并在原始问题的基础上添加其他信息。不过这次我会在这里回答,但下次不会
以下是表的代码:
Sub adddata()
On Error GoTo ErrorHandler
Application.ScreenUpdating = False
ThisWorkbook.Worksheets("Record").Unprotect Password:="4321"
With ThisWorkbook.Worksheets("Record").ListObjects("Table1").ListRows.Add
With ThisWorkbook.Worksheets("Input")
If .Range("B2").Value = 1 Then
.Range("C15", .Range("C15").End(xlToRight)).Copy
Else
.Range("C15", .Range("C15").End(xlDown).End(xlToRight)).Copy
End If
End With
.Range.Cells(1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With
ThisWorkbook.Worksheets("Record").Protect Password:="4321", UserInterfaceOnly:=True
ThisWorkbook.Worksheets("Input").Activate
Application.ScreenUpdating = True
Application.CutCopyMode = False
Exit Sub
ErrorHandler:
Application.CutCopyMode = False
ThisWorkbook.Worksheets("Input").Activate
Application.ScreenUpdating = True
ThisWorkbook.Worksheets("Record").Protect Password:="4321", UserInterfaceOnly:=True
End Sub
删除上一个数据下表中的所有空单元格。此代码将向表中添加新行。此外,表名应与表名相对应。可在Excel中的格式表下找到
试试这个
Sub adddata()
Worksheets("Record").Unprotect Password:="4321" ' Unlock the target sheet before copying.
Sheets("Input").Select
Range("C15").Offset(1, 0).Select
If Range("M27") = 1 Then
Range(Selection, Selection.End(xlToRight)).Select
Else
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
End If
Selection.Copy
Sheets("Record").Select
If Range("B2").Offset(1, 0).Value = "" Then
Range("B2").Offset(1, 0).Select
Else
Range("B2").End(xlDown).Offset(1, 0).Select
End If
Activecell.PasteSpecial xlAll
Application.CutCopyMode = False
Worksheets("Record").Protect Password:="4321", UserInterfaceOnly:=True
End Sub
工作表“输入”是我在一行中输入一些值的区域&根据我输入值的多少,一行在不同的列中至少有10个值。我添加输入的最大行数是10行。表“记录”是基于表“输入”的数据库。第一次记录必须为空,但它会随着时间的推移而增加。我的代码是尝试在每一行上从“输入”复制到“记录”,这就是为什么我把“M27”作为要复制的行数,并为此添加循环代码。@user14036929我已经编辑了我的答案。很抱歉,这个子代码来自我放在“输入”表上的按钮,在我的代码中,B2在“记录”表上。我将更具体地编辑我的问题。@user14036929按钮有什么问题?我添加了gif,你可以看到它是如何工作的。代码上没有区别是不是按钮。很抱歉@Tabisamsa,按钮没有问题,我只是过早地总结了你的代码。它实际上是有效的,但您的代码会将值粘贴到“记录”表的底部。。再说一次,我想我忘了告诉你,“记录”表上的数据库是一个表谢谢,但又出现了另一个错误,“工作表类的PasteSpecial方法失败”很抱歉,我使用了activesheet而不是activecell。我已经更正了我的答案。