VBA错误:隐藏模块中的编译错误

如何解决VBA错误:隐藏模块中的编译错误

我有一个Excel文件,旨在简化工作场所(与客户)的流程

宏中的一个是在两个不同的选项卡之间匹配数据,执行一些计算,并在发现错误的粉色单元格中突出显示,以向最终用户突出显示该错误。大部分操作都是在数组内完成的,以提高速度(可能会存储大量数据)

此宏以及该工作簿上的所有其他宏在我的PC和我的PC上都运行良好。

但是,在将此文件发送给我们的某些客户后,他们报告说在运行我上面提到的宏时遇到了问题。他们分享了以下消息(下面的链接):

'隐藏模块中的编译错误:............. 当代码与此应用程序的版本,平台或体系结构不兼容时,通常会发生此错误。

我已经读到这可能与32位和64位版本的Windows有关,并且可能需要更改代码以解决此问题。但是,我没有使用任何调用API的声明语句,也没有使用任何引用指针或处理程序的Long变量-所以我有点困惑可能导致此问题的原因。

请有人帮我弄清楚代码对我来说还行的时候,是什么原因导致其他PC上出现此错误消息?


Sub RefreshData()


    
    'Set Variables
    
    Dim fd As Worksheet
    Dim ld As Worksheet
    Dim OrN As Worksheet
    Dim RF As Worksheet
    
    Set fd = ThisWorkbook.Sheets("Feeder Data")
    Set ld = ThisWorkbook.Sheets("Live Data")
    Set OrN = ThisWorkbook.Sheets("Order Numbers")
    Set RF = ThisWorkbook.Sheets("reference")
    
    Dim PeriodReturnRange As Range
    Dim YearReturnRange As Range
    Dim DateLookUpRange As Range
    
    Set PeriodReturnRange = RF.Range("K3:K200")
    Set YearReturnRange = RF.Range("I3:I200")
    Set DateLookUpRange = RF.Range("J3:J200")
    
    Dim fdArray() As String
    Dim ldArray() As String
    Dim OrNArray() As String
    Dim ldArray2() As String
    
      '' 1) Set the size of the Feeder Data Array
    On Error GoTo ErrorMsgfd
    ReDim Preserve fdArray(6 To fd.Range("C" & Rows.Count).End(xlUp).Row,3 To 14)
    On Error GoTo 0
    
    '' 2) Set size of Live Data Array
    On Error GoTo ErrorMsgld
    ReDim Preserve ldArray(10 To ld.Range("B" & Rows.Count).End(xlUp).Row,2 To 28)
    On Error GoTo 0
    
    '' 3) Set Size of Order Number Array
    On Error GoTo ErrorMsgOrN
    ReDim Preserve OrNArray(8 To OrN.Range("J" & Rows.Count).End(xlUp).Row,8 To 10)
    On Error GoTo 0
    
    
    ''4) Set size of second Order Number to get info needed for saving calculation
    On Error GoTo ErrorMsgld
    ReDim Preserve ldArray2(10 To ld.Range("B" & Rows.Count).End(xlUp).Row,14 To 22)
    On Error GoTo 0
    
    On Error GoTo PasswordErrorMsg
    ld.Unprotect "password1234"
    fd.Unprotect "password1234"
    On Error GoTo 0
    
         With Application
                    .ScreenUpdating = False
                    .EnableEvents = False
                    .Calculation = xlCalculationManual
        End With
        
    On Error Resume Next
    ld.ShowAllData
    fd.ShowAllData
    On Error GoTo 0


    ''''Perform Worksheet Clearing and copy formatting down to row 5500
    
       With ld
            .Range("E4").Copy
            .Range("B10:B5500").PasteSpecial xlPasteFormats
            .Range("G10:G5500").PasteSpecial xlPasteFormats
            .Range("J10:J5500").PasteSpecial xlPasteFormats
            .Range("O10:P5500").PasteSpecial xlPasteFormats
            .Range("S10:S5500").PasteSpecial xlPasteFormats
            .Range("Z10:Z5500").PasteSpecial xlPasteFormats
            .Range("AA10:AA5500").PasteSpecial xlPasteFormats
            
            .Range("F4").Copy
            .Range("C10:F5500").PasteSpecial xlPasteFormats
            .Range("I10:I5500").PasteSpecial xlPasteFormats
            .Range("K10:N5500").PasteSpecial xlPasteFormats
            .Range("Q10:R5500").PasteSpecial xlPasteFormats
            .Range("T10:V5500").PasteSpecial xlPasteFormats
            .Range("AA10:AB5500").PasteSpecial xlPasteFormats
            
            .Range("G4").Copy
            .Range("H10:H5500").PasteSpecial xlPasteFormats
            .Range("W10:Y5500").PasteSpecial xlPasteFormats
            
            .Range("C10:F5500").ClearContents
            .Range("I10:I5500").ClearContents
            .Range("K10:N5500").ClearContents
            .Range("Q10:R5500").ClearContents
            .Range("T10:V5500").ClearContents
            .Range("AA10:AB5500").ClearContents
        End With

    
    
    
    '''''''Populate Arrays
    
    ''4) Populate Feeder Data Array with the data
    
    For A = 6 To fd.Range("C" & Rows.Count).End(xlUp).Row
        For B = 3 To 14
            fdArray(A,B) = Trim(fd.Cells(A,B))
        Next B
    Next A
    
    ''5) Populate Live Data Array
    
    For A = 10 To ld.Range("B" & Rows.Count).End(xlUp).Row
        For B = 2 To 28
            ldArray(A,B) = Trim(ld.Cells(A,B))
        Next B
    Next A
    
    '' 6) Populate Order Number Array
    
    For A = 8 To OrN.Range("J" & Rows.Count).End(xlUp).Row
        For B = 8 To 10
        OrNArray(A,B) = Trim(OrN.Cells(A,B))
        Next B
    Next A
    

    
    
    ''''''''' Match the values between Live Data and Feeder Data arrays (still not transferring back to worksheet)
    
    Dim LookUp1 As String
    Dim LookUp2 As String
    Dim LookUp3 As String
    
    For A = 10 To UBound(ldArray)
    
        LookUp1 = ldArray(A,2)
        LookUp2 = ldArray(A,7)
        
        
             On Error Resume Next
                ldArray(A,11) = Application.WorksheetFunction.Lookup(CLng(CDate(ld.Range("J" & A).Value)),DateLookUpRange,PeriodReturnRange)
                ldArray(A,22) = Application.WorksheetFunction.Lookup(CLng(CDate(ld.Range("J" & A).Value)),YearReturnRange)
                On Error GoTo 0
                
    
            For B = 6 To UBound(fdArray)
        
        
                If fdArray(B,3) = LookUp1 And fdArray(B,9) = LookUp2 Then
                
                On Error Resume Next
                ''Calculation 1
                    If fd.Range("H" & B).Value = "ABC" Then
                    ldArray(A,28) = fd.Range("N" & B).Value * (ld.Range("Z" & A).Value / 1000)
                    Else
                    ldArray(A,28) = fd.Range("N" & B).Value * (ld.Range("Z" & A).Value / 100)
                End If
               
            
                ''Calculation 2
                ldArray(A,17) = fd.Range("K" & B).Value - (ld.Range("O" & A).Value * fd.Range("L" & B).Value) - (ld.Range("P" & A).Value * fd.Range("M" & B).Value)
                ''Calculation 3
                ldArray(A,18) = (ld.Range("O" & A).Value * fd.Range("L" & B).Value) + (ld.Range("P" & A).Value * fd.Range("M" & B).Value)
                On Error GoTo 0
                
                ''''''''Lookup results
                
                'Result 1
                ldArray(A,3) = fdArray(B,4)
                'Result 2
                ldArray(A,4) = fdArray(B,5)
                'Result 3
                ldArray(A,5) = fdArray(B,6)
                'Result 4
                ldArray(A,6) = fdArray(B,7)
                'Result 5
                ldArray(A,9) = fdArray(B,8)
                'Result 6
                ldArray(A,13) = fdArray(B,10)
                'Result 7
                ldArray(A,14) = fdArray(B,11)
                'Result 8
                ldArray(A,20) = fdArray(B,12)
                'Result 9
                ldArray(A,21) = fdArray(B,13)
                'Result 10
                ldArray(A,27) = fdArray(B,14)
                
                Exit For
                End If
               
            Next B
            
            ''Check for blanks,highlight that there has been an error if found
            If ldArray(A,4) = "" Or ldArray(A,5) = "" Then
                ld.Range("B" & A).Interior.Color = RGB(253,211,211)
                ld.Range("G" & A).Interior.Color = RGB(253,211)
            End If
            
          ''Check for blanks,11) = "" Or ldArray(A,22) = "" Then
                ld.Range("J" & A).Interior.Color = RGB(253,211)
            End If
        
        
    Next A
    
    
    ''''Run a second loop between live data and order numbers,to match relevant order numbers
    
    For A = 10 To UBound(ldArray)
    
        LookUp1 = ldArray(A,7)
        LookUp2 = ldArray(A,5)
    
                    
        For C = 8 To UBound(OrNArray)
        
                ''check if a particular special value was found and return matched result to array if it was,and ignore second lookup value
            
                If LookUp1 = "xxx" And OrNArray(C,9) = "xxx" Then
                            ldArray(A,12) = OrNArray(C,10)
                            
                ''IF special value not found,test against both lookup values''
                        
                Else
                        
                        If OrNArray(C,9) = LookUp1 And OrNArray(C,8) = LookUp2 Then
                                ldArray(A,10)
                
                                Exit For
                        End If
                End If
        
        Next C
        
        
            If ldArray(A,12) = "" Then
                ld.Range("L" & A).Interior.Color = RGB(253,211)
            End If
    
    Next A
    
    

    ''7) Transfer the matched arrays to the Worksheet
    
    ld.Range("B10",ActiveCell.Offset(UBound(ldArray,1) - 10,UBound(ldArray,2) - 23)).Value = ldArray
    
      
      ''''''''''Load second live data Array containing only relevant columns'''''''
    
    For A = 10 To ld.Range("B" & Rows.Count).End(xlUp).Row
        For B = 14 To 22
            ldArray2(A,B) = ld.Cells(A,B)
        Next B
    Next A
    
    
    
    
    ''''''''''''Loop to check if a special condition has been met and color if needed'''''''''''''''''''''''''''''

    For A = 10 To UBound(ldArray2)

       With ld.Rows(A)
                  
            If ldArray2(A,19) = "" And ldArray2(A,14) = ldArray2(A,17) And _
              Application.CountIfs(ld.Range("D10:D" & A),.Columns("D").Value,ld.Range("V10:V" & A),.Columns("V").Value,ld.Range("K10:K" & A),.Columns("K").Value) > 1 Then
                  
               .Columns("S").Interior.Color = RGB(253,211)
     
            
            End If
            
       End With
     
     Next A
    
     
     
    Erase fdArray
    Erase ldArray
    Erase OrNArray
    Erase ldArray2

    
   '''reset formatting of columns correctly,and unlock editable columns
    
    
    With ld
        .Range("B10:B5500").Locked = False
        .Range("G10:H5500").Locked = False
        .Range("J10:J5500").Locked = False
        .Range("W10:Z5500").Locked = False
        .Range("S10:S5500").Locked = False
        .Range("O10:P5500").Locked = False
        .Range("L10:L10000").NumberFormat = "@"
        .Range("E10:E10000").NumberFormat = "@"
        .Range("Q10:Q10000").NumberFormat = "0.00"
        .Range("Z10:AB10000").NumberFormat = "0.00"
    End With
    
    
    '''array is being sent as text - this line required to make data format correctly - not sure why!
 
    ld.Range("B10:AB5500").Select
    Selection.Value = Selection.Value
    
    
    ld.Range("B10").Select
    
    On Error GoTo PasswordErrorMsg
    ld.Protect "password1234",AllowFiltering:=True
    fd.Protect "password1234",AllowFiltering:=True
    On Error GoTo 0
    
    
       With Application
                    .ScreenUpdating = True
                    .EnableEvents = True
                    .Calculation = xlCalculationAutomatic
        End With
      
      Exit Sub
      
      
ErrorMsgfd:
  MsgBox "No Data has been entered into the Feeder Data!",vbCritical,"Cannot Update"
  Exit Sub
  
ErrorMsgld:
  MsgBox "No Data has been entered into the Live Data!","Cannot Update"
  Exit Sub
  
ErrorMsgOrN:
  MsgBox "No Data has been entered into the Order Numbers!","Cannot Update"
  Exit Sub
  
PasswordErrorMsg:
   MsgBox "An incorrect password has been entered for this worksheet. Please change the password to the agreed text to continue!","Incorrect Password!!"
    

End Sub

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-