【问题标题】:Run-time error 438: Object doesn't support this property or method (VBA)运行时错误 438:对象不支持此属性或方法 (VBA)
【发布时间】: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 资源管理器窗口的地址栏中。这将验证您正在构建的路径是否指向存在的文件。如果无法打开,请将两条路径(您的路径和实际路径)复制到记事本中以查看可能缺少的内容。

标签: vba excel


【解决方案1】:

你的错误是由这行mystring = .Range("A" & x)引起的。 Workbook 没有 Range 方法。您需要将其更改为wb1.Worksheets(1)

您还应该在打开文件之前测试文件是否存在。

我在Format 函数Format 参数中包含了另一种创建文件字符串的方法,该方法使用反斜杠来转义字符。

Sub MasterXfer()
    Dim wb2 As Workbook
    Dim mypath As String

    mypath = Format(Sheet1.Range("B1").Value, "\S:\\YYYY\\MM_MMMM_YYYY\\Pro\du\ctivit\y MM.DD.YY.xl\sx")

    If Len(Dir(mypath)) = 0 Then
        MsgBox "File not found" & vbCrLf & mypath
        Stop
        Exit Sub
    End If

    Set wb2 = Workbooks.Open(mypath)

    With ThisWorkbook.Worksheets(1)

        LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
        For x = 2 To LastRow Step 16
            mystring = .Range("A" & x)
        Next

    End With

End Sub

【讨论】:

  • 看起来我正在命名我的孩子托马斯。感谢您的帮助,我现在可以高枕无忧了!
猜你喜欢
  • 1970-01-01
  • 2018-04-30
  • 2019-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多