【发布时间】:2018-02-12 01:43:06
【问题描述】:
我正在尝试将工作簿名称 Source.xlsm 的 sheet1 复制到工作簿名称 s.xlsx。然后将复制的工作表重命名为 D1 列值。 我的代码正确复制了工作表,但重命名时出错。
不是显示消息名称已经退出,而是转到其他部分并给出错误:运行时错误'1004':无法将工作表重命名为另一个工作表的名称。并且这一行 Sheet.Name = range("D1") 被突出显示。
请纠正我做错了什么。
我的代码是:
Sub savesheet()
Dim sPath As String
Dim wbPath1 As Workbook
Dim wsName As String
sPath = Application.ActiveWorkbook.Path & "\s\s.xlsx"
Set wbPath1 = Workbooks.Open(sPath)
Workbooks("Source.xlsm").Sheets("Sheet1").Copy After:=wbPath1.Sheets(1)
'For Each Sheet In ActiveWorkbook.Sheets
For Each Sheet In Workbooks("s.xlsx").Sheets
If Sheet.Name = range("D1") Then
MsgBox "name already exits"
Exit Sub
Else
Sheet.Name = range("D1")
End If
Next
End Sub
【问题讨论】:
-
您的
range("D1")不是每个工作表上的范围(“D1”)。在循环浏览 wbPath1 中的工作表时提供适当的父工作表参考。 -
如果工作表名称已经存在,您希望复制的工作表被称为什么?还是要将其默认为自动生成的名称(例如 sheet4)?
-
@Alex 现在我只想,这个代码显示消息框,通知工作表名称已经退出并退出子。
-
@Jeeped:如果您打算更改这行代码 If Sheet.Name = range("D1") 那么。我用这一行更改它 If Sheet.Name = Workbooks("Cash Loading.xlsm").Sheets("Sheet1").range("D1") Then 但仍然没有运气。能否请您详细说明您的意思。
-
尝试将
range("D1")更改为range("D1").value。最好通过将此范围分配给您已经贴花的变量来跟踪错误:wsName = range("D1").value。并确保您引用了正确的工作簿和工作表。所以扩展代码是:wsName = Workbooks("Source.xlsm").sheets(1).range("D1").value