【问题标题】:VBA: Copy/Past in new sheet including locking cellsVBA:复制/粘贴新工作表,包括锁定单元格
【发布时间】:2019-04-26 20:43:18
【问题描述】:

情况是这样的:

我有一个 Excel 工作表,带有输入工作簿来填写个人资料,并且每个月都有一个工作簿。现在,有一个按钮,当用户想要一个新的 Excel 工作表时,为了改变工作场所。

例如:Dean 先生已经填写了他每天 4 月 15 日的工作时间。现在他移动到另一个位置并按下按钮以挂起工作位置。他得到了一张新的 Excel 表格,它看起来和以前完全一样,里面填满了他从第一张表格中写入的数据(从 vba-sript 复制/粘贴)。 15.April 之前的现有条目(单元格)也被锁定,因此他无法编辑它们。他继续记下 16. April 等的工作时间。

我认为如果第二个 Excel 工作表由宏创建(复制/粘贴)会更好。

第一张纸的名称:sheet1 第二张表的名称:sheet2

所以到目前为止我的代码不起作用:

Sub Test()
Dim ws1 As Worksheet
Set ws1 = sheet1.Worksheets("Master")
ws1.Copy sheet2.Sheets(Sheets.Count)
End Sub

这会复制整张纸吗?

此代码用于工作簿的密码保护。如何将单个单元格锁定到 4 月 15 日? 那么我该如何读出日期呢?

Sub sbProtectAllSheets()

    Dim pwd1 As String, pwd2 As String
    pwd1 = InputBox("Please Enter the password")
    If pwd1 = "" Then Exit Sub
    pwd2 = InputBox("Please re-enter the password")

    If pwd2 = "" Then Exit Sub

     'Check if both the passwords are identical
    If InStr(1, pwd2, pwd1, 0) = 0 Or _
    InStr(1, pwd1, pwd2, 0) = 0 Then
        MsgBox "You entered different passwords. No action taken"
        Exit Sub
    End If

    For Each ws In Worksheets
        ws.Protect Password:=pwd1
    Next

    MsgBox "All sheets Protected."

    Exit Sub

End Sub

或者你有什么其他建议吗?

问候 杜克

【问题讨论】:

  • 第一个 Sub 将在 sheet2 之后复制整个 sheet1(tab 顺序)。要锁定单个单元格,您可以使用 Sheet1.Cells(1,1).Locked = True,然后您必须保护工作表,但锁定或解锁整个单元格范围要容易得多(“A1:F20 )
  • 好吧,那我不用密码锁了吗?
  • 您可以将密码留空,任何人都可以在任何时候取消对它的保护,但是如果您使用密码,您需要找到一种方法来存储它以便 VBA 可以使用它(就像其中一张永久性工作表上的对象的 Tag 属性)
  • 您是否尝试过运行您的代码?对于您的Sub Test(),您是在问是否这会起作用,而不是说明不起作用。我将冒险猜测它不会起作用,因为它看起来非常非常错误,但我不知道您可能在您向我们展示的Sub 之外设置了什么样的全局变量(或者如果你有Option Explicit 设置 - 你应该)。如果您想增加获得好答案的机会,请编辑您的帖子以包含您收到的确切错误消息。
  • 请不要将macros tag 用于 MS Office / VBA。

标签: excel vba security locking copy-paste


【解决方案1】:

我假设每个日期都有行,并且它们彼此跟随。在输入小时数的列中,您可以找到第一个为空的小时数。我为那段时间写了这段代码。填写 +column+ 输入小时数的列号。

LastRowR = ActiveSheet.UsedRange.Rows.Count
    For row = 2 To LastRowR
        If ActiveSheet.Cells(row, +column+) = "" Then
            LastRowR = row - 1
            Exit For
        End If
    Next row

然后您可以锁定过去的单元格范围。因此,您可以从 ("A1":Cells(LastRowR,+LastColumn+)) 中创建一个范围,其中 +LastColumn+ 是工作表中使用的最后一列的编号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多