Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA,错误438“对象不支持此属性或方法_Excel_Vba - Fatal编程技术网

Excel VBA,错误438“对象不支持此属性或方法

Excel VBA,错误438“对象不支持此属性或方法,excel,vba,Excel,Vba,我在这段代码中得到了一些帮助,但我遇到了一个问题,或者我认为是一个问题。上次查找时,我被告知对象不支持此属性或方法。我知道这可能很简单,但我的大脑正在冒烟。如果有人知道为什么会发生这种情况,我希望得到一些帮助。 谢谢 Option Explicit Sub Update_Dakota() Dim wsDAO As Worksheet 'Dakota OOR Dim wsDAD As Worksheet 'Dakota Dat

我在这段代码中得到了一些帮助,但我遇到了一个问题,或者我认为是一个问题。上次查找时,我被告知对象不支持此属性或方法。我知道这可能很简单,但我的大脑正在冒烟。如果有人知道为什么会发生这种情况,我希望得到一些帮助。

谢谢

Option Explicit

Sub Update_Dakota()

    Dim wsDAO As Worksheet              'Dakota OOR
    Dim wsDAD As Worksheet              'Dakota Data
    Dim wsDAR As Worksheet              'Dakota Archive
    Dim wsPOR As Workbook               'New Workbook
    Dim lastrow As Long, fstcell As Long
    Dim strFile As String, NewFileType As String, filename As String

    Set wsDAO = Sheets("Dakota OOR")
    Set wsDAD = Sheets("Dakota Data")
    Set wsDAR = Sheets("Dakota Archive")


    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .EnableEvents = False
    End With

    lastrow = wsDAD.Range("B" & Rows.Count).End(xlUp).Row + 1

    With wsDAD
        .Range("I2").Formula = "=COUNTIFS('Dakota OOR'!$B:$B,$A2,'Dakota OOR'!$D:$D,$C2, 'Dakota OOR'!$G:$G,$F2)"
        .Range("J2").Formula = "=IF(I2,""Same"",""Different"")"
        wsDAD.Range("I2:J2").Copy wsDAD.Range("I3:J" & lastrow)
        wsDAD.Range("I:J").Calculate
    End With


    strFile = Application.GetOpenFilename()
    NewFileType = "Excel Files 2007 (*.xls)"
    Set wsPOR = Application.Workbooks.Open(strFile)
    lastrow = wsPOR.Range("A" & Rows.Count).End(xlUp).Row + 1

    wsPOR.Range("A2:G" & lastrow).Select


End Sub
错误就在这里

lastrow = wsPOR.Range("A" & Rows.Count).End(xlUp).Row + 1
wsPOR是工作簿而不是工作表。如果您正在使用该工作簿的Sheet1,请尝试以下操作

lastrow = wsPOR.Sheets("Sheet1").Range("A" & _
          wsPOR.Sheets("Sheet1").Rows.Count).End(xlUp).Row + 1
同样地

wsPOR.Range("A2:G" & lastrow).Select
应该是

wsPOR.Sheets("Sheet1").Range("A2:G" & lastrow).Select

lastrow=wsPOR.RangeA&Rows.Count.EndxlUp.Row+1没有与之关联的工作表。wsPOR设置为您的工作簿。您只能在工作表上找到范围。此外,下一行wsPOR.RangeA2:G&lastrow。Select需要引用工作表,而不是工作簿。您回答了+1。我发表了评论。如果您打算使用ws作为t,我们都说了同样的话!+1工作表变量的前缀,然后使用不同的东西,例如wb,作为工作簿变量的前缀。我正在考虑这样做。我只是想在调整小事情之前,用它来工作……但你是对的。@MattRidge-参考barrowc的评论,明智地标记变量是一个很好的做法首先,当你在代码中使用它们时,它有助于理解它们是什么。有些地方有一个约定,我忘了它的名字,但也许其他人可以附和它。它基本上就像Dim strVar一样,字符串Dim intVar一样,整数Dim lngVar一样,只要你知道你在使用什么。花多一点时间o提前做这件事,培养纪律将为你以后省去许多痛苦!@ScottHoltzman谢谢,我是自学成才的,所以我错过了很多这里的人们认为理所当然的技能。