gpt4 book ai didi

excel - protected 工作表上的 ActiveSheet.Paste 错误

转载 作者:行者123 更新时间:2023-12-04 20:24:41 24 4
gpt4 key购买 nike

我有 2 个工作表(输入和记录),我只想将一些数据从“输入”复制到“记录”,它有效,但如果我保护“记录”...。 Worksheet类的粘贴方法失败过来。
因此,我为未 protected 工作表和保护工作表添加了脚本,但仍然出现了“1004”。
这是我的项目的详细信息。

  • 输入 工作表是我向一行输入一些值的区域。在 1 行中,不同列至少有 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
    我想知道的:
  • 我错过了什么?
  • 这个困境的解决方案。
  • 最佳答案

    我认为所有这些 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
    下面是它的工作原理:
    enter image description here

    这未包含在您的原始问题中。因此,您必须创建一个新问题,其中包含原始问题的附加信息。但是这次我会在这里回答,但下次不会。
    这是表格的代码:
    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 中的 Format Table 下找到
    enter image description here

    关于excel - protected 工作表上的 ActiveSheet.Paste 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63215666/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com