2017-04-25 10 views
0

新しいExcelワークシートを作成するためにVBEコードを作成しようとしています。私は以下のコードを使用していますし、本当に正常に動作している新しいワークシートを作成するにはExcelシートを作成する条件を作成する方法

Dim ws As Worksheet 
    With ThisWorkbook 
     Set ws = .Sheets.Add(After:=.Sheets(.Sheets.count)) 
     ws.Name = "Savings" 
    End With 

しかし、今、私はこのロジック上で動作するIF条件にこのコードを変更する必要がありますがあれば「Savings」という名前のワークシートを削除し、新しいワークシートを作成します。「Savings」という名前の他に、「Savings」というシートを作成します。

"Savings"ワークシートを作成した後、新しいファイルとして保存したいので、名前を付けて保存ダイアログボックスの名前フィールドに名前(Savingsなど)を提案したいと思います。

Dim ws As Worksheet 
With ThisWorkbook 
    For Each ws In .Worksheets 
     If ws.Name = "Savings" Then 'If Savings exists 
      Application.DisplayAlerts = False 'Disable warnings 
      ws.Delete 'Delete Worksheet 
      Application.DisplayAlerts = True 'Enable warnings 
      Exit For 
     End If 
    Next ws 

    'Add Savings Worksheet 
    Set ws = .Worksheets.Add(After:=.Worksheets(.Worksheets.Count)) 
    ws.Name = "Savings" 
End With 

With Application.FileDialog(msoFileDialogSaveAs) 'SaveAs Dialog 
    .InitialFileName = "Savings" 'Suggested Name 
    .AllowMultiSelect = False 

    .Show 
    If .SelectedItems.Count > 0 Then 
     ThisWorkbook.SaveAs .SelectedItems(1) 'Save File 
    End If 
End With 

答えて

0

それを達成するためにループを必要としないこのような何かがあなたのために働く必要がありますされています

Sub tgr() 

    Dim wsSav As Worksheet 
    Dim sSavePath As String 
    Dim sExt As String 
    Dim lFileFormat As Long 

    With ThisWorkbook 
     On Error Resume Next 'Prevent error if worksheet doesn't exist 
     Set wsSav = .Sheets("Savings") 
     On Error GoTo 0   'Remove error condition 

     If Not wsSav Is Nothing Then 
      Application.DisplayAlerts = False 'Suppress "Are you sure?" worksheet delete prompt 
      wsSav.Delete 
      Application.DisplayAlerts = True 
     End If 
     Set wsSav = .Sheets.Add(After:=.Sheets(.Sheets.Count)) 
     wsSav.Name = "Savings" 

     sSavePath = Application.GetSaveAsFilename("Savings") 
     If sSavePath = "False" Then Exit Sub 'user pressed cancel 

     sExt = Mid(sSavePath, InStrRev(sSavePath, ".") + 1) 
     If Len(sExt) = 0 Then 
      sExt = "xlsm" 
      sSavePath = sSavePath & sExt 
     End If 

     Select Case LCase(sExt) 
      Case "xlsm": lFileFormat = 52 
      Case "xlsx": lFileFormat = 51 
      Case "xls":  lFileFormat = 56 
      Case Else: 
       MsgBox "Invalid Excel file extension """ & sExt & """" & Chr(10) & _ 
         "Unable to save file." 
       Exit Sub 
     End Select 

     Application.DisplayAlerts = False 'Suppress overwrite prompt (if any) 
     .SaveAs sSavePath, lFileFormat 
     Application.DisplayAlerts = True 
    End With 

End Sub 
+0

.showコマンドを挿入する方法を知っていますか?ファイルを保存すると、この新しいファイルが開きますか?あなたのコードでマクロを実行すると保存されますが、新しいファイルは閉じたままになりますので、ファイルを保存したフォルダに移動して開く必要があります。 また、私はちょうどこの特定のworkseetを保存したい(私は数多くのワークシートを持っています)。 –

+0

@LucasSenne ???名前を付けて保存するとファイルが保存され、アクティブなファイルは保存されたファイルになります。それを閉じて再度開く必要はありません。 – tigeravatar

+0

@LucasSenne特定のワークシートだけを節約するには、ワークシートを自分のワークブックに取得し、そのワークブックを(ActiveWorkbookを使用して)保存するために 'Worksheet.Move'を実行する必要があります。あなたがそれをするのを助ける必要があるならば、それは新しい質問になるでしょう – tigeravatar

0

を支援するためのみんなに感謝します。それを行うと、コードを使用して新しいシートを作成する前に削除されます。この方法のいいところは、あなたが

Dim ws as worksheet 

On Error Resume Next 
Set ws = ThisWorkbook.Sheets("Savings") 
On Error GoTo 0 

If not ws is nothing then 
    With Application 
     ' Disable Alerts 
     .DisplayAlerts = False 
     ' Delete sheet 
     ws.delete 
     ' Re-enable Alerts 
     .DisplayAlerts = True 
    End With 
End If 

With ThisWorkbook 
    Set ws = .Sheets.Add(After:=.Sheets(.Sheets.count)) 
    ws.Name = "Savings" 
End With 
+0

をほぼ完全に、名前を付けて保存ウィンドウのポップアップを働いていたが、とき保存ボタンをクリックすると、このエラーが発生します......................................エラー番号1004コードラインでThisWorkbook.SaveAs.SelectedItems(1) –

1

それが存在する場合、これはあなたの変数とテストにワークシートを設定します:

はあなたに、常にこれはトリックを行う必要があり、私に

+0

いいですが、投稿の第2部はどうですか? –

関連する問題