将Worksheet.Name设置为VBA中的cell.value时,获取types不匹配错误

我已经写了下面的代码来创build名称与Sheet1的第一列中的名称相同的工作表我试图在新的工作表上设置名称,但不知道为什么时得到一个TypeError。 有人可以帮忙吗?

Sub CreateWorkSheets() ' ' Macro5 Macro ' ' Dim r As Range Set r = Sheets("Sheet1").Columns(1) For Each cell In r Dim aa As String Dim newSheet As Worksheet Set newSheet = Sheets.Add(After:=Sheets(Sheets.Count)) strTemp = cell.Value newSheet.Name = strTemp // Error Here Next cell End Sub 

我也尝试了下面的代码,即使strValue是有效的也不起作用

 Sub Test1() Sheets("Sheet1").Select Dim x As Integer ' Set numrows = number of rows of data. NumRows = Range("A2", Range("A2").End(xlDown)).rows.Count ' Select cell a1. Range("A2").Select ' Establish "For" loop to loop "numrows" number of times. For x = 1 To NumRows Dim newSheet As Worksheet Set newSheet = Sheets.Add(After:=Sheets(Sheets.Count)) Sheets("Sheet1").Range("B1").Value = "A" + Trim(Str(x)) strValue = "A" + Trim(Str(x)) newSheet.Name = Str(Sheets("Sheet1").Range(strValue).Value) Next End Sub 

显然是因为你设置了:

 Set r = Sheets("Sheet1").Columns(1) 

它将单元格对象设置为列$ A:$ A而不是$ A $ 1,就像您想的那样。 当我碰到“cell.value”这一行时,我把它放在了即时窗口中:

 ?cell.Address $A:$A 

你应该避免使用整列来做你想做的事情,我强烈build议你将这些关键字添加到模块的顶部:

 Option Explicit 

这将更彻底地检查你的代码,并帮助你避免不必要的错误。

要解决这个问题,你可以得到你需要的确切范围,我build议你声明每个variables,使其保持特定的types。

像这样的东西:

 Option Explicit Sub CreateWorkSheets() Dim r As Range Dim sh As Worksheet Dim tempSh As Worksheet Dim cell As Range Dim strTemp As String Set sh = Sheets("Sheet1") Set r = sh.Range(sh.Cells(1, 1), sh.Cells(sh.Rows.Count, 1).End(xlUp)) For Each cell In r Set tempSh = Sheets.Add(After:=Sheets(Sheets.Count)) strTemp = cell.Value tempSh.Name = strTemp '// no more error Next cell End Sub