1

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
4

1 に答える 1

1

どうやらあなたが設定したため:

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

セルオブジェクトを、あなたが思うように$ A $ 1ではなく、列$ A:$Aに設定します。「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
于 2012-12-04T22:09:15.393 に答える