我已经调整了一个VB宏来在值之下插入额外的行(参见A列中的“interval”),当出现重复的关联值实例时(参见C列中的“count”) . 更具体地说,当存在大于1的重复计数(0 =无实例,1 =单个实例)且具有特定时间间隔时,我想插入额外的行,以便有空间插入重复的值他们的外表顺序 .
Excel数据的图像before execution,after execution .
下面是我一直在使用的代码,它似乎正在工作 . 但是,每次运行宏时它都会绘制一个错误代码 . 有人可以解释为什么这部分代码会触发错误,以及如何解决它?这是出现的错误代码:"Run-time error code '13' Type: mismatch",并且调试指向这行代码: temp = Range("B" & n)
Sub dupeIntervals()
' insert new rows to match how many utterances are in a particular time interval
Worksheets("Align").Activate
Dim r, count As Range
Dim LastRow As Long
Dim temp As Integer
Set r = Range("A:C")
Set count = Range("B:B")
LastRow = Range("B" & Rows.count).End(xlUp).Row
For n = LastRow To 1 Step -1
temp = Range("B" & n) ' << run-time error 13 / "type mismatch"
If (temp > 1) Then
Rows(n + 1 & ":" & n + temp - 1).Insert Shift:=xlDown
End If
Next n
End Sub
谢谢!
附:这里是关于我如何使用这个宏的轶事解释:我正在将转录访谈中的话语从连续数据(话语开始时的毫秒时间戳)转换为5秒的时间间隔 . 有时,每5秒间隔会有不止一个话语,这需要额外的行来在给定的间隔内插入那些额外的话语 .
1 回答
你的循环包括第1行:
使
To 2 Step -1
跳过 Headers .那说......
您已将
temp
声明为Integer
.这意味着您分配给
temp
的任何内容必须与16位有符号整数值兼容,即-32677和32767之间的任何数值 .某些值将隐式转换为
Integer
. 例如44.634将分配temp
与45 .但有些值不会转换 .
空字符串
""
(或任何非数字字符串)无法转换为Integer
.错误值(例如
#NA
)无法转换为任何内容 .您的代码正在做出假设:
假设
ActiveSheet
是您要使用的工作表 . 它假设n
有一个代表有效工作表行号的值 - 你没有声明n
,所以它可能是Variant/Long
,或Variant/Integer
,所以n
可能没问题(仍然应该声明) .假设范围的值可以强制转换为
Integer
.删除这些假设 .
我建议使用32位整数类型(即
Long
)而不是Integer
.