【发布时间】:2013-05-01 17:37:40
【问题描述】:
我的公司使用 excel 生成用于我们所有商店的网络配置。除了输入到 Excel 中的变量表中的一些变量之外,配置几乎相同。用户然后单击命令按钮,瞧,变量被放入配置中,并在工作簿中创建一个新工作表。这为我们工作了多年。但是,我们最近升级到 Office 2013,现在我们的配置模板都不起作用。代码不多,所以这可能相对容易,但我不是程序员。代码如下:
Public Sub ReplaceValues(OriginalSheetName As String, VariableSheetName As String, NewSheetName As String)
Dim iVariableRowCounter As String
Dim sSearchValue As String
Dim sReplacementValue As String
Dim iControlCounter As Integer
ThisWorkbook.Sheets(OriginalSheetName).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = NewSheetName
For iControlCounter = ThisWorkbook.Sheets(NewSheetName).Shapes.Count To 1 Step -1
If ThisWorkbook.Sheets(NewSheetName).Shapes(iControlCounter).Type = msoOLEControlObject Then
ThisWorkbook.Sheets(NewSheetName).Shapes(iControlCounter).Delete
End If
Next
iVariableRowCounter = 2
While ThisWorkbook.Sheets(VariableSheetName).Cells(iVariableRowCounter, 1).Value <> ""
sSearchValue = ThisWorkbook.Sheets(VariableSheetName).Cells(iVariableRowCounter, 1).Value
sReplacementValue = ThisWorkbook.Sheets(VariableSheetName).Cells(iVariableRowCounter, 2).Value
ThisWorkbook.Sheets(NewSheetName).UsedRange.Replace what:=sSearchValue, replacement:=sReplacementValue, searchorder:=xlByColumns, MatchCase:=False, lookat:=xlPart
iVariableRowCounter = iVariableRowCounter + 1
Wend
End Sub
Public Function GenerateNewWorksheetName(OriginalSheetName As String) As String
Dim sNewSheetName As String
Dim iIncrement As Integer
Dim iSheetCounter As Integer
Dim bGoodName As Boolean
Dim bSheetFound As Boolean
iIncrement = 1
bGoodName = False
While Not bGoodName
sNewSheetName = OriginalSheetName & " - " & iIncrement
bSheetFound = False
For iSheetCounter = 1 To ThisWorkbook.Sheets.Count
If ThisWorkbook.Sheets(iSheetCounter).Name = sNewSheetName Then
bSheetFound = True
Exit For
End If
Next
If Not bSheetFound Then
bGoodName = True
End If
iIncrement = iIncrement + 1
Wend
GenerateNewWorksheetName = sNewSheetName
End Function
非常感谢任何帮助。谢谢。
【问题讨论】:
-
什么不起作用?错误的值还是您遇到错误?还有什么?
-
抱歉,这可能会有所帮助。当我单击命令按钮输入变量时,出现运行时错误“1004”:工作表类的复制方法失败。我得到一个结束按钮和一个调试按钮。当我单击调试按钮时,它会突出显示这一行: ThisWorkbook.Sheets(OriginalSheetName).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
-
调用此代码的代码行是什么?单击调试后,如果您将鼠标悬停在
OriginalSheetName上,弹出的小窗口会说什么?这是运行代码的 3 个工作簿中的一个工作表的名称吗? -
Dim iVariableRowCounter As String应该是Integer而不是String? -
您的工作簿是否受到保护?您的工作表是否受到保护?有没有隐藏的工作表?
标签: excel excel-2013 vba