Excel 每个范围上的类型不匹配

Excel 每个范围上的类型不匹配,excel,vba,foreach,type-mismatch,outofrangeexception,Excel,Vba,Foreach,Type Mismatch,Outofrangeexception,我在尝试复制一系列单元格时遇到类型不匹配。此宏需要打开两个不同的工作簿,然后继续复制预定义的单元格集,这样工作簿(Filename1)D19中的空单元格将成为工作簿(Filename2)中已填充的D19单元格的值。 这是我正在处理的完整代码: Sub OpenWorkbooks() Application.ScreenUpdating = False Dim fd As FileDialog Dim FileName1, FileName2 As String Dim Rng, ArCell

我在尝试复制一系列单元格时遇到类型不匹配。此宏需要打开两个不同的工作簿,然后继续复制预定义的单元格集,这样工作簿(Filename1)D19中的空单元格将成为工作簿(Filename2)中已填充的D19单元格的值。 这是我正在处理的完整代码:

Sub OpenWorkbooks()
Application.ScreenUpdating = False

Dim fd As FileDialog
Dim FileName1, FileName2 As String
Dim Rng, ArCell As Range

Set fd = Application.FileDialog(msoFileDialogOpen)
Dim FileChosen As Integer

FileChosen = fd.Show
fd.InitialFileName = "C:\"
fd.InitialView = msoFileDialogViewList
fd.AllowMultiSelect = True

fd.Filters.Clear
fd.Filters.Add "Excel1", "*.xlsx"
fd.Filters.Add "Excel2", "*.xlsm"

fd.FilterIndex = 1
fd.ButtonName = "Select &2Files .xlsm/.xlsx"

If FileChosen <> -1 Then
Else

FileName1 = fd.SelectedItems(1)
Workbooks.Open (FileName1)
FileName2 = fd.SelectedItems(2)
Workbooks.Open (FileName2)

End If
编辑:@PaichengWu我接受了你的建议,它解决了类型不匹配的问题,但是订阅超出范围仍然存在。我以前使用过这种范围=范围定义,我记得它绕过了“激活”的需要,所以在这种情况下为什么不起作用

即使在操作之前尝试“工作簿(FileName1).Activate”之类的东西,调试仍然会指出“超出范围”。Sr如果我这么笨,这是我有生以来第二次使用vba…

试着重写下面的内容

Workbooks(FileName1).Sheets(1).Range(ArCell) = Workbooks(FileName2).Sheets(1).Range(ArCell)
作为


Dim Rng、ArCell As Range将Rng标注为变量(语法未定义),且仅ArCell As Range。尝试将变暗Rng作为范围,将ArCell作为范围

范围的默认属性是“值”属性。因此,如果你写 工作簿(文件名1).工作表(1).范围(arCell)=1 将值1指定给定义的范围。为避免混淆,请编写工作簿(FileName1).Sheets(1).Range(arCell).Value=1


当然,工作簿(FileName1).Sheets(1).Range(arCell)毫无意义,因为arCell是一个精确位置(工作簿和工作表)已经定义的范围。因此,您的整个长线烧成arCell。Value=1。对于要分配的值相同,只是我的减少值会消耗为arCell.value=arCell.value,而您并没有考虑到这一点。您可能希望使用arCell.Address,但Address不是默认属性,值为。所以,写下你的意思,写下你的意思。

Dim Rng,ArCell As Range维度Rng As Variant(语法未定义),仅ArCell As Range。尝试Dim Rng作为Range,ArCell作为Range谢谢!这当然有点不匹配,但现在我得到了一个“超出范围的订阅”,我知道我不需要选择打开的工作簿来处理它,可能是我需要声明全局变量吗?或者是因为我正在打开的特定文件给了我“此工作簿包含指向外部源的链接,是否要更新?”的问题,
订阅超出了范围
发生在哪里<代码>订阅超出范围通常发生在您引用不存在的工作簿、工作表或范围时。例如,您的
工作表(1)
是一个图表工作表,它
工作表(1)。范围(xxxx)
不存在,可能会返回错误。我建议您修改
工作表(1)
中的
工作表(1)
。我刚刚添加了“MsgBox fd.SelectedItems(1)”(从那时起,我们就有FileName1=fd.SelectedItems(1))来检查整个文件夹路径(C:etc),而不仅仅是.xlsx,所以每次我都这样做:工作簿(FileName1).工作表(1).范围(ArCell.Address)它实际上只是胡言乱语,难怪宏不能与工作簿交互!我想在打开每个工作簿后,我必须使用“设置此工作簿”或“活动工作簿”来解决某个变量?如果我的答案解决了您的问题,请给我一个
检查
。您说已经定义了包括WS和WB在内的arCell确切位置,但我在代码中预先指定了这种情况是什么时候?提前thx,此处:设置Rng=范围(“D19、D20、I19、I20、C30、C32、C35、C36、D40、D41、D42、D43、D44、D45”)。未指定工作表或工作簿。因此范围在ActiveSheet中。这当然解释了很多,我想我只是定义了一个未指定地址的伪数组;因此,如果FileName2是最后一个打开的,我想我是在那里定义它们的。另外,我不太明白“dimensions Rng as a Variant”是什么意思。Dim语句将“dimensions”指定给变量。变量是“标注尺寸的”。(很抱歉,英语也不是我的母语,但有时我会忘记并发明一些东西。)当你标注变量时,你会给它指定一个数据类型,比如Dim MyVar作为字符串。如果从Dim语句中省略数据类型,则变量将标注为变量。
Workbooks(FileName1).Sheets(1).Range(ArCell) = Workbooks(FileName2).Sheets(1).Range(ArCell)
Workbooks(FileName1).Sheets(1).Range(ArCell.address) = Workbooks(FileName2).Sheets(1).Range(ArCell.address)