每个范围的类型不匹配

Type-Mismatch on For Each Range

我在尝试复制一系列单元格时遇到类型不匹配的问题。此宏需要打开 2 个不同的工作簿,然后继续复制一组预定义的单元格,因此 WorkBook(Filename1) D19 中的空单元格成为 WorkBook(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

问题来了,调试突出显示第三行(添加了.address

    Set Rng = Range("D19,D20,I19,I20,C30,C32,C35,C36,D40,D41,D42,D43,D44,D45")
    For Each ArCell In Rng.Cells
    Workbooks(FileName1).Sheets(1).Range(ArCell.**address**) = Workbooks(FileName2).Sheets(1).Range(ArCell.**address**)
    Next ArCell

Application.ScreenUpdating = True
End Sub

已编辑:@PaichengWu 我采纳了你的建议,它解决了类型不匹配的问题,但订阅超出范围仍然存在。我以前使用过这种 Range = Range 定义,我记得它绕过了对 "activate" 的需要,所以为什么它在这种情况下不起作用

即使在操作前尝试 "Workbooks(FileName1).Activate" 之类的东西,调试仍然指出 "Out of range"。先生,如果我这么笨,这是我一生中第二次从事 vba...

尝试在下面重写

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)

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

范围的默认 属性 是 属性。因此,如果你写 工作簿(FileName1).Sheets(1).Range(arCell) = 1 您正在将值 1 分配给定义的范围。为了不混淆自己写 Workbooks(FileName1).Sheets(1).Range(arCell).Value = 1

当然,Workbooks(FileName1).Sheets(1).Range(arCell) 没有任何意义,因为 arCell 是一个范围,其确切位置(工作簿和工作表)已经定义。因此,您的整条长线会减少到 arCell.Value = 1。与要分配的值相同,只是我的减少会减少到您没有想到的 arCell.Value = arCell.Value 。您可能想玩 arCell.Address 但 A​​ddress 不是默认的 属性,Value 是。所以,写你的意思,写你的意思。