复制工作表而不复制完整的数据验证地址



如果我使用以下VBA将工作簿original workbook.xlsm中的数据验证源作为"='Validations'!$A$2:$A$10"放在Sheet1上:

Public Sub AddValidationToRange(targetRng As Range, validRng As Range)
With targetRng.Validation
.Delete
.Add Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, _ 
Formula1:="='" & validRng.Worksheet.Name & "'!" & validRng.Address
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub

然后我将Sheet1复制到另一个工作簿,数据验证源变成"=[original workbook.xlsm]Validations'!$A$2:$A$10"

我也在使用VBA来复制工作表:

ws.Copy after:=wb.Sheets(wb.Sheets.count)

我不希望出现这种工作簿假设,我希望源与"='Validations'!$A$2:$A$10"完全相同,因为我无论如何都会将Validations工作表复制到同一个新工作簿中进行自定义。

有没有一种方法可以有效地去除";绝对";引用工作簿并将数据验证保持在其宿主工作簿的本地?

工作表组(数组(

  • 您可以通过"一次性"复制两个工作表来实现这一点
  • 手动:选择Sheet1,然后按CTRL,然后选择Validations。现在右键单击其中一个选项卡并选择Move or Copy
  • 您也可以使用以下代码

代码

Sub copyGroupOfWorksheets()

Dim swb As Workbook
Set swb = ThisWorkbook ' The workbook conataining this code.
Dim dst As Workbook
Set dst = Workbooks("Test.xlsm")

swb.Worksheets(Array("Sheet1", "Validations")).Copy _
After:=dst.Sheets(dst.Sheets.Count)
End Sub

相关内容

  • 没有找到相关文章

最新更新