我编写了以下代码来创建工作表,其名称与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
答案 0 :(得分:1)
显然是因为你设置了:
Set r = Sheets("Sheet1").Columns(1)
它将单元格对象设置为$ A:$ A而不是$ A $ 1,就像您想象的那样。当我遇到“cell.value”行时,我把它放在了即时窗口中:
?cell.Address
$A:$A
您应该避免使用整个列来执行您尝试执行的操作,我强烈建议您将这些关键字添加到模块的顶部:
Option Explicit
这将更彻底地检查您的代码并帮助您避免不必要的错误。
要解决此问题,您可以获得所需的确切范围,我建议您声明每个变量,使其保持特定类型。
这样的事情:
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