繁体   English   中英

打开工作簿下标超出范围

[英]Open Workbook subscript out of range

我编写了 VBA 代码来打开位于服务器上的不同工作表并将其中的一些数据复制到主工作表。 之后它们被关闭。 它运行良好,对我来说完全没有问题,但我有一台无法运行的 PC,它显示“下标超出范围”。 它打开工作表,但找不到我需要的工作表。 网络位置以相同的名称映射到两台 PC 上。

For 查找日期为 -1 的列并设置 i 为坐标。 稍后 While 正在检查单元格是否没有填充,因为彩色单元格无关紧要。 如果是这样,只要找到未填充的单元格,它就会在左侧单元格上移动。

 Sub importData()
    Dim sht As String
    Dim i As Integer
    sht = Cstr(Date - 1)
    Dim Temp(1 To 38) As String
      
    
    For i = 4 To 42
        If Cells(3, i).Value = sht Then
            Exit For
        End If
    Next i
    
    While Cells(2, i).Interior.ColorIndex <> xlColorIndexNone
        i = i - 1
            sht = Cells(3, i).Value
    Wend
    
    Workbooks.Open "path to file & filename.xlsm"
    Workbooks("filename").Worksheets(sht)

我真的找不到为什么它可以在我的 PC 上运行,而不能在其他计算机上运行。 也许有人看到了我没看到的东西。

问题在于sht = Cstr(Date - 1)

Cstr将根据操作系统中设置的日期格式将日期转换为字符串。 在我的情况下是yyyy-mm-dd所以今天我将得到结果2022-06-01并将用作工作表名称。

现在,如果您的计算机日期设置为mm/dd/yyyy ,例如您的计算机将生成06/01/2022作为工作表名称。 所以这不是生成字符串的可靠方法。

而是使用Format 函数并定义您的字符串应具有的格式:

sht = Format$(Date - 1, "yyyy-mm-dd")

现在,无论您的计算机使用哪种日期格式,这将始终生成相同的字符串。


并不是因为您在Cells(3, i).Value = sht中使用了文本,所以请确保您是否在单元格中使用数字日期,而不是使用String来比较它,而是使用数字日期:

Cells(3, i).Value = Date - 1

否则,如果计算机日期的格式不同,您也可能在这里失败!

如果单元格值是数字日期而不是您需要使用的文本/字符串,则sht = Cells(3, i).Value也是如此

sht = Format$(Cells(3, i).Value, "yyyy-mm-dd")

并定义格式。

暂无
暂无

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

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