使用VBA键入不匹配错误

时间:2014-10-06 12:29:45

标签: vba excel-vba excel

我有一组数据格式不同,例如B,KB,MB,GB和TB。我编写了代码来删除单位并转换为GB。我的问题是最后一节'b to kb'导致类型不匹配错误。我无法理解为什么我在每次转换时应用了相同的代码?提前谢谢。

这是我的代码:

Sub RemoveUnits()
Dim r As Range
Dim x As Long
For Each r In ActiveSheet.UsedRange
w = r.Value

'GB
     If InStr(w, "gb") > 0 Then
        r = Left$(r, Len(r) - 2)
        Debug.Print (r.Value)
    'No conversion required
'TB
    ElseIf InStr(w, "tb") > 0 Then
        r = Left$(r, Len(r) - 2)
        r = r * 1024
        Debug.Print (r.Value)
   'Convert tb to gb
'MB
    ElseIf InStr(w, "mb") > 0 Then
      r = Left$(r, Len(r) - 2)
      r = (1 / 1024) * r
      Debug.Print (r.Value)
'Convert mb to gb
 'KB
    ElseIf InStr(w, "kb") > 0 Then
      r = Left$(r, Len(r) - 2)
      r = (1 / 1048576) * r
      Debug.Print (r.Value)
'B to KB
    ElseIf InStr(w, "b") > 0 Then
      r = Left$(r, Len(r) - 1)
      r = (1 / 1024) * r
      debung.Print (r.Value)




    End If
Next r
End Sub

2 个答案:

答案 0 :(得分:0)

我看到两个可能的问题。

  1. 您已将r设置为范围。
  2. 您正在尝试将数值乘以字符串值。将字符串转换为数字值,然后执行必要的操作。
  3. 例如

    r = Left$(r, Len(r) - 2)
    r = r * 1024
    

    试试这个

    r = Val(Trim(r)) * 1024
    

    同样将r = (1 / 1024) * r更改为r = (1 / 1024) * Val(Trim(r)),依此类推......

    注意:我假设r将数值存储为字符串。

答案 1 :(得分:0)

原因:请尝试使用常用Debug.Print代替上一个debung.Print中的深奥ElseIf。通常代码突出显示是一个好朋友。此外,补充的讽刺意味着,帮助您调试的代码首先会导致异常。 : - )

建议: Left$期望String作为第一个参数,同时传递Excel.Range个对象。有时候不行......

尝试(并为所有代码修复此问题):

Sub RemoveUnits()
        '... Local declarations'
        Dim w  As String

        For Each r In ActiveSheet.UsedRange
                Let w = CStr(r.Value)

                ' ... The other cases'

                ElseIf InStr(w, "b") > 0 Then
                        Let w = Left$(w, Len(w) - 1)
                        Let r.Value = (1 / 1024) * CDbl(w)
                        Debug.Print r.Value
                End If
        Next r
End Sub

建议部分类似于Siddharth Rout的答案,区别在于它用于计算String变量作为中间值,而不是Range变量。