如果我使用以下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