【问题标题】:VBA: Run-time error '438': Object doesn't support this property or methodVBA:运行时错误“438”:对象不支持此属性或方法
【发布时间】:2018-05-04 20:59:51
【问题描述】:

我正在尝试通过在每次运行时更改 URL 来动态导入基于 Web 的 CSV 文件。所以我有一个 URL,我通过输入最后一个字符串作为用户通过输入框输入的变量来动态管理它。

问题是,我收到“运行时错误 '438':对象不支持此方法。

所以这是一个正在通过的 URL 示例。如果您愿意,可以将“BRZ”更改为“ASB”以查看不同的示例。

http://cf3.myplumbingshowroom.com/scheduledScripts/brandDataAPI.cfm?brandCode=BRZ

如您所见,该链接会将您直接带到该文件夹​​。

我不知道这意味着什么。我看到很多人都遇到了同样的问题,但是“.ListObject.DisplayName”是返回错误的代码部分。为了便于参考,我将代码部分加下划线并突出显示。

Sub Macro3()
'Defining Variables
Dim myValue As Variant
Dim Link As Variant


'Creating a link
Link = "http://cf3.myplumbingshowroom.com/scheduledScripts/brandDataAPI.cfm?brandCode="


'creating a the variable to be passed into the link
myValue = InputBox("Enter your brand code here")


'completing our link
Link = "http://cf3.myplumbingshowroom.com/scheduledScripts/brandDataAPI.cfm?brandCode=" & myValue
'checking if it exists
MsgBox Link


'if the query already exists, we're going to delete it. Otherwise, we're going to ignore that function.


On Error Resume Next
ActiveWorkbook.Queries("brandDataAPI").Delete
On Error GoTo 0




    Application.CutCopyMode = False
    ActiveWorkbook.Queries.Add Name:="brandDataAPI", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Source = Csv.Document(Web.Contents(" & Link & "),[Delimiter="","", Columns=11, Encoding=1252, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & "    #""Promoted Headers"" = Table.PromoteHeaders(Source, [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & "    #""Changed Type"" = Table.TransformColumnTypes(#""Promoted Header" & _
        "s"",{{""BrandName"", type text}, {"" BrandCode"", type text}, {"" BrandID"", Int64.Type}, {"" datalastUpdate"", type date}, {"" numproducts"", Int64.Type}, {""priceMethod"", type text}, {""URL"", type text}, {""showPrice"", Int64.Type}, {""MAP_YN"", Int64.Type}, {""MAP"", type text}, {""msrpNotes"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Changed Type"""
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""brandDataAPI"";Extended Properties=""""" _
        , Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [brandDataAPI]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = False
        .Refresh BackgroundQuery:=True
        ***.ListObject.DisplayName***
    End With
End Sub

【问题讨论】:

  • 星号是代码的一部分,还是试图强调?另外,可能尝试从 ActiveSheet.ListObjects.Add 中删除 ActiveSheet

标签: vba excel


【解决方案1】:

如果您已经有一个同名的表,就会发生这种情况。特别是如果您有一个使用此名称的表并且您删除了它,但它并没有完全消失,尽管它不可​​见。

所以首先循环所有列表对象并删除任何具有建议名称的对象,例如“你好”:

Option Explicit

Sub test()
    Dim ws As Worksheet
    Dim l As ListObject
    For Each ws In ThisWorkbook.Worksheets
        For Each l In ws.ListObjects
            If l.Name = "Hello" Then l.Delete
        Next l
    Next ws

'Do your stuff
End Sub

【讨论】:

  • 即使我将 VBA 代码放入新工作表中也会出现此错误。
  • 您能否改为在创建后定位表而不是创建时的查询表?似乎您也可以通过名称框进行更改,这很奇怪。抱歉,帮不上忙,因为这为我解决了类似的问题。
猜你喜欢
  • 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
相关资源
最近更新 更多