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
(即使