我有这段代码,我正在尝试做一个简单的任务,显然这对我来说并不那么简单。我想对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
答案 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