JoPaJopa_ 2022-06-15 03:37 采纳率: 50%
浏览 48
已结题

Excel VBA if statement运行后不产出结果也不报错

Excel VBA if statement 相关问题
超级感谢回答!无比感激!

问题遇到的现象和发生背景

问题:if statement 运行后不产出结果

背景:
input是一整串字符串,类似于T02CG338 或者 8502SEH778。首先根据开头分成两类:T开头的和数字开头的。然后取对应字符串中的第四位(T开头)或者第六位(85开头),使用function对应出信息,放入output列。

问题相关代码,请勿粘贴截图
Function ns(x)
    If x = "A" Then
        ns = "Size 00"
    ElseIf x = "B" Then
        ns = "Size 0"
    ElseIf x = "C" Then
        ns = "Size 1"
    ElseIf x = "D" Then
        ns = "Size 2"
    ElseIf x = "E" Then
        ns = "Size 3"
    ElseIf x = "F" Then
        ns = "Size 4"
    ElseIf x = "G" Then
        ns = "Size 5"
    ElseIf x = "H" Then
        ns = "Size 6"
    ElseIf x = "J" Then
        ns = "Size 7"
    End If
End Function

Sub nemasize()
Dim i, findc, outputc
For i = 6 To Range("a1048576").End(xlUp).Row
'findc is the catalog_number column
Set findc = Range("H" & i)
'outputc is where the output should goto
Set outputc = Range("P" & i)
'如果开头是T,那么截取字符串第四位的字母
If InStrRev(findc, "T", 2) <> 0 Then
y = Mid(findc, 4, 1)
'根据字母对应的Size信息放入第P列
outputc = ns(y)
'如果开头是8502或者8702,截取第六位的字母
ElseIf Left(findc, 4) = "8502" Or "8702" Then
y = Mid(findc, 6, 1)
outputc = ns(y)
End If
Next
End Sub

运行结果及报错内容

结果:没有报错,但是运行后应该有内容的列是空的。

非常感谢您的回答啦!

  • 写回答

2条回答 默认 最新

  • Petrarch 2022-06-15 08:51
    关注
    1. Function ns(x) 少了 as String 这个有返回值,需要在后面加上as String
    2. For i = 6 To Range("a1048576").End(xlUp).Row不对,导致循环没有执行,我建议改成一个小一点的数字
    3. 两处outputc = ns(y)貌似有问题。改为Range("P" & i) = ns(y) 这里我不太确定
      在本人电脑上成功运行了。
    Function ns(x) As String
        If x = "A" Then
            ns = "Size 00"
        ElseIf x = "B" Then
            ns = "Size 0"
        ElseIf x = "C" Then
            ns = "Size 1"
        ElseIf x = "D" Then
            ns = "Size 2"
        ElseIf x = "E" Then
            ns = "Size 3"
        ElseIf x = "F" Then
            ns = "Size 4"
        ElseIf x = "G" Then
            ns = "Size 5"
        ElseIf x = "H" Then
            ns = "Size 6"
        ElseIf x = "J" Then
            ns = "Size 7"
        End If
    End Function
    
    Sub nemasize()
    Dim i, findc, outputc
    'For i = 6 To Range("A1048576").End(xlUp).Row
    For i = 6 To 1048576
        'findc is the catalog_number column
        Set findc = Range("H" & i)
        'outputc is where the output should goto
        'Set outputc = Range("P" & i)
        '如果开头是T,那么截取字符串第四位的字母
        If InStrRev(findc, "T", 2) <> 0 Then
            y = Mid(findc, 4, 1)
            '根据字母对应的Size信息放入第P列
            Range("P" & i).Value = ns(y)
            '如果开头是8502或者8702,截取第六位的字母
        ElseIf Left(findc, 4) = "8502" Or "8702" Then
            y = Mid(findc, 6, 1)
            Range("P" & i).Value = ns(y)
        End If
      
    Next
    End Sub
    
    ```c#
    
    
    

    ```

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月23日
  • 已采纳回答 6月15日
  • 创建了问题 6月15日

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题