[英]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.