Excel 各种错误,取决于格式-运行时“;438&引用;91&引用;13“;

Excel 各种错误,取决于格式-运行时“;438&引用;91&引用;13“;,excel,vba,Excel,Vba,我正试图根据第三列中的值将多个列从一个工作簿复制到另一个。我尝试了多种格式,将对象声明为范围,或变量,将所选范围设置为。值或。选择。总之,这导致了运行时错误438424、91和13 最近的迭代正在生成“运行时错误438:对象不支持此属性或方法” Sub Fetch() Dim Group As String Dim gPath As String Dim BUname As String Dim PMAname As String Dim Backup A

我正试图根据第三列中的值将多个列从一个
工作簿复制到另一个
。我尝试了多种格式,将对象声明为
范围
,或
变量
,将所选范围设置为
。值
。选择
。总之,这导致了运行时错误438424、91和13

最近的迭代正在生成“运行时错误438:对象不支持此属性或方法”

Sub Fetch()
    Dim Group As String
    Dim gPath As String
    Dim BUname As String
    Dim PMAname As String
    Dim Backup As Workbook
    Dim PMA As Workbook
    Dim Fetch As Workbook, Home As Worksheet

    Set Fetch = ThisWorkbook
    Set Home = ThisWorkbook.Sheets("Home")
    Group = Range("B2").Value
    mola = Range("B1").Value
    maybe = Format(mola, "mm")
    real = Format(mola, "yy")
    nope = Format(mola, "yyyy")
    ShtNm = Format(mola, "mm.yy")
    gPath = "U:\BILLREC\M & R EG Billing\Analysts\My Name\" & Group & "\M2M\Original Backup" & "\" & nope & "\"
    BUname = gPath & maybe & "." & real & " " & "Original Backup" & ".xlsx"
    PMAname = gPath & maybe & "." & real & " " & "PMA" & ".xlsx"

    'Opens Backup File and determines current premium
    Set Backup = Workbooks.Open(BUname)

        Backup.Sheets(ShtNm).Range(Range("E2"), Range("E2").End(xlDown)).Copy
        Home.Range("D2").PasteSpecial xlPasteValues

        Backup.Sheets(ShtNm).Range(Range("N2"), Range("N2").End(xlDown)).Copy
        Home.Range("E2").PasteSpecial xlPasteValues

        If Application.CountIf(Backup.Sheets(ShtNm).Range(Range("BW2"), Range("BW2").End(xlDown)).Values, "<>0") < 0 Then 'Runtime 438 occurs here.
            Backup.Sheets(ShtNm).Range(Range("BX2"), Range("BX2").End(xlDown)).Copy
            Home.Range("F2").PasteSpecial xlPasteValues
            Backup.Sheets(ShtNm).Range(Range("BY2"), Range("BY2").End(xlDown)).Copy
            Home.Range("G2").PasteSpecial xlPasteValues
        Else
            Backup.Sheets(ShtNm).Range(Range("CA2"), Range("CA2").End(xlDown)).Copy
            Home.Range("F2").PasteSpecial xlPasteValues
            Backup.Sheets(ShtNm).Range(Range("CB2"), Range("CB2").End(xlDown)).Copy
            Home.Range("G2").PasteSpecial xlPasteValues
        End If

    Set PMA = Workbooks.Open(PMAname)
End Sub

同样的438发生在同一点上

.Values
更改为
.Values
会导致需要运行时424对象:

Set TotPrm = Backup.Sheets(ShtNm).Range(Range("BW2"), Range("BW2").End(xlDown)).Value 'This line is the bane of my existence
正在运行此操作的我的数据集是:

BW       BX      BY      BZ       CA      CB
TotPrmA  CurA    RetroA  TotPrmB  CurB    RetroB
$0.00    $0.00   $0.00   $42.55   $42.55  $0.00 
$0.00    $0.00   $0.00   $39.72   $39.72  $0.00 
$0.00    $0.00   $0.00   $39.72   $39.72  $0.00 
$0.00    $0.00   $0.00   $41.14   $41.14  $0.00 
$0.00    $0.00   $0.00   $41.14   $41.14  $0.00 
$0.00    $0.00   $0.00   $41.14   $41.14  $0.00 
$0.00    $0.00   $0.00   $82.28   $82.28  $0.00 
$0.00    $0.00   $0.00   $39.72   $39.72  $0.00 
这是重复的
总保费
当前保费
追溯调整
的数组。从紧跟在我的麻烦魔鬼后面的
If…Else
函数可以看出,它在第一列
Total premium
中查找除零以外的值,并根据结果确定要复制的列。当
TotPrm
声明为
Variant
并定义为
Range.Value
时,它会在同一行生成
运行时错误13:类型不匹配

最后但并非最不重要的一点是,运行时91:

Dim TotPrm As Range
TotPrm = Backup.Sheets(ShtNm).Range(Range("BW2"), Range("BW2").End(xlDown)).Value

我束手无策。任何帮助都将不胜感激

首先,您需要完全限定所有范围引用(请参见下面的点),否则它们可能引用不同的表,这将导致错误。乙二醇

With Backup.Sheets(ShtNm)
  .Range(.Range("N2"), .Range("N2").End(xlDown)).Copy
End With

其次,什么是
属性?在我看来,只要您将
TotPrm
声明为变量,您的最终公式就可以了。

首先,您需要完全限定所有范围参考(请参见下面的点),否则它们可能引用不同的表,这将导致错误。乙二醇

With Backup.Sheets(ShtNm)
  .Range(.Range("N2"), .Range("N2").End(xlDown)).Copy
End With

其次,什么是
属性?在我看来,只要您将
TotPrm
声明为变量,您的最终公式就可以了。

Dim TotPrm as Range
在指定时需要一个
Range
对象,因为它是一个对象,所以必须使用
Set
关键字:

Set TotPrm = <expression that evaluates to an instance of a Range object>
同样,这也会失败,因为您已经将
TotPrem
定义为一个对象(
Range
),但您正试图为其分配一些其他数据类型--
Range.Value
不是
Range
(即使是,您也需要如上所述使用
Set
关键字)--而是字符串、数字等

TotPrm = Backup.Sheets(ShtNm).Range(Range("BW2"), Range("BW2").End(xlDown)).Value`
移除
选择
(或
等)并使用
设置

Set TotPrm = Backup.Sheets(ShtNm).Range(Range("BW2"), Range("BW2").End(xlDown))

Dim TotPrm As Range
在指定时需要一个
Range
对象,因为它是一个对象,所以必须使用
Set
关键字:

Set TotPrm = <expression that evaluates to an instance of a Range object>
同样,这也会失败,因为您已经将
TotPrem
定义为一个对象(
Range
),但您正试图为其分配一些其他数据类型--
Range.Value
不是
Range
(即使是,您也需要如上所述使用
Set
关键字)--而是字符串、数字等

TotPrm = Backup.Sheets(ShtNm).Range(Range("BW2"), Range("BW2").End(xlDown)).Value`
移除
选择
(或
等)并使用
设置

Set TotPrm = Backup.Sheets(ShtNm).Range(Range("BW2"), Range("BW2").End(xlDown))

您的
ShtNm
到底是什么?看起来它应该调用工作表的索引(
即1、2、
),但您正在将值格式化为“MM.YY”,并将其作为工作表索引调用?或者这是实际的工作表名称本身?
设置为TotPrm=Backup.Sheets(ShtNm).Range(Range(“BW2”)、Range(“BW2”).End(xlDown)).Value
这里的问题是
.Value
.Value
不是对象,因此无法使用
Set
关键字进行赋值。如果需要对象,请删除
.Value
。如果需要值,请删除
。Set
。value
不是range对象的属性,它是
。value
TotPrm=Backup.Sheets(ShtNm)。range(range(“BW2”)、range(“BW2”).End(xlDown))。value
失败,因为您已将
TotPrem
定义为对象(
range
)但您正试图为其分配一些其他数据类型(范围.Value
不是范围
(即使是范围,您也需要使用
Set
keyord),而是字符串、数字等)。您似乎不理解VBA?Busse的对象类型和分配语句,sheetname根据生成报告的月份/年份而变化。即报告为2017年7月,wb名称为“07.17原始备份”,具体表格为“07.17”@DavidZemens你说得对,我是一个完全的VBA新手,边学边学。我尝试了多个主题变体-将其指定为具有
范围
的对象。设置
或不具有。。。我试图重新制作我在这里尝试过的所有变体,但就是记不清它们。然而,这在很大程度上代表了所有人。您的
ShtNm
到底是什么?看起来它应该调用工作表的索引(
即1、2、
),但您正在将值格式化为“MM.YY”,并将其作为工作表索引调用?或者这是实际的工作表名称本身?
设置为TotPrm=Backup.Sheets(ShtNm).Range(Range(“BW2”)、Range(“BW2”).End(xlDown)).Value
这里的问题是
.Value
.Value
不是对象,因此无法使用
Set
关键字进行赋值。如果需要对象,请删除
.Value
。如果需要值,请删除
。Set
。value
不是range对象的属性,它是
。value
TotPrm=Backup.Sheets(ShtNm)。range(range(“BW2”)、range(“BW2”).End(xlDown))。value
失败,因为您已将
TotPrem
定义为对象(
range
)但您正试图为其分配一些其他数据类型(
range.Value
不是
range
(即使