【发布时间】:2016-10-19 21:26:02
【问题描述】:
这简直让我发疯。 我是 VBA 的新手,我逐行编译代码,添加越来越多的代码来验证它是否在使用 F8 的同一个工作簿中工作。我必须添加的最后一点只是打开一个单独的工作簿,现在它每次都给我错误。这是我的代码:
Sub MasterXfer()
Dim mystring As String, wbName As String, dt As String, sdt As String, ldt As String
Dim wb1 As Workbook, wb2 As Workbook, mypath As String
wbNam = "Productivity "
dt = Sheet1.Range("B1").Value
sdt = Format(CStr(dt), "m.d.yy") & ".xlsx"
ldt = Format(CStr(dt), "yyyy") & "\" & Format(CStr(dt), "mm") & "_" & MonthName(Month(dt)) & "_" & Year(dt)
mypath = "S:\" & ldt & "\" & wbNam & sdt
Set wb1 = ThisWorkbook
Set wb2 = Workbooks.Open(mypath) 'HERE'S WHERE IT ERRORS OUT
With wb1
lastrow = Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row
For x = 2 To lastrow Step 16
mystring = .Range("A" & x)
通过这个,它工作正常。然后我到达Set wb2 = Workbooks.Open 行,它成功打开了目标工作簿,但是在打开它后代码立即停止并且出现了相关错误。
如果有人能告诉我我犯了什么错误,我会以你的名字命名我的长子。
【问题讨论】:
-
另外,为了记录,这不是所有的代码,只是稍微过去了错误发生的地方。
-
此时
debug.print mypath会显示什么(使用 [ctrl]+G 查看即时窗口)?当您只能使用Format(date, "mmm")或Format(date, "mmmm")时,为什么还要使用像MonthName这样的“辅助”功能?我似乎记得包含句点的工作簿名称的问题;没有它们你能运行测试吗? -
lastrow = Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row这里Worksheets(1)与 wb1 无关,因为您错过了领先时期。除非你是那个意思。 -
嘿@Jeeped!我是在即时窗口中键入 debug.print mypath,还是应该在代码中的某个位置?对为什么问题的简短回答很简单,就是我对此很陌生,并且在学习过程中学习了最佳实践。最后,这是为我的公司准备的,目标工作簿的格式都是一年中每周的句点,否则我会为它们命名。 @Tim Williams 会导致有问题的错误吗?我看到了我的逻辑漏洞,我要改变它,只是想知道这是否是问题所在。
-
在
Set wb2 = ...行下,输入Debug.print mypath。从即时窗口复制该行并将其粘贴到 Windows 资源管理器窗口的地址栏中。这将验证您正在构建的路径是否指向存在的文件。如果无法打开,请将两条路径(您的路径和实际路径)复制到记事本中以查看可能缺少的内容。