MS Excel ve LibreOffice Calc ile çalışacak makro


1

Kullanıcıların hem Excel'de hem de LibreOffice Calc'ta çalışacağı bir elektronik tablom var. Her ikisinde de işe yarayacak makrolar tasarlamak istiyorum. Söyleyeceğim kodu düşünüyordum: Eğer Excel Sonra [VBA kodu], Else [Temel veya Python kodu]

İki anahtarın, her iki programın okuyabileceği bir IF / THEN ifadesi (veya eşdeğeri) olacağını ve her iki programın da kendileri için geçerli olmayan kodu yoksaymasını sağlamanın bir yolu olacağını düşünüyorum.

Zaten LibreCalc içinde çalıştırmayı denedim ama işe yaramadı. İşte Excel ve Calc'da çalıştırmam gereken kod:

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

Herhangi bir öneri?

Yanıtlar:


2

Calc için API, Excel için API'den çok farklıdır, bu nedenle VBA, StarBasic ile çok benzer olsa da, farklı API çağrıları için ayrı bir kod yazmanız gerekir. Çalışmakta olan dosyanın Calc olup olmadığını test etmek için bu StarBasic'te çalışır:

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

Gördüğüm en büyük sorun, bu kodu e-tablonun içinden çalıştırmaktan bahsediyor olmanız. Elektronik tablo bir .xls veya .xlsx olarak kaydedilirse, OpenOffice ve LibreOffice dosya açıldığında tüm makroları devre dışı bırakır. Elektronik tablonun bir .ods dosyası olarak kaydedilmesi Excel'in tersi olduğuna inanıyorum. Tüm kodu doğru yazsanız bile, programlardan en az biri programın çalışmasını reddedecektir.

Bir dış programın bir elektronik tablo açan ve geçerli kod bloğunu çalıştıran Excel veya Calc olup olmadığını test etmesi mümkün olsa da, bunun elektronik tabloya gömülü makrolarla çalıştığını görmüyorum.


İki makroyu, her bir format için bir tane kaydedebilir ve uygun makroyu çağırmak için benzer bir test kullanabilir misiniz?
fixer1234

@ fixer1234 Bildiğim kadarıyla değil. Kullanıcıya elektronik tabloyu açıp sonra ayrı bir komut dosyası başlatmanız gerekeceğini düşünüyorum. Veya betiği bilgisayarındaki başlangıç ​​klasörüne koyun ve sürekli olarak (her 20 saniyede bir ya da bir şey) bu dosyanın açık olup olmadığını kontrol edin ve açıksa elektronik tablonun kodunu çalıştırın.
Lyrl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.