Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(VBA)破折号(-)的异常处理,需要转到0';s_Vba - Fatal编程技术网

(VBA)破折号(-)的异常处理,需要转到0';s

(VBA)破折号(-)的异常处理,需要转到0';s,vba,Vba,表74中的某些值为破折号(-)。如果值是虚线,则应为0 Sheet8.Range("O12").Value = Sheet74.Range("D3") Sheet8.Range("o13").Value = Sheet74.Range("D4") Sheet8.Range("o17").Value = Sheet74.Range("d5") + Sheet74.Range("d6") + Sheet74.Range("d7") Sheet8.Range("o19"

表74中的某些值为破折号(-)。如果值是虚线,则应为0

    Sheet8.Range("O12").Value = Sheet74.Range("D3")
    Sheet8.Range("o13").Value = Sheet74.Range("D4")
    Sheet8.Range("o17").Value = Sheet74.Range("d5") + Sheet74.Range("d6") + Sheet74.Range("d7")
    Sheet8.Range("o19").Value = Sheet74.Range("d9")
    Sheet8.Range("o20").Value = Sheet74.Range("d10")
我应该编写一个子程序,而不是测试每一行的条件吗?大概是这样的:

sub test(a as long, optional b as long, optional c as long) 
'testing condition here'
'copies values, and 0's if dash is found 
end sub
Function FixDashes(inp As String) As String
    Dim tmp As String
    tmp = Replace(inp, "-", "0")
    Do While InStr(tmp, "0 0") > 0
        tmp = Replace(tmp, "0 0", "0")
    Loop
    FixDashes = tmp
End Function
编辑::

Function fixDash(rng As Range) As Long
If IsNumeric(rng.Value) Then
   fixDash = rng.Value
Else
    fixDash = 0
End Function

还有别的办法吗

您可以使用
Replace()


作为函数,您可以执行以下操作

Function FixDashes(inp As String) As String
     FixDashes = Replace(inp, "-", "0")
End Function
那你就有了

Sheet8.Range("o13").Value = FixDashes(Sheet74.Range("D4"))
Sheet8.Range("o17").Value = FixDashed(Sheet74.Range("d5") + Sheet74.Range("d6") + Sheet74.Range("d7"))
编辑:要回答评论中的附加问题,请通过如下方式将“0”转换为“0”:

sub test(a as long, optional b as long, optional c as long) 
'testing condition here'
'copies values, and 0's if dash is found 
end sub
Function FixDashes(inp As String) As String
    Dim tmp As String
    tmp = Replace(inp, "-", "0")
    Do While InStr(tmp, "0 0") > 0
        tmp = Replace(tmp, "0 0", "0")
    Loop
    FixDashes = tmp
End Function

如果值为-123,则将更改为0123。。。根据数据的混乱程度,可能需要小心处理。@NikT Sheet8.Range(“o17”).Value=Sheet74.Range(“d5”)+Sheet74.Range(“d6”)+Sheet74.Range(“d7”)。当我使用Ryan的替换方法时,该行变为0。是否有另一种解决方案使其为0而不是0?是否要替换每个事件?e、 g.
Replace(Sheet74.Range(“d5”),“-”,“0”)+Replace(Sheet74.Range(“d6”),“-”,“0”)+Replace(Sheet74.Range(“d7”),“-”,“0”)
是的,结果是00@excelmonkey93将每个
Replace
语句转换为如下整数:
CInt(Replace(Sheet74.Range(“d5”),“-”,“0”)+CInt(Replace(Sheet74.Range(“d6”),“-”,“0”)+CInt(替换(活页74.范围(“d7”)、“-”、“0”))
根据数据类型,
+
字符可以连接字符串或添加数字。如果强制数据为整数,则加号会将零添加为1 0。当我使用替换方法时,它显示为0。我希望它对0求和。如何更改它以使其求和?我继续进行到lo的转换ng价值观,谢谢你。