多个unprotect表VBA代码

时间:2017-02-10 20:40:26

标签: vba excel-vba excel

'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")

您好。所以我的问题是为什么我需要取消保护每行复制和粘贴。在我只需要一行来获得期望结果之前,对于这组代码,我必须在每次需要粘贴时取消保护。

如果有任何人有任何见解,请告诉我。

2 个答案:

答案 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