Excel 在不复制完整数据验证地址的情况下复制工作表

Excel 在不复制完整数据验证地址的情况下复制工作表,excel,vba,Excel,Vba,如果我使用以下VBA将数据验证源放入工作表1上的工作簿原始工作簿.xlsm中作为“='Validations'!$a$2:$a$10”: Public Sub AddValidationToRange(targetRng As Range, validRng As Range) With targetRng.Validation .Delete .Add Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, _

如果我使用以下VBA将数据验证源放入
工作表1上的工作簿
原始工作簿.xlsm
中作为
“='Validations'!$a$2:$a$10”

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键,然后选择
    验证
    。现在右键单击其中一个选项卡并选择移动或复制
  • 您还可以使用以下代码
代码

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

可能使用了
间接的
,但还没有测试过。很棒的东西,我隐约记得以前看到过一系列的表单被使用过,这似乎是一个完美的用例。我明天早上试试!工作完美。非常感谢,我一定会记住的。