Macro que será executada no MS Excel e no LibreOffice Calc

1

Eu tenho uma planilha com a qual os usuários trabalharão no Excel e no LibreOffice Calc. Eu gostaria de criar macros que funcionem em ambos. Eu estava pensando em código que diria: Se o Excel Então [código VBA], Else [Basic ou código Python]

Acho que as duas chaves seriam uma instrução IF / THEN (ou equivalente) que ambos os programas pudessem ler e uma maneira de garantir que ambos os programas ignorassem o código que não é aplicável a eles.

Eu já tentei executá-lo no LibreCalc, mas não funciona. Aqui está o código que preciso executar no Excel e no Calc:

Public Sub spubInsertCurrDateTimeText()
'DESCRIPTION:  inserts current date and time into the active cell in text format.

Dim dtmNow As Date
Dim CurrTemp As Date
Dim CurrTot As Date
Dim NewTot As Date
Dim StartCol As Integer
Dim StopCol As Integer
Dim ClockTimerCol As Integer
Dim TotalTimeCol As Integer

dtmNow = Now 'sets variable to value of function NOW (current date/time)
StartCol = 1 'this is the column where the user enter the starting time
StopCol = 2 'this is the column where the user enter the ending or stop time
ClockTimerCol = 3 'this is the column that calculates elapsed time (StopCol minus StartCol)
TotalTimeCol = 4 'this is the column that tracks the total time elapsed in minutes

If ActiveCell.Column = StartCol Then

ActiveCell = dtmNow 'inserts variable into the active cell
Worksheets(ActiveSheet.Name).Cells(ActiveCell.Row, StopCol).Value = 0

ElseIf ActiveCell.Column = StopCol Then

ActiveCell = dtmNow 'inserts variable into the active cell

CurrTot = Worksheets(ActiveSheet.Name).Cells(ActiveCell.Row, TotalTimeCol).Value
CurrTemp = Worksheets(ActiveSheet.Name).Cells(ActiveCell.Row, ClockTimerCol).Value

NewTot = CurrTot + (CurrTemp * 1440)

Worksheets(ActiveSheet.Name).Cells(ActiveCell.Row, TotalTimeCol).Value = NewTot

Worksheets(ActiveSheet.Name).Cells(ActiveCell.Row, StartCol).Value = 0
Worksheets(ActiveSheet.Name).Cells(ActiveCell.Row, StopCol).Value = 0

Else

ActiveCell = dtmNow 'inserts variable into the active cell

End If

End Sub

Alguma sugestão?

    
por user348514 16.06.2015 / 19:19

1 resposta

2

A API do Calc é muito diferente da API do Excel, portanto, embora o VBA tenha muita semelhança com o StarBasic, é necessário escrever um código separado para lidar com as diferentes chamadas da API. Para testar se o arquivo que está sendo trabalhado é o Calc, isso funciona no StarBasic:

If oDoc.supportsService("com.sun.star.sheet.SpreadsheetDocument") Then
    REM Run code for Calc
Else
    REM Run code for Excel
End If

O maior problema que vejo é que você está falando sobre como executar esse código de dentro da planilha. Se a planilha for salva como .xls ou .xlsx, o OpenOffice e o LibreOffice desativarão as macros quando o arquivo for aberto. Eu acredito que é vice-versa para o Excel se a planilha é salva como um arquivo .ods. Mesmo se você escrever todo o código corretamente, pelo menos um dos programas se recusará a executá-lo.

Embora seja possível que um programa externo teste se o Excel ou o Calc abriram uma planilha e executam o bloco de código aplicável, não vejo isso funcionando com macros incorporadas na planilha.

    
por 19.06.2015 / 20:24