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

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日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀