VBA 到 Open Office Basic 转换麻烦

Posted

技术标签:

【中文标题】VBA 到 Open Office Basic 转换麻烦【英文标题】:VBA to Open Office Basic convert trouble 【发布时间】:2016-05-12 10:37:53 【问题描述】:

您好,我正在尝试将此代码重写\转换为 VBScript。在 Excel 2013 中完美运行,但在 Open Office 中,无论我试图搜索什么都会抛出没有数据(Nie znaleziono danych)。

VBA 代码:

Sub Znajdz()

Dim szukane As Variant

szukane = InputBox("Wpisz szukane słowo", "Wyszukaj")

If szukane = "" Then
MsgBox "Nie wpisałeś nic w okienku Wyszukaj", vbOKOnly + vbExclamation,"Brak danych"
Exit Sub
End If

On Error GoTo blad

Cells.Find(What:=szukane, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
    xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False).Activate

Exit Sub

blad:

MsgBox "Nie znaleziono danych", vbOKOnly + vbInformation, "Brak wyników"

End Sub

我的 VBScript:

Sub Znajdz()

Dim szukane As Variant

szukane = InputBox("Wpisz szukane słowo", "Wyszukaj")

If szukane = "" Then
MsgBox "Nie wpisałeś nic w okienku Wyszukaj", vbOKOnly + vbExclamation, "Brak danych"
Exit Sub
End If

On Error GoTo blad

Cells.Find(What:=szukane, After:=ActiveCell, LookIn:=-4163, LookAt:= _
    1, SearchOrder:=1, SearchDirection:=1, MatchCase:=False _
    , SearchFormat:=False).Activate

Exit Sub

blad:

MsgBox "Nie znaleziono danych", vbOKOnly + vbInformation, "Brak wyników"

End Sub

帮帮我,我必须在 Open Office 中将其用作宏

【问题讨论】:

VBScript 不允许类型声明;将 Dim szukane As Variant 更改为 Dim szukane 【参考方案1】:

Open Office 不将 VBA 或 VBScript 用于宏,它使用 Open Office Basic。

OO Wiki 给出了执行 VBA 宏的方法;也许值得一看?

我已尝试为您转换它 - 试试看?我手头没有 OO,所以无法测试它是否有效......

Sub Znajdz()

Dim szukane As String
Dim oCell As Object
dim index As long
Dim Find As Object
Dim oSheet As Object
oSheet = StarDesktop.CurrentComponent.Sheets(0)

szukane = InputBox("Wpisz szukane słowo", "Wyszukaj")

If szukane = "" Then
    MsgBox "Nie wpisałeś nic w okienku Wyszukaj", MB_OK + MB_ICONEXCLAMATION, "Brak danych"
    End
End If

oCell = oSheet.getCellByPosition(1,1)
index = oCell.CellAddress.Sheet
Find = oSheet.createSearchDescriptor
Find.setSearchString(szukane)
oCell = oSheet.FindFirst(Find)
If Not IsNull(oCell) Then
    MsgBox "Found it at " & oCell.CellAddress.Column & oCell.CellAddress.Row
Else
    MsgBox "Not Found!"
Endif

End Sub

【讨论】:

hmm.. 还有一件事你已经使用“& oCell.CellAddress.Column & oCell.CellAddress.Row”以及如何标记已建立的单元格?? 你的意思是标记它? oCell.CellAddress 具有单元格的列和行,因此您基本上可以在那时用它做任何您喜欢的事情。如果您打算选择单元格本身,我希望您可以添加行 thisComponent.getCurrentController.Select(oCell) 以启用特定单元格 这正是我所需要的。

以上是关于VBA 到 Open Office Basic 转换麻烦的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Open Office VBA 中重新分配命名范围的地址?

如何在 libre office basic 中使用模块?

已删除的部件:部件/xl/vbaProject.bin。(Visual Basic for Applications(VBA))

Excel VBA——数据类型

VBA 到 Star Basic (OpenOffice),苦苦挣扎

如何禁止用户在 calc open office 中使用 saveas?