VBA:Copy/Past 在新 sheet 中,包括锁定单元格
VBA: Copy/Past in new sheet including locking cells
情况是这样的:
我有一个 Excel sheet,带有用于填写个人信息的输入工作簿,每个月都有一个工作簿。现在,有一个按钮,当用户想要有一个新的 Excel sheet 时,因为要改变工作场所。
因此例如:Mr. Dean 填写了直到 4 月 15 日的每日工作时间。现在他移动到另一个位置并按下按钮以更改工作位置。他得到了一个新的 Excel sheet,它看起来和以前完全一样,填充了他从第一个 sheet 开始写的数据(copy/paste 从 vba-脚本)。 15.April 之前的现有条目(单元格)也被锁定,因此他无法编辑它们。他继续记下 16 日的工作时间。四月等等。
我认为如果第二个 Excel sheet 由宏 (copy/paste) 创建会更好。
第一个名字sheet:sheet1
第二名sheet:sheet2
所以我的代码到目前为止没有工作:
Sub Test()
Dim ws1 As Worksheet
Set ws1 = sheet1.Worksheets("Master")
ws1.Copy sheet2.Sheets(Sheets.Count)
End Sub
那会复制整个sheet?
此代码用于工作簿的密码保护。我怎样才能只锁定单个单元格直到 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
或者您还有其他建议吗?
问候
杜克
我假设每个日期都有行,并且它们是相互跟随的。在已输入小时数的列中,您可以找到第一个为空的小时数。我不久前为此编写了这段代码。填写 +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+ 是 sheet.
中使用的最后一列的编号
情况是这样的:
我有一个 Excel sheet,带有用于填写个人信息的输入工作簿,每个月都有一个工作簿。现在,有一个按钮,当用户想要有一个新的 Excel sheet 时,因为要改变工作场所。
因此例如:Mr. Dean 填写了直到 4 月 15 日的每日工作时间。现在他移动到另一个位置并按下按钮以更改工作位置。他得到了一个新的 Excel sheet,它看起来和以前完全一样,填充了他从第一个 sheet 开始写的数据(copy/paste 从 vba-脚本)。 15.April 之前的现有条目(单元格)也被锁定,因此他无法编辑它们。他继续记下 16 日的工作时间。四月等等。
我认为如果第二个 Excel sheet 由宏 (copy/paste) 创建会更好。
第一个名字sheet:sheet1 第二名sheet:sheet2
所以我的代码到目前为止没有工作:
Sub Test()
Dim ws1 As Worksheet
Set ws1 = sheet1.Worksheets("Master")
ws1.Copy sheet2.Sheets(Sheets.Count)
End Sub
那会复制整个sheet?
此代码用于工作簿的密码保护。我怎样才能只锁定单个单元格直到 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
或者您还有其他建议吗?
问候 杜克
我假设每个日期都有行,并且它们是相互跟随的。在已输入小时数的列中,您可以找到第一个为空的小时数。我不久前为此编写了这段代码。填写 +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+ 是 sheet.
中使用的最后一列的编号