Вызовы ядра 32 несовместимости с Excel VBA

У меня есть приведенный ниже код в VBA, который отлично работает в Excel 2003. Перенос шаблона в Excel 2007 не работает.

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As Any, ByVal lpFileName As String) As Long

Private Sub Workbook_Open()
Exit Sub


Dim WorksheetName As String
Dim WorksheetCell As String
Dim Section As String
Dim kKey As String
Dim lLine As Long
Dim InvoiceNumber As Long
Dim InvoiceNumberCell As Object
Dim TemplateName As String
Dim IniFileName As String
Dim Dummy As Variant

    TemplateName = "MyInvoicesTemplate.xlt"
    WorksheetName = "Invoice"
    WorksheetCell = "H2"
    Section = "Invoice"
    kKey = "Number"
    IniFileName = "C:\Windows\Temp\InvoiceNumber.txt"

    Set InvoiceNumberCell = Worksheets(WorksheetName).Range(WorksheetCell)
    If UCase(ActiveWorkbook.Name) = UCase(TemplateName) Then GoTo Finito
    Dummy = GetString(Section, kKey, IniFileName)
    If Left(Dummy, 1) = Chr$(0) Then
        InvoiceNumber = 1
    Else
        InvoiceNumber = CLng(Dummy) + 1
    End If
    WritePrivateProfileString Section, kKey, CStr(InvoiceNumber), IniFileName
    InvoiceNumberCell.Value = InvoiceNumber
    With ActiveWorkbook.VBProject.VBComponents(ActiveWorkbook.CodeName).CodeModule
        lLine = .ProcBodyLine("Workbook_Open", vbext_pk_Proc)
        .InsertLines lLine + 1, "Exit Sub"
    End With
Finito:
Set InvoiceNumberCell = Nothing
End Sub

Function GetString(Section As String, Key As String, File As String) As String
    Dim KeyValue As String
    Dim Characters As Long
    KeyValue = String(255, 0)
    Characters = GetPrivateProfileString(Section, Key, "", KeyValue, 255, File)
    If Characters > 1 Then
        KeyValue = Left(KeyValue, Characters)
    End If
    GetString = KeyValue
End Function

Любые идеи, почему это происходит? Я пытался сохранить шаблон в разных форматах, но безуспешно!

Спасибо. МК


person koumides    schedule 20.02.2012    source источник
comment
Ссылка Дика Куслейки обязательно вам поможет. Кроме того, почему у вас есть Exit Sub прямо в начале в Private Sub Workbook_Open()   -  person Siddharth Rout    schedule 21.02.2012


Ответы (2)


Если вы используете 64-разрядную версию Office, API изменились. Видеть

http://www.jkp-ads.com/articles/apideclarations.asp

person Dick Kusleika    schedule 20.02.2012
comment
+1 Хотя пользователь не упомянул 64-битную версию, но сообщение об ошибке все выдает :) - person Siddharth Rout; 21.02.2012

API изменился.

IF VBA7 объявить ptrSafe и LongPtr и т. д.

person lee    schedule 18.12.2013