- ベストアンサー
LibreOfficeでマクロを動かしたい。
エクセルからLibreOfficeに乗り換えたいのですが、エクセルで起動しているVBAが動きません。 コードは Rem Attribute VBA_ModuleType=VBAModule Option VBASupport 1 Sub Sample4() Dim Ws As Worksheet For Each Ws In Worksheets Ws.Activate If Not Ws.Name Like "貼り付け" Then Range("A3:I3").Select Selection.Copy Dim Last_Row As Long Last_Row = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row Cells(Last_Row + 1, 1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End If Next Ws ActiveWorkbook.Save '開いているシートを上書き保存 End Sub このコードで、 If Not Ws.Name Like "貼り付け" Then が「BASICランタイムエラー.'13'データの種類が一致していません。」 と表示されます。 エクセルでは問題なく起動していたのでどこを直せばいいのかわからず、困っています。 このVBAをLibreOfficeで動かすにはどこを修正すればいいのでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Like演算子はLibreOffice CalcのVBAではサポートされていないようです。 If Not Ws.Name Like “貼り付け” Then の代替方法: Like演算子の代わりに、<>演算子を使用するのは ? If Ws.Name <> "貼り付け" Then
その他の回答 (3)
- heisukewada
- ベストアンサー率57% (94/163)
意図が違っているかもしれませんが LibreOffice Calc マクロ Basic を、ChatGPTと相談しながら作りました。 Sub CopyDataToLastRow Dim oSheets As Object Dim oSheet As Object Dim oSourceRange As Object Dim oDestRange As Object Dim lastRow As Long ' 全てのシートを取得 oSheets = ThisComponent.getSheets() ' 各シートに対してループ For i = 0 To oSheets.getCount() - 1 oSheet = oSheets.getByIndex(i) ' シート名を取得 Dim sheetName As String sheetName = oSheet.getName() ' シート名が "貼り付け" でない場合の処理 If sheetName <> "貼り付け" Then ' ソース範囲を指定 oSourceRange = oSheet.getCellRangeByName("A3:I3") ' 最終行を見つける lastRow = getLastRowInColumn(oSheet, "A") + 1 ' 宛先範囲を指定 oDestRange = oSheet.getCellRangeByPosition(0, lastRow, 8, lastRow) ' ソース範囲の値を直接宛先範囲に設定 oDestRange.setDataArray(oSourceRange.getDataArray()) End If Next i End Sub
お礼
- NuboChan
- ベストアンサー率47% (799/1673)
LibreOfficeはVBAを完全にサポートしていないため、一部のコードは修正が必要です。 ワイルドカード文字(`*`)が追加では ? If Not Ws.Name Like "*貼り付け*" Then
補足
ワイルドカードを入れてみましたがダメでした。 If Not Ws.Name Like "貼り付け" Then 部分を削除すれば、マクロ自体は正常に動いているので、構文のどこかに間違いがあるか、LibreOfficeでIf Not かLikeが認識しないということはないのでしょうか。
お礼