使用InputBox复制粘贴整个工作表

时间:2018-12-04 18:52:46

标签: excel vba excel-vba

我有这段代码,我正在尝试做一个简单的任务,显然这对我来说并不那么简单。我想对vba说要复制哪个工作表(这里是InputBox的功能,我在其中插入工作表名称),然后,如果存在(即名称正确)在表20中执行复制粘贴,如果不行存在,请转到exitmysub。

现在,我有两个问题:

1)它不复制粘贴。或至少并非总是如此。有时是,有时不是。而且我真的不明白为什么(我总是输入正确的工作表名称)

2)即使名称正确,代码也会运行msgbox(“无效的工作表名称”)。虽然我希望仅当我输入的工作表名称不存在时才触发。

谢谢您的帮助!

Option Explicit

Dim text As String, ws As Worksheet


Sub copyentiresheet()

text = InputBox("Write here the Local Deposit Sheet you want to update", "Update Local Deposit Monitoring")

On Error GoTo exitmysub
Sheet20.Cells.Clear
Set ws = Sheets(text)
    ws.Cells.Copy

Sheets20.Paste


exitmysub:
MsgBox ("Invalid Sheet Name")

End Sub

2 个答案:

答案 0 :(得分:2)

尝试一下...

Option Explicit

Dim text As String, ws As Worksheet

Sub copyentiresheet()

text = InputBox("Write here the Local Deposit Sheet you want to update", "Update Local Deposit Monitoring")

On Error GoTo ErrorMySub
Sheet20.Cells.Clear
Set ws = Sheets(text)
ws.Cells.Copy Sheet20.Range("A1")

ExitMySub:
Exit Sub

ErrorMySub:
MsgBox ("Invalid Sheet Name")

End Sub

答案 1 :(得分:1)

复制整个工作表

要点

  
      
  • InputBox VBA帮助:如果用户单击“取消”,则该函数将返回长度为零的字符串("")。
  •   
  • 如果工作表的 CodeName 错误,则代码将无法编译。无需错误处理。
  •   
  • 使用 With 语句来避免声明不必要的对象引用。
  •   
  • 使用 CodeName.Parent 引用工作簿,以避免在选择 ActiveWorkbook ThisWorkbook 时费解自己strong>或按名称命名的工作簿。
  •   
  • Exit Sub 在错误处理程序之前(之间)。
  •   

代码

Option Explicit

Sub CopyEntireSheet()

  Dim text As String

  text = InputBox("Write here the Local Deposit Sheet you want to update", _
      "Update Local Deposit Monitoring")

  If text = "" Then Exit Sub ' If the user clicks Cancel.

  Sheet20.Cells.Clear ' If sheet's code name is wrong, code won't compile.

  On Error GoTo SourceSheetErr

  With Sheet20.Parent.Worksheets(text)

    On Error GoTo RangeErr
    .Cells.Copy Sheet20.Cells

  End With

Exit Sub

SourceSheetErr:
  MsgBox "Invalid Source Sheet Name."
Exit Sub

RangeErr:
  MsgBox "(Copy) Range Error."

End Sub