lileixin888 2023-05-31 21:29 采纳率: 0%
浏览 29
已结题

Excel vba程序报错

为什么同样的代码,把1那部分括号里的复制到2括号里就能运行,现在这样就不能运行,报错呢?格式也对,也没有符号错误啊,汉字也不生僻啊

img

img

img


源代码如下:

Sub CountKeywords()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim cell As Range
    Dim countDict1 As Object
    Dim countDict2 As Object
    Dim countDict3 As Object
    Dim countDict4 As Object
    Dim countDict5 As Object
    Dim countDict6 As Object
    Dim countDict7 As Object
    
    Dim keyword As Variant
    Dim result1 As String
    Dim result2 As String
    Dim result3 As String
    Dim result4 As String
    Dim result5 As String
    Dim result6 As String
    Dim result7 As String

    Set ws = ThisWorkbook.Worksheets("Sheet1") ' 替换为您的工作表名称
    lastRow = ws.Cells(ws.Rows.count, "A").End(xlUp).Row
    
    Set countDict1 = CreateObject("Scripting.Dictionary")
    Set countDict2 = CreateObject("Scripting.Dictionary")
    Set countDict3 = CreateObject("Scripting.Dictionary")
    Set countDict4 = CreateObject("Scripting.Dictionary")
    Set countDict5 = CreateObject("Scripting.Dictionary")
    Set countDict6 = CreateObject("Scripting.Dictionary")
    Set countDict7 = CreateObject("Scripting.Dictionary")
    
    ' 遍历A列单元格
    For Each cell In ws.Range("A1:A" & lastRow)
        If cell.value <> "" Then
            ' 检查单元格内容是否匹配关键词
            For Each keyword In Array("列缺", "偏历", "丰隆", "公孙", "通里", "支正", "飞扬", "大钟", "内关", "外关", "光明", "蠡沟", "鸩尾", "长强")
                If InStr(1, cell.value, keyword) > 0 Then
                    ' 更新关键词频次计数
                    If countDict1.Exists(keyword) Then                                '络穴
                        countDict1(keyword) = countDict1(keyword) + 1
                    Else
                        countDict1(keyword) = 1
                    End If
                End If
            Next keyword
            
            For Each keyword In Array("太渊", "合谷", "冲阳", "太白", "神门", "腕骨", "京骨", "太溪", "大陵", "阳池", "丘墟", "太冲")
                If InStr(1, cell.value, keyword) > 0 Then
                    If countDict2.Exists(keyword) Then                                '原穴
                        countDict2(keyword) = countDict2(keyword) + 1
                    Else
                        countDict2(keyword) = 1
                    End If
                End If
            Next keyword
            
            For Each keyword In Array("上巨虚", "足三里", "下巨虚", "委中", "委阳", "阳陵泉")
                If InStr(1, cell.value, keyword) > 0 Then
                    If countDict3.Exists(keyword) Then                                '下合穴
                        countDict3(keyword) = countDict3(keyword) + 1
                    Else
                        countDict3(keyword) = 1
                    End If
                End If
            Next keyword
            
            For Each keyword In Array("公孙", "内关", "足临泣", "外关", "后溪", "申脉", "列缺", "照海")
                If InStr(1, cell.value, keyword) > 0 Then
                    If countDict4.Exists(keyword) Then                                '八脉交会穴
                        countDict4(keyword) = countDict4(keyword) + 1
                    Else
                        countDict4(keyword) = 1
                    End If
                End If
            Next keyword
            
            For Each keyword In Array("中脘", "章门", "阳陵泉", "悬钟", "大杼", "膻中", "膈俞", "太渊")
                If InStr(1, cell.value, keyword) > 0 Then
                    If countDict5.Exists(keyword) Then                                '八会穴
                        countDict5(keyword) = countDict5(keyword) + 1
                    Else
                        countDict5(keyword) = 1
                    End If
                End If
            Next keyword
            
            For Each keyword In Array("中府", "天枢", "中脘", "章门", "巨阙", "关元", "中极", "京门", "膻中", "石门", "日月", "期门")
                If InStr(1, cell.value, keyword) > 0 Then
                    If countDict6.Exists(keyword) Then                               '募穴
                        countDict6(keyword) = countDict6(keyword) + 1
                    Else
                        countDict6(keyword) = 1
                    End If
                End If
            Next keyword
            
            For Each keyword In Array("孔最", "温溜", "梁丘", "地机", "阴郄", "养老", "金门", "水泉", "郄门", "会宗", "外丘", "中都", "阳交", "筑宾", "跗阳", "交信")
                If InStr(1, cell.value, keyword) > 0 Then                       
                    If countDict7.Exists(keyword) Then
                        countDict7(keyword) = countDict7(keyword) + 1
                    Else
                        countDict7(keyword) = 1
                    End If
                End If
            Next keyword
            
            
        End If
    Next cell
    
    ' 生成结果字符串
    For Each keyword In countDict1.keys
        result1 = result1 & keyword & " (" & countDict1(keyword) & "), "
    Next keyword
    result1 = Left(result1, Len(result1) - 2) ' 移除最后的逗号和空格
    
    For Each keyword In countDict2.keys
        result2 = result2 & keyword & " (" & countDict2(keyword) & "), "
    Next keyword
    result2 = Left(result2, Len(result2) - 2) ' 移除最后的逗号和空格
    
    For Each keyword In countDict3.keys
        result3 = result3 & keyword & " (" & countDict3(keyword) & "), "
    Next keyword
    result3 = Left(result3, Len(result3) - 2) ' 移除最后的逗号和空格
    
     For Each keyword In countDict4.keys
        result4 = result4 & keyword & " (" & countDict4(keyword) & "), "
    Next keyword
    result4 = Left(result4, Len(result4) - 2) ' 移除最后的逗号和空格
    
    For Each keyword In countDict5.keys
        result5 = result5 & keyword & " (" & countDict5(keyword) & "), "
    Next keyword
    result5 = Left(result5, Len(result5) - 2) ' 移除最后的逗号和空格
    
    For Each keyword In countDict6.keys
        result6 = result6 & keyword & " (" & countDict6(keyword) & "), "
    Next keyword
    result6 = Left(result6, Len(result6) - 2) ' 移除最后的逗号和空格
    
    For Each keyword In countDict7.keys
        result7 = result7 & keyword & " (" & countDict7(keyword) & "), "
    Next keyword
    result7 = Left(result7, Len(result7) - 2) ' 移除最后的逗号和空格
    
    
    
    ' 将结果输入到E1、E2、E3单元格
    ws.Range("E1").value = result1
    ws.Range("E2").value = result2
    ws.Range("E3").value = result3
    ws.Range("E4").value = result4
    ws.Range("E5").value = result5
    ws.Range("E6").value = result6
    ws.Range("E7").value = result7

End Sub




  • 写回答

3条回答 默认 最新

  • Jackyin0720 2023-05-31 22:03
    关注
    【Excel vba程序报错:运行时错误5:无效的过程调用或参数】
    这个错误通常是因为VBA代码中调用了无效的子程序或函数导致的。以下是可能导致此错误的常见原因:
    
    1.调用了不存在或未声明的子程序或函数。【检查下调用的子程序或函数存在且正确声明】
    2.传递了错误的参数数量或类型。【检查下传递的参数数量和类型正确】
    3.引用了无效的变量或对象。【检查下引用的变量或对象有效】
    4.调用了违反访问权限的子程序或函数。【检查调用的子程序或函数有没有违反访问权限】
    建议在代码中添加调试信息,以获得更多报错信息。
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月2日
  • 修改了问题 6月1日
  • 赞助了问题酬金15元 5月31日
  • 修改了问题 5月31日
  • 展开全部

悬赏问题

  • ¥15 想问一下STM32创建工程模板时遇到得问题
  • ¥15 Fiddler抓包443
  • ¥20 Qt Quick Android 项目报错及显示问题
  • ¥15 而且都没有 OpenCVConfig.cmake文件我是不是需要安装opencv,如何解决?
  • ¥15 oracleBIEE analytics
  • ¥15 H.264选择性加密例程
  • ¥50 windows的SFTP服务器如何能批量同步用户信息?
  • ¥15 centos7.9升级python3.0的问题
  • ¥15 安装CentOS6时卡住
  • ¥20 c语言写的8051单片机存储器mt29的模块程序