'unprotect sheets for CDRF (1)
Sheets("CDRF File (1)").Unprotect Password:="hammer"
Set wsCopyFrom = ActiveWorkbook.Worksheets("STP_Data")
Set wsCopyTo = ActiveWorkbook.Worksheets("CDRF File (1)")
Entity Name
wsCopyTo.Range("B11") = wsCopyFrom.Range("E30")
'unprotect sheets for CDRF (1)
Sheets("CDRF File (1)").Unprotect Password:="hammer"
CIF
wsCopyTo.Range("K11") = wsCopyFrom.Range("F30")
'unprotect sheets for CDRF (1)
Sheets("CDRF File (1)").Unprotect Password:="hammer"
'TIN
wsCopyTo.Range("M11") = wsCopyFrom.Range("G30")
您好。所以我的问题是为什么我需要取消保护每行复制和粘贴。在我只需要一行来获得期望结果之前,对于这组代码,我必须在每次需要粘贴时取消保护。
如果有任何人有任何见解,请告诉我。
答案 0 :(得分:1)
尝试ThisWorkbook.Worksheets("Sheet1").Unprotect Password:="password"
您的代码在此处没有Sheets("CDRF File (1)").Unprotect Password:="hammer"
和
Save the Workbook
然后
ThisWorkbook.Worksheets("Sheet1").Protect Password:="password"
答案 1 :(得分:0)
如@TnTinMn 的评论中所述,重复调用 Unprotect 的需要将是发生在工作簿事件中的操作。 如果可能,您可以更新必要事件中的代码以防止执行 Protect 命令。这可能是不可取的,因为可能会添加代码以确保工作表受到保护。
有些人建议将原始代码片段稍微清理一下,以便于维护。
您引用的两个工作表中的每一个都分配给变量。尽管设置了变量,但所有 Unprotect 调用都会拼出全名,而不是使用变量。
这个:
Sheets("CDRF File (1)").Unprotect Password:="hammer"
可能是:
wsCopyTo.Unprotect Password:="hammer"
密码在多个位置指定。将其保存到一个变量中,以便更改密码时只需要进行一次更新。
'add to declaration section
dim pwStr as string
pwStr = "hammer"
'...
wsCopyTo.Unprotect Password:=pwStr
初始的 Unprotect 应该在赋值之后执行,它允许使用工作表变量。
Set wsCopyFrom = ActiveWorkbook.Worksheets("STP_Data")
Set wsCopyTo = ActiveWorkbook.Worksheets("CDRF File (1)")
'unprotect sheets for CDRF (1)
wsCopyTo.Unprotect Password:=pwStr
评论应该被评论。也许这些是在复制到帖子后为了清楚起见而添加的,但它不会编译。
'Entity Name
'CIF
With...End With 语句的建议是进一步清理外观的建议。而不是不断地说明 wsCopyTo。 , 用 wsCopyTo 包裹块 然后代替:
wsCopyTo.Range(
该行可以以 .
开头.Range(
With wsCopyTo
'unprotect sheets for CDRF (1)
.Unprotect Password:="hammer"
'Entity Name
.Range("B11") = wsCopyFrom.Range("E30")
end with
更新了您提供的代码段的代码
Set wsCopyFrom = ActiveWorkbook.Worksheets("STP_Data")
Set wsCopyTo = ActiveWorkbook.Worksheets("CDRF File (1)")
With wsCopyTo
'unprotect sheets for CDRF (1)
.Unprotect Password:=pwStr
'Entity Name
.Range("B11") = wsCopyFrom.Range("E30")
'unprotect sheets for CDRF (1)
.Unprotect Password:=pwStr
'CIF
.Range("K11") = wsCopyFrom.Range("F30")
'unprotect sheets for CDRF (1)
.Unprotect Password:=pwStr
'TIN
.Range("M11") = wsCopyFrom.Range("G30")
End With