excel - VBA 中变量动态范围的“运行时错误 13”。数据类型不匹配

标签 excel vba runtime-error

我收到一条“运行时错误 13”,该行应该从打开的工作簿中的工作表中选择动态范围。我在程序中注释了该行。

通过研究,我发现 13 错误是由数据不匹配引起的,所以我尝试将“v1,v2,v3 ...”变量更改为整数(它们Dim As Long).这没有效果。

我为每个单元格和范围指定了一个工作簿和工作表,因为我之前收到了“1004 错误”,另一个线程的答案是限定 ranges()单元格().

是什么导致了这个错误?工作簿和工作表数据类型是否存在问题?任何帮助表示赞赏。谢谢!

Sub FillPartNumRev()
Dim ws As Worksheet, wb As Workbook
Dim v1 As Range, v2 As Range, v3 As Range
Dim r1 As Long, r2 As Long, r3 As Long, r4 As Long, r5 As Long
Dim c1 As Long, c2 As Long, c3 As Long, c4 As Long, c5 As Long
For x = 1 To 5000

Set wb = Workbooks.Open(Filename:="IPIC_DATA.xlsx")

r1 = 7: c1 = 0
r2 = 7: c2 = 1
r3 = 7: c3 = 2
r4 = 7: c4 = 0
r5 = 7: c5 = 1


Set v1 = wb.Worksheets("Sheet1").Range(wb.Worksheets("Sheet1").Cells(r1, c1), wb.Worksheets("Sheet1").Cells(r2, c2))
'run-time error 13
Set v2 = wb.Worksheets("Sheet1").Range(wb.Worksheets("Sheet1").Cells(r3, c3))
Set v3 = wb.Worksheets("Sheet1").Range(wb.Worksheets("Sheet1").Cells(r1, c1))
Set v4 = wb.Worksheets("Sheet1").Range(wb.Worksheets("Sheet1").Cells(r4, c4), wb.Worksheets("Sheet1").Cells(r5, c5))

    If v4 <> "" & v2 = "" Then
        v1.Copy v4

    ElseIf v4 = "" Then
        r1 = r1 + 7
        r2 = r2 + 7

    End If

r4 = r4 + 1
c4 = c4 + 1
r5 = r5 + 1
c5 = c5 + 1
r3 = r3 + 1
c3 = c3 + 1


Next x


End Sub

最佳答案

感谢 @Jeeped 解决了这个问题 - 然而,在 VBA 中使用 Excel 单元格时,类型不匹配错误非常常见。此答案解决了更常见的原因,您现在工作的代码仍然无法幸免


类型不匹配错误通常是在将单元格的值分配给某些类型变量时遇到的错误,无论是 StringDouble >、Date 或其他任何内容 - 像这样:

Dim v As String
v = sheet.Range("A1").Value

当单元格的值涉及表达式时,也可能会发生这种情况,如下所示:

If sheet.Range("A1").Value <> "" Then

这是为什么?

如果单元格为空,或者实际上包含可用值,则没有问题。但是,如果单元格包含 Error 值,例如 #N/A#VALUE! 或任何其他单元格错误,则上述内容正如您遇到的那样,代码会抛出运行时错误 13。

单元格的值是一个VariantVariant 可以包含任何内容,包括 StringObject 引用或 Error 值。如果您将单元格值读入某个 String 变量,或者如果您正在将它与一些字符串文字进行比较。

但是变体/错误不能隐式(或显式)转换为任何内容。

所以这个故事的主旨是,您永远不能假设单元格的 Variant 子类型将会是什么,也不能将该子类型强制转换为特定的数据类型。

为了避免在处理单元格时出现类型不匹配错误,您需要将单元格值读入Variant:

Dim v As Variant
v = sheet.Range("A1").Value

然后使用 IsError 函数确定您是否正在查看Variant/Error:

If Not IsError(v) Then
    'v is safe to convert to whatever you need it to be
Else
    'cell contains an error value
End If

关于excel - VBA 中变量动态范围的“运行时错误 13”。数据类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51289947/

相关文章:

html - 使用 XLSX Angular 导出到 excel 时如何保持文本格式(无格式)

vba - 根据范围有条件地更改 Excel VBA 条形图中各个条形的颜色

c++ - 将旧 cstring 的标记连接到新的 c 字符串

excel - 如何迭代两列的范围并在每一步选择一行中的两列?

excel - 删除VBA中除一列之外的所有数据

excel - 从不同的工作表中获取列数据并将其作为MainSheet中的行数据

c - 遇到段错误错误

c - OpenCV 2.1 : Runtime error

excel - 我可以将查询表(和连接吗?)复制到其他工作簿吗?

excel - 将 Unix 纪元时间中的整列转换为 Excel 日期 (YYYY-MM-DD) 形式 VBA