Home |
Search |
Today's Posts |
#23
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
If 2.5 works I suppose there is no real trouble, but maybe you could run a
reg cleaner. RBS "Peter T" <peter_t@discussions wrote in message ... Thanks, but for some reason I persevered, downloaded the same validation tool again and this time gave me a code Got the setup (I already have an older version, maybe that's what the message was about but what is "Advantage" - very confusing). I run it, reports many mismatch registry fields, not only in 2.8 but all my versions, incl 2.5 which works fine. Think I'll pass on trying to manually edit so many registry entries. Regards, Peter T "RB Smissaert" wrote in message ... I can mail you the setup file. RBS "Peter T" <peter_t@discussions wrote in message ... Looks interesting, I try and get it - MS need to verify I've got genuine Windows, continue - Seems I need to use the "alternative" Genuine Windows Validation method - Run the validation tool - Continue - Download and run from location - msgbox - this version of Windows Advantage is no longer supported, please download the latest version Give up !! Regards, Peter T "RB Smissaert" wrote in message ... Bloody confusing this ADO! Have you tried the MDAC version checker? http://www.microsoft.com/downloads/d...DF6-4A21-4B43- BF53-14332EF092C9&displaylang=en RBS "Peter T" <peter_t@discussions wrote in message ... No, I can't set 2.8 via the GUID, I get error "Object library not registered" I used your original routine to add all versions, returned GUID each time before removing the ref I got these - 2.0, 2.1, 2.5, 2.6 are all same {00000200-0000-0010-8000-00AA006D2EA4} 2.7 {EF53050B-882E-4776-B643-EDA472E8E3F2} 2.8 {2A75196C-D9EB-4129-B803-931327F72D5C} s = the above GUID string .references.AddFromGuid(s, 2, 8) fails with the 2.8, all others work It seems strange I can add AddFromFile the 'bad' ref and return its GUID, yet can't AddFromGuid. But as I've said, there's something wrong with this one! Regards, Peter T "RB Smissaert" wrote in message ... Peter, Can you add that ADO reference via the GUID and will it be faulty despite setting the reference successfully? I am talking about the problematic 2.8 here. RBS "Peter T" <peter_t@discussions wrote in message ... Hi Bart, I wouldn't want to suggest you leave out 2.8, not sure what the problem is with it in my system and probably unusual. No idea if it's relates to the reason your user fails. I modified your function and it succeeded it correctly adding v2.7 after first adding the problematic 2.8. Function AddReferenceFromFile( blah Dim oRef As Object ' Reference ' code On Error Resume Next Set oRef = VBProj.References.AddFromFile(strFilePath) ' AddReferenceFromFile = True AddReferenceFromFile = Len(oRef.fullPath) 0 If Err.Number Then If Not oRef Is Nothing Then VBProj.References.Remove oRef ' this removed my 2.8 End If Else AddReferenceFromFile = True End If Regards, Peter T wrote in message oups.com... Hi Peter, My customers ( 100 ) have been using this routine now for a week and sofar I haven't heard about any problems. Are you suggesting I should leave the 2.8 option out? RBS Peter T wrote: Hi Bart, Yes I had noticed (later) the function didn't return True on success. However that doesn't change what I reported earlier about v2.8 not working correctly in my system. Trying to debug its Fullpath (after setting the ref) errors. In my XL2000 looking at tools ref's v2.8 is checked and looks correct (but I know it will cause problems). I ran same code in XL97, v2.8 is also checked but marked MISSING. Regards, Peter wrote in message ups.com... Peter, Just noticed that the function misses this line at the end: AddReferenceFromFile = True Before Exit Function Try again with that added. RBS Peter T wrote: Hi Bart, Your add ado ref routine both worked and failed getting your error message. Somehow it managed to add the ref to v2.8 though as far as I know this version is not correctly registered on my system. It doesn't normally appear in tools ref's and things have gone wrong in the past using other people's wb's with this ref. So I always end up changing to 2.7 or rather 2.5 which for some reason I find more reliable. As I say it added the 2.8 ref but when I did this ' r = a vba ref to v2.8 Debug.Print r.Name, r.Description, r.Major, r.Minor ADODB Microsoft ActiveX Data Objects 2.8 Library 2 8 Debug.Print r.FullPath ' this fails !! debug.print err, err.description -2147319779 Method 'FullPath' of object 'Reference' failed If I change the ref to v2.7 both debug lines work ADODB Microsoft ActiveX Data Objects 2.7 Library 2 7 C:\Program Files\Common Files\System\ado\msado27.tlb Maybe something similar to your user. I have two versions of msado15.dll on my system, one an old v1.5 and the newer 2.8 (why is it the 2.8 version named msado15.dll ! I also have all the other versions in your list. FWIW I recall having problems when trying to upgrade to 2.8, it was a while ago. Regards, Peter T PS I commented out your code to get file name from an ini and did - strADOPathFromINI = ThisWorkbook.Name "RB Smissaert" wrote in message ... Trying to come up with a foolproof way to add the current ADO library to the project's references. I used to do this by just saving the .xla with a reference to a low version, 2.5 and that worked fine for a long time, but then came across a user where this failed. Then I had a method that got the ADO library file path from registry reads using code from KeepITCool: Function GetLibrary(sProgID$) As String Dim oReg As Object, sDat$ Const HKCR = &H80000000 Set oReg = GetObject( _ "winmgmts:{impersonationLevel=impersonate}!\\.\roo t\default:StdRegProv") oReg.getstringvalue _ HKCR, sProgID & "\CLSID", vbNullString, sDat oReg.getstringvalue _ HKCR, "CLSID\" & sDat & "\Inprocserver32", vbNullString, sDat GetLibrary = sDat End Function Except I re-wrote this by using the Windows API. This solved this one user's problem, but it failed with others, not exactly sure why. Currently I use this method: Save the .xla with the lowest ADO version I have on my development machine, 2.1 In the Workbook_Open event remove this reference and add the current library like this, slightly simplified: Function AddReferenceFromFile(strFilePath As String, _ Optional strWorkbook As String) As Boolean Dim VBProj As VBProject On Error GoTo ERROROUT If Len(strWorkbook) = 0 Then strWorkbook = ThisWorkbook.Name End If Set VBProj = Workbooks(strWorkbook).VBProject VBProj.References.AddFromFile strFilePath Exit Function ERROROUT: End Function Sub SetADOReference() Dim i As Byte Dim ADOConn As Object Dim strADOVersion As String Dim strADOFolder As String Dim strADOFile As String Dim strADOPathFromINI As String Dim arrADOFiles Const strINIPath As String = "C:\test.ini" strADOPathFromINI = ReadINIValue(strINIPath, _ "Add-in behaviour", _ "Full path to ADO library") If InStr(1, strADOPathFromINI, ":\", vbBinaryCompare) 0 Then If AddReferenceFromFile(strADOPathFromINI) = True Then Exit Sub End If End If strADOFolder = Left$(Application.Path, 1) & _ ":\Program Files\Common Files\System\ADO\" Set ADOConn = CreateObject("ADODB.Connection") strADOVersion = Left$(ADOConn.Version, 3) Set ADOConn = Nothing Select Case strADOVersion Case "2.8" strADOFile = "msado15.dll" Case "2.7" strADOFile = "msado27.tlb" Case "2.6" strADOFile = "msado26.tlb" Case "2.5" strADOFile = "msado25.tlb" Case "2.1" strADOFile = "msado21.tlb" Case "2.0" strADOFile = "msado20.tlb" End Select If AddReferenceFromFile(strADOFolder & strADOFile) = True Then Exit Sub End If arrADOFiles = Array("msado15.dll", "msado27.tlb", "msado26.tlb", _ "msado25.tlb", "msado21.tlb", "msado20.tlb") For i = 0 To 5 If AddReferenceFromFile(strADOFolder & arrADOFiles(i)) = True Then Exit Sub End If Next MsgBox "Failed to add the ADO reference" & vbCrLf & vbCrLf & _ "Please contact Bart Smissaert: ", _ vbExclamation, "adding ADO reference" End Sub Sofar this seems to work fine. I know it is overkill, but as this is so tricky I can't be careful enough. The .ini file read should always make it possible for the user to set the right path, but this can be skipped for starters. I am not 100% sure the Select Case sequence is right, but then there always is the brute force method with the array. Have read a lot of postings about this problem, but there doesn't seem to be any definite, single best way how to tackle this. Any pitfalls here or any suggestions for improvement? RBS |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Nesting a sheet name reference within a cell reference??? | Excel Discussion (Misc queries) | |||
Using an offset formula for the reference in a relative reference | Excel Worksheet Functions | |||
Formulas that reference cells that reference another cell | Excel Discussion (Misc queries) | |||
Foolproof .find | Excel Programming | |||
Row reference increment but preserve column reference | Excel Worksheet Functions |