繁体   English   中英

子例程的下标超出范围错误

[英]Subscript out of range error for subroutine

我正在尝试在不同的工作簿之间复制数据。 由于用户可以选择文件名,因此工作簿的名称偶然是随机的,因此我在代码中做了一组工作簿。 当我在程序中包含子例程时,它说明下标超出范围。

关于如何确保子例程继续理解我对工作簿的定义的任何想法?

如果您不太了解第一个子句的基本原理,则会简化我的代码:

Option Explicit
Sub testwe()
Dim wb As Workbook, wb2 As Workbook, vFile As Variant
Set wb = ActiveWorkbook 

vFile = Application.GetOpenFilename("Excel-files,*.xls", _
    1, "Select One File To Open", , False)
'if the user didn't select a file, exit sub
If TypeName(vFile) = "Boolean" Then Exit Sub
Workbooks.Open vFile
Set wb2 = ActiveWorkbook 'set the opened file as wb2

Call test123
End Sub

 sub test123()
 wb.Worksheets("Sheet1").Range("A1") = wb2.Worksheets("Sheet1").Range("B1")
 End Sub

您需要使wbwb2 Global:

Dim wb As Workbook, wb2 As Workbook

Sub testwe()
    Set wb = ActiveWorkbook

    vFile = Application.GetOpenFilename("Excel-files,*.xls", _
        1, "Select One File To Open", , False)
    'if the user didn't select a file, exit sub
    If TypeName(vFile) = "Boolean" Then Exit Sub
    Workbooks.Open vFile
    Set wb2 = ActiveWorkbook 'set the opened file as wb2
    Call test123
End Sub

 Sub test123()
    wb.Sheets("Sheet1").Range("A1") = wb2.Sheets("Sheet1").Range("B1")
 End Sub

编辑#1

此版本使用道格的建议:

Sub testwe()
    Dim wb As Workbook, wb2 As Workbook
    Set wb = ActiveWorkbook
    vFile = Application.GetOpenFilename("Excel-files,*.xls", _
        1, "Select One File To Open", , False)
    'if the user didn't select a file, exit sub
    If TypeName(vFile) = "Boolean" Then Exit Sub
    Workbooks.Open vFile
    Set wb2 = ActiveWorkbook 'set the opened file as wb2
    Call test123(wb, wb2)
End Sub

 Sub test123(wb As Workbook, wb2 As Workbook)
    wb.Sheets("Sheet1").Range("A1") = wb2.Sheets("Sheet1").Range("B1")
 End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM