Нужна помощь в переводе макроса из VBA в LibreOffice 5Attribute VB...

Автор ForumOOo (бот), 15 августа 2016, 14:09

0 Пользователи и 1 гость просматривают эту тему.

ForumOOo (бот)

Компонент: Base
Версия продукта: 5.x
Сборка: LibreOffice
ОС: Windows 7

Нужна помощь в переводе макроса из VBA в LibreOffice 5

Attribute VB_Name = "Module1"
Sub t()
Attribute t.VB_ProcData.VB_Invoke_Func = "q\n14"
Application.DisplayAlerts = 0
For Each r In Selection.Rows
s = "'"
For Each c In r.Cells
s = s & c.Text
Next
r.Value = s: r.Merge
Next
End Sub

Макрос объединяет ячейки в выделенном тексте построчно
<br/><br/>--<br/>Подпись: 14kk

economist

Попробуйте так (проверял в LibreOffice 5.2 Calc):


Option VBASupport 1
Option Compatible
'-----------------------------------------------

Sub t()
ThisComponent.BasicLibraries.VBACompatibilityMode=true 
For Each r In Selection.Rows
s = "'"
For Each c In r.Cells
s = s & c.Text
Next
r.Value = s: r.Merge
Next
End Sub
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

rami

Цитата: economist от 15 августа 2016, 13:28Попробуйте так
С помощью Option VBASupport 1 будут работать многие макросы VBA, а родной макрос выглядит так:
Sub Main
c=ThisComponent.CurrentSelection
x=c.RangeAddress.StartColumn
x1=c.RangeAddress.EndColumn
y=c.RangeAddress.StartRow
y1=c.RangeAddress.EndRow
For i=y To y1
c.SpreadSheet.getCellRangeByPosition(x,i,x1,i).merge(true)
Next
End Sub

14kk

Цитата: economist от 15 августа 2016, 15:28
Попробуйте так (проверял в LibreOffice 5.2 Calc):


Option VBASupport 1
Option Compatible
'-----------------------------------------------

Sub t()
ThisComponent.BasicLibraries.VBACompatibilityMode=true 
For Each r In Selection.Rows
s = "'"
For Each c In r.Cells
s = s & c.Text
Next
r.Value = s: r.Merge
Next
End Sub


Вызвало ошибку переменной BASIC

14kk

Цитата: rami от 15 августа 2016, 16:06
Цитата: economist от 15 августа 2016, 13:28Попробуйте так
С помощью Option VBASupport 1 будут работать многие макросы VBA, а родной макрос выглядит так:
Sub Main
c=ThisComponent.CurrentSelection
x=c.RangeAddress.StartColumn
x1=c.RangeAddress.EndColumn
y=c.RangeAddress.StartRow
y1=c.RangeAddress.EndRow
For i=y To y1
c.SpreadSheet.getCellRangeByPosition(x,i,x1,i).merge(true)
Next
End Sub


Ваш работает, Спасибо Вам огромное) очень помогли!!!

14kk