调试没问题 生成EXE后 错误91 未设置对象变量或with block变量
代码如下   调用getcachepath() 出现的错误   
另外 wininet.dll 注册不成功  找不到dllregisterserver输入点
Private Declare Function GetUrlCacheEntryInfo Lib "wininet.dll" Alias "GetUrlCacheEntryInfoW" (ByVal szUrlName As Long, ByRef lpCacheEntryInfo As Any, ByRef lpdwCacheEntryInfoBufferSize As Long) As Long
Private Declare Function SysAllocString Lib "oleaut32.dll" (ByVal pOlechar As Long) As StringPrivate Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
Private Type INTE_CACHE_ENTRY_INFO
    dwStructSize As Long
    lpszSourceUrlName As Long
    lpszLocalFileName As Long
    CacheEntryType As Long
    dwUseCount As Long
    dwHitRate As Long
    dwSizeLow As Long
    dwSizeHigh As Long
    LastModifiedTime As FILETIME
    ExpireTime As FILETIME
    LastAccessTime As FILETIME
    LastSyncTime As FILETIME
    lpHeaderInfo As Long
    dwHeaderInfoSize As Long
    lpszFileExtension As Long
    dwReserved As Long
End Type
Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Public Function getcachepath(lpszUrl As String) As String
   
    Dim dwEntrySize As Long
    Dim lpCacheEntry As INTE_CACHE_ENTRY_INFO
    Dim tarr() As Byte
   
    Call GetUrlCacheEntryInfo(StrPtr(lpszUrl), ByVal 0, dwEntrySize)
    If dwEntrySize > 0 Then
        ReDim tarr(0 To dwEntrySize)
        Call GetUrlCacheEntryInfo(StrPtr(lpszUrl), tarr(0), dwEntrySize)
        CopyMem ByVal lpCacheEntry, tarr(0), Len(lpCacheEntry)
        getcachepath = SysAllocString(lpCacheEntry.lpszLocalFileName)
        getcachepath = StrConv(getcachepath, vbFromUnicode)
    End If
End Function各位大大们   希望帮忙解决一下

解决方案 »

  1.   

    全编译执行   也没问题   
       生成EXE 用到getcachepath() 这个    就出现错误91
      

  2.   

    对象变量或 With 块变量没有设置(错误 91)
       创建对象变量有两个步骤。第一,必须先声明对象变量。然后必须用 Set 语句将一个正确的引用赋值给对象变量。同样地,With...End With 块必须先用 With 语句进入点来执行初始化。此错误有以下的原因和解决方法: 试图使用的对象变量,还没有用一个正确对象的引用来赋值。 
    给对象变量指定或再指定一个引用。例如,如果在下列的代码中省略 Set 语句的话,那么引用 MyObject 将会产生错误:Dim MyObject As Object    ' 创建对象变量。
    Set MyObject = Sheets(1)    ' 创建一个正确的对象引用。
    MyCount = MyObject.Count    ' 计数值赋给 MyCount。试图用的对象变量已经被设为 Nothing。 
    Set MyObject = Nothing    ' 释放此对象。
    MyCount = MyObject.Count    ' 引用了已释放的对象。再指定引用给对象变量。例如,使用新的 Set 语句给对象设置新的引用。此对象是正确的对象,但没有被设置,因为在对象库中,在 “引用” 对话框中没有被选取。 
    在 “添加引用” 对话框选择对象库。在 With 块内GoTo 语句的去向。 
    不要跳进 With 块。确保块使用 With 语句进入点以执行初始化。当选了 “设置下一条语句” 命令时,在 With 块内指定了一行。 
    With 块必须用 With 语句执行初始化。详细信息,可选取有问题的项目,并按下 F1 键。 
      

  3.   

    是本机
       放在同一文件夹  还是一样的     哎 调试的时候没点问题    生成EXE 就出错了
      

  4.   

    getcachepath("随便一个存在IE缓存文件的网址")   就可以得出这个缓存文件的正确路径 
      

  5.   

    调试没问题 生成EXE后 错误91 未设置对象变量或with block变量 
    //可能原因:对象没有set。笨办法,把每一步执行结果print到文件吧。看看哪里有问题。另外 wininet.dll 注册不成功  找不到dllregisterserver输入点 
    //是否 wininet.dll 还有以来的dll没有copy到相关目录。
    exe有问题,检查下编译选项。静态编译看看。