2017-04-25 92 views
0

我想创建一个VBE代码来创建一个新的Excel工作表。如何创建if条件来创建Excel工作表

要创建一个新的工作,我使用下面的代码,并正在真精:

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

但现在我需要将这个代码更改为IF条件,将这个逻辑工作:如果有一个名为“Savings”的工作表将其删除并创建一个新的工作表名为“Savings”的其他工作表只需创建工作表“Savings”即可。

后,我创建的工作表“储蓄”我想保存为一个新的文件,我想在另存为对话框中的名称字段建议一个名称(如储蓄)。

谢谢你们总是帮着我

回答

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(这个Excel文件我有许多工作表) –

+0

@LucasSenne ??? SaveAs保存文件,然后您的活动文件变为保存的文件。应该没有必要关闭并重新打开它。 – tigeravatar

+0

@LucasSenne至于储蓄只是具体的工作,你需要做一个'Worksheet.Move'把它变成自己的,工作簿,然后保存工作簿(使用ActiveWorkbook)。如果您需要帮助这样做,这将是一个新的问题 – tigeravatar

0

这应该做的伎俩:

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

几乎工作,另存为窗口弹出完美,但是当我点击保存按钮发生这个错误......................................错误号码1004在代码行ThisWorkbook.SaveAs.SelectedItems(1) –

1

如果存在的话这将工作表设置为您的变量和测试。如果是这样,它会在使用您的代码创建新工作表之前将其删除。这个方法的好处是,你不需要一个循环来实现它

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

不错,但对于邮政的第二部分? –