не работает vb макрос

GoodWIN

Участник
Доброго времени суток, есть макрос написанный на visual basic в таблице эксель.
На одном из компьютеров макрос отказывается работать выдавая ошибку:
Код:
Compile error:
The code in this project must be updated for use on 64-bit systems.
Please rewiew and update Declare statements and then mark them with the PtrSafe attribute.
Я не очень в этом разбираюсь но подозреваю что дело в разрядности ms office или ms windows.
Подскажите как быть и что делать? Может какую то dll надо подрубить?
 

Surf_rider

Администратор
Команда форума
Так в итоге то где работает и где не работает?
 

alxmel

Участник
Присоединяюсь к вопросу, точно такая же проблема. Точно такая же ошибка. Подскажите как решить??
image_241.jpg
 

Surf_rider

Администратор
Команда форума
Установлен наверняка 64 разрядный офис. Какая винда? Давайте конкретнее как то..
Товарищи там же написано - добавьте атрибут PtrSafe
Ну и код vb скрипта было бы не плохо...
 

alxmel

Участник
Установлен наверняка 64 разрядный офис. Какая винда? Давайте конкретнее как то..
Товарищи там же написано - добавьте атрибут PtrSafe
Ну и код vb скрипта было бы не плохо...
Windows 7 x64 professional, Office 2010 x64 professional
Код vb скрипта
Код:
Private Type GUID

    PartOne As Long

    PartTwo As Integer

    PartThree As Integer

    PartFour(7) As Byte

End Type



Private Declare Function CoCreateGuid Lib "OLE64.DLL" _

(ptrGuid As GUID) As Long



Public Function GUID() As String

    Dim lRetVal As Long

    Dim udtGuid As GUID



    Dim sPartOne As String

    Dim sPartTwo As String

    Dim sPartThree As String

    Dim sPartFour As String

    Dim iDataLen As Integer

    Dim iStrLen As Integer

    Dim iCtr As Integer

    Dim sAns As String



    On Error GoTo errorhandler

    sAns = ""



    lRetVal = CoCreateGuid(udtGuid)



    If lRetVal = 0 Then



       'First 8 chars

        sPartOne = Hex$(udtGuid.PartOne)

        iStrLen = Len(sPartOne)

        iDataLen = Len(udtGuid.PartOne)

        sPartOne = String((iDataLen * 2) - iStrLen, "0") _

        & Trim$(sPartOne)



        'Next 4 Chars

        sPartTwo = Hex$(udtGuid.PartTwo)

        iStrLen = Len(sPartTwo)

        iDataLen = Len(udtGuid.PartTwo)

        sPartTwo = String((iDataLen * 2) - iStrLen, "0") _

        & Trim$(sPartTwo)



        'Next 4 Chars

        sPartThree = Hex$(udtGuid.PartThree)

        iStrLen = Len(sPartThree)

        iDataLen = Len(udtGuid.PartThree)

        sPartThree = String((iDataLen * 2) - iStrLen, "0") _

        & Trim$(sPartThree)   'Next 2 bytes (4 hex digits)



        'Final 16 chars

        For iCtr = 0 To 7

            sPartFour = sPartFour & _

            Format$(Hex$(udtGuid.PartFour(iCtr)), "00")

        Next

     'To create GUID with "-", change line below to:

     'sAns = sPartOne & "-" & sPartTwo & "-" & sPartThree _

     '& "-" & sPartFour



       sAns = sPartOne & sPartTwo & sPartThree & sPartFour



        End If



        GUID = sAns

Exit Function





errorhandler:

'return a blank string if there's an error

Exit Function

End Function











Function RunSQL(StrSQL) As Variant

Dim r() As Variant



Set US = CreateObject("OracleInProcServer.XOraSession")

Set Db = US.OpenDatabase("TNS", "tns_operator1/1", 0&)



Dim DS As Object

Dim S1 As String, N1 As Integer



Set DS = Db.CreateDynaset(StrSQL, 0&)



ReDim r(1 To DS.RecordCount, 1 To DS.fields.Count)

i = 1

While Not DS.EOF

    i2 = 1



    Dim WS As Object



    For Each WS In DS.fields

        r(i, i2) = WS.Value

        i2 = i2 + 1

    Next WS



    DS.MoveNext

Wend



Set DS = Nothing

Set Db = Nothing

Set US = Nothing

RunSQL = r

End Function
 

UEF

Модератор
Команда форума
Попробуйте в таком формате, вставьте PtrSafe как вам посоветовали выше..
Код:
Private Declare PtrSafe Function CoCreateGuid Lib "OLE64.DLL" _
 
Верх Низ