我有一组数据格式不同,例如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
答案 0 :(得分:0)
我看到两个可能的问题。
r
设置为范围。例如
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
变量。