Excel 在不复制完整数据验证地址的情况下复制工作表
如果我使用以下VBA将数据验证源放入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, _
工作表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
可能使用了间接的,但还没有测试过。很棒的东西,我隐约记得以前看到过一系列的表单被使用过,这似乎是一个完美的用例。我明天早上试试!工作完美。非常感谢,我一定会记住的。