使用VBAmacros复制工作表时,数据validation丢失

问题:使用macros复制工作表时,遇到数据validation问题,无法复制到复制的工作表。 有没有办法使用我现在的代码做到这一点?

是的,我也知道有一个类似的问题(这里: 当我将工作表复制到另一个工作簿时丢失了数据validation ),但是这不是一个相同的问题,目前还没有答案。 任何帮助获得这些数据validation与数据一起复制将不胜感激,并将节省数小时的不必要的重复性工作。

编辑:此代码位于我的工作簿的“ThisWorkbook”部分。

我的代码如下:

Dim wb As Workbook Dim wsTemp As Worksheet Dim sName As String Dim bValidName As Boolean Dim i As Long bValidName = False Do While bValidName = False sName = InputBox("Please name this new worksheet:", "New Sheet Name", Sh.Name) If Len(sName) > 0 Then For i = 1 To 7 sName = Replace(sName, Mid(":\/?*[]", i, 1), " ") Next i sName = Trim(Left(WorksheetFunction.Trim(sName), 31)) If Not Evaluate("ISREF('" & sName & "'!A1)") Then bValidName = True End If Loop With Application .ScreenUpdating = False .DisplayAlerts = False .EnableEvents = False End With Set wb = ThisWorkbook Set wsTemp = wb.Sheets("TEMPLATE") wsTemp.Visible = xlSheetVisible wsTemp.Copy After:=wb.Sheets(wb.Sheets.Count) ActiveSheet.Name = sName Sh.Delete wsTemp.Visible = xlSheetHidden 'Or xlSheetVeryHidden With Application .ScreenUpdating = True .DisplayAlerts = True .EnableEvents = True End With ' Call Sort_Active_book ' Call Rebuild_TOC 

您应该能够复制工作表并保留DV。 这个例子:

  • 激活Sheet1
  • Sheeet1上创build一个简单的DV
  • Sheet1复制到工作簿的末尾

 Sub Macro2() Sheets("Sheet1").Select Range("D1").Select ActiveCell.FormulaR1C1 = "alpha" Range("D2").Select ActiveCell.FormulaR1C1 = "beta" Range("D3").Select ActiveCell.FormulaR1C1 = "gamma" Range("B1").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$D$1:$D$3" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With Sheets("Sheet1").Select Sheets("Sheet1").Copy After:=Sheets(3) End Sub 

这是在Win 7 / Excel 2007系统上的新的空工作簿上运行的logging代码。

你能复制我的结果吗?

如果我的代码在您的系统上运行,那么首先尝试在录像机转向时手动模拟您的VBA代码。 然后把你的logging代码,并修改它包括不可logging的部分, (如InputBox语句)