• ベストアンサー

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で動かすにはどこを修正すればいいのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • NuboChan
  • ベストアンサー率47% (799/1673)
回答No.4

Like演算子はLibreOffice CalcのVBAではサポートされていないようです。 If Not Ws.Name Like “貼り付け” Then の代替方法: Like演算子の代わりに、<>演算子を使用するのは ? If Ws.Name <> "貼り付け" Then

okozyo
質問者

お礼

ご回答ありがとうございます。 このコードで解決しました。 試行錯誤しているなかで、NOT を削除すればエラーは出ないので問題の解決を、シートの位置を変えることで代替してましたが、これですっきりしました。

Powered by GRATICA

その他の回答 (3)

回答No.3

意図が違っているかもしれませんが 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

okozyo
質問者

お礼

ご回答ありがとうございます。 これは、これで助かります。 ChatGPT、使ったけど、望む答えやコードは全くかえってこなくて、ググったときにみたサイトの情報しか返ってこなかった。しかも、エクセル用のVBA・

Powered by GRATICA
  • kame999
  • ベストアンサー率21% (638/2980)
回答No.2

本家を使うしかない 普通に使うならいいけど

okozyo
質問者

お礼

ご回答ありがとうございます。

Powered by GRATICA
  • NuboChan
  • ベストアンサー率47% (799/1673)
回答No.1

LibreOfficeはVBAを完全にサポートしていないため、一部のコードは修正が必要です。 ワイルドカード文字(`*`)が追加では ? If Not Ws.Name Like "*貼り付け*" Then

okozyo
質問者

補足

ワイルドカードを入れてみましたがダメでした。 If Not Ws.Name Like "貼り付け" Then 部分を削除すれば、マクロ自体は正常に動いているので、構文のどこかに間違いがあるか、LibreOfficeでIf Not かLikeが認識しないということはないのでしょうか。

関連するQ&A