2017-06-11 4 views
1

これは初めてのスタックオーバーフローの投稿です。私はシート1のセル値に基づいて新しいワークシートを作成するためにVBAを使用しようとしています。しかし、シートが既に存在する場合は、代わりにそのシートを開く必要があります。私は実際にシートの名前を知っていないので、これで問題があります。私は、カウンターを使ってプロジェクトの名前を保管する別のシートを作成すると、これを行うことができると思いました。それは私がしている実行時エラー91がこれは私が現在持っているコードである私を示していますVBAのセル名に基づいてワークシートを開きます。

Public Sub DailyReport() 

Dim project As Range 
project = Worksheets("Target Flow").Range("B3") 

Dim i As Integer 
i = 1 

If Worksheets("Target Flow").Range("B3") <> 
Worksheets("Projects").Cells(1000, 1).Value Then 

Worksheets("Target Flow").Range("B3").Select 
Selection.Copy 

Worksheets("Projects").Activate 
Cells(i, 1).Select 
ActiveSheet.Paste 


Dim WS As Worksheet 
Set WS = Sheets.Add(After:=Sheets(Worksheets.Count)) 

WS.Name = project.Value 

i = i + 1 

Else 

Worksheets("Target Flow").Activate 
Worksheets(ActiveSheet.Range("B3").Value).Activate 

End If 

End Sub 

誰もが正しい方向に私を導くことができれば、私は感謝されると思います!!

答えて

1

このコードは、アクティブなワークブック内のすべてのシートをスキャンし、名前が一致するかどうかを確認します。ループの後に一致が見られない場合は、それが作成されます。

Dim targetSheetName As String 
Dim targetSheetFound As Boolean 
Dim sheet As Worksheet 

targetSheetName = Worksheets("Target Flow").Range("B3") 
targetSheetFound = False 

For Each sheet In ActiveWorkbook.Worksheets 

    If sheet.Name = targetSheetName Then 

     targetSheetFound = True 
     sheet.Activate 

    End If 

Next 

If Not targetSheetFound Then 

    set sheet = Sheets.Add 
    sheet.Name = targetSheetName 

End If 
+0

OMGありがとうございます! – newbie2vba

+0

うれしい私は助けることができます。私はシートの前に "set"コマンドを追加する答えを編集しました= Sheets.addも期待通りに動作することを確認してください。 – Graham

関連する問題