Excel 板材保护问题

Excel 板材保护问题,excel,vba,Excel,Vba,我正在开发一个工具,用户可以在其中为他们的单个项目创建工作表,这些工作表稍后将用于自动生成powerpoint幻灯片。一切都很好,直到我试图添加工作表保护,以限制他们的编辑只需要输入单元格 这是模板工作表,每当他们添加新项目时,都会使用新名称进行复制 正如您所看到的,工作表是受保护的,但是我可以编辑我需要的单元格(例如D2),因为它们没有被锁定 通过表单收集一些用户输入后,我将模板工作表复制到同一工作簿中的一个新工作表中,代码为…wsShortBlank是模板工作表 wsShortBlank

我正在开发一个工具,用户可以在其中为他们的单个项目创建工作表,这些工作表稍后将用于自动生成powerpoint幻灯片。一切都很好,直到我试图添加工作表保护,以限制他们的编辑只需要输入单元格

这是模板工作表,每当他们添加新项目时,都会使用新名称进行复制

正如您所看到的,工作表是受保护的,但是我可以编辑我需要的单元格(例如D2),因为它们没有被锁定

通过表单收集一些用户输入后,我将模板工作表复制到同一工作簿中的一个新工作表中,代码为…wsShortBlank是模板工作表

wsShortBlank.Visible = xlSheetVisible
    With ThisWorkbook
        wsShortBlank.Copy After:=.Sheets(.Sheets.Count)
        Set sh = ActiveSheet        'the copied sheet should be the active one, so grab a handle to it
    End With
    wsShortBlank.Visible = xlSheetVeryHidden

    sh.Name = txtPE.Value & " " & txtPEC.Value

    Unload Me

    With sh
        .Activate

        .Unprotect password:=myPassword

        'add done editing button
        .Buttons.Add(468.75, 30, 210.75, 60.75).Select
        Selection.OnAction = "doneEditing"
        Selection.Characters.Text = "Done Editing"

        'populate the data we know
        .Range("B33").Value = comboClass.Value
        .Range("B34").Value = txtPE.Value
        .Range("B35").Value = txtPEC.Value
        .Range("B36").Value = txtTask.Value

        .Protect password:=myPassword

        .Range("D2").Select   'stick the cursor in the first input field
    End With

    Application.ScreenUpdating = True
我现在有这张床单

“完成编辑”按钮链接到隐藏当前工作表并重新显示主菜单窗体的子菜单

但如果我试图编辑D2单元格,我会得到这个

好像牢房被锁上了。但是,如果我单击另一个工作表,然后单击返回到此工作表,我可以很好地编辑单元格D2

有什么好处

作为一个更新,我还修改了代码,以便在复制工作表后,它会遍历并单独设置单元格的锁定属性。因此,这是在上述代码块的末尾添加的

        .Range("D2:D7").Locked = False
        .Range("D11:D12").Locked = False
        .Range("C17:J19").Locked = False
        .Range("C23:G23").Locked = False
        .Range("D24:H24").Locked = False
        .Range("E25:I25").Locked = False
        .Range("F26:J26").Locked = False
        .Range("B30:G30").Locked = False


        .Protect password:=myPassword

但是没有什么区别。

为什么不根据模板创建一个新的工作表并填写它呢?这正是我要做的…我复制模板工作表,它有我想要设置的保护。我先解除对新副本的保护,填充一些标题字段并添加“完成编辑”按钮,然后重新保护它。奇怪的行为是它告诉我单元格被锁定了,而它没有被锁定,但是如果我点击另一张工作表,然后回来,它会正常工作并继续更新。这个问题似乎只发生在我们有Excel 2013的工作场所。我在家里有一个新版本,一切正常。你有什么办法来解决这个问题吗?我已经尝试过让代码激活其他工作表,然后返回到新复制的工作表(尝试在代码中模拟click over/click back解决方案),但这似乎不起作用。如果我不得不告诉我的用户手动操作的话,它看起来很像米老鼠。。。