EXCEL2003VBA、オープンオフィス3.1で使えるようにしたい †
ページ | OpenOffice.org FAQの登録ページ |
---|---|
投稿者 | TAKA6855 |
分類 | |
優先順位 | |
状態 | |
カテゴリー | |
投稿日 | 2009-10-05 21:29:49 (月) |
OS | xp |
依存するページ | |
バージョン |
メッセージ †
回答ページでは行末に「~」を付加する必要はありません |
初めて投稿します、EXCEL2003VBA、オープンオフィス3.1で使えるようにしたい初心者の為解りません
Private Sub 入力_Click() Application.MoveAfterReturnDirection = xlToRight Range("B10:g49").Select End Sub Private Sub 削除_Click() Range("B10:K49").Select Selection.ClearContents Range("B10").Select End Sub Private Sub Worksheet_Change(ByVal Target As Range) Dim WS2 As Worksheet Dim v As Variant Dim lngRow As Long Dim m As Variant If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("B10:B39")) Is Nothing Then Exit Sub Set WS2 = Worksheets("リスト") v = WS2.Range("A1").CurrentRegion For lngRow = 2 To UBound(v, 1) If v(lngRow, 2) Like "ZA*" Then v(lngRow, 1) = "Z" & Right(v(lngRow, 2), 5) Else v(lngRow, 1) = Right(v(lngRow, 2), 5) End If Next m = Application.Match(CStr(Target.Value), Application.WorksheetFunction.Index(v, 0, 1), 0) If IsNumeric(m) Then Target.Offset(, 1).Resize(, 4).Value = Array(v(m, 2), v(m, 3), v(m, 4), v(m, 5)) Else If Target.Value <> "" Then MsgBox "品番 [" & Target.Value & "] は存在しません" Else Target.Offset(, 1).Resize(, 4).ClearContents End If End If End Sub Private Sub 印刷_Click() Columns("C:f").Select Selection.EntireColumn.Hidden = fales ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Dim WS1 As Worksheet Dim WS2 As Worksheet Dim v As Variant Dim vv As Variant Dim strDate As String Dim lngRowMax As Long Dim lngRowResult As Long Dim lngRow As Long Set WS1 = Worksheets("A") Set WS2 = Worksheets("B") lngRowMax = WS1.Range("A" & WS1.Rows.Count).End(xlUp).Row v = WS1.Range("C10:G10").Resize(lngRowMax - 9).Value ReDim vv(1 To UBound(v, 1), 1 To 6) strDate = WS1.Range("E6").Text For lngRow = 1 To lngRowMax - 9 If v(lngRow, 1) <> "" Or v(lngRow, 2) <> "" Or v(lngRow, 3) <> "" Or v(lngRow, 4) <> "" Or v(lngRow, 5) <> "" Then lngRowResult = lngRowResult + 1 vv(lngRowResult, 1) = strDate vv(lngRowResult, 2) = v(lngRow, 1) vv(lngRowResult, 3) = v(lngRow, 2) vv(lngRowResult, 4) = v(lngRow, 3) vv(lngRowResult, 5) = v(lngRow, 4) vv(lngRowResult, 6) = v(lngRow, 5) End If Next If lngRowResult > 0 Then WS2.Range("A" & WS2.Rows.Count).End(xlUp).Offset(1).Resize(lngRowResult, 6).Value = vv MsgBox lngRowResult & " " Else MsgBox " " End If End Sub Private Sub 列幅拡大_Click() Columns("C:f").Select Selection.EntireColumn.Hidden = fales End Sub Private Sub 列幅縮小_Click() Columns("C:f").Select Selection.EntireColumn.Hidden = True End Sub
Excel VBA互換機能 †
M.Kamataki (2009-10-05 23:36:38 (月))
OpenOffice.org 3.0から、Excelのマクロ(VBA)入りのファイルの実行が可能になっています。その基礎知識はお持ちでしょうか。ExcelファイルをCalcで読み込んで実行する方法は、以下の記事をお読みください。
「オープンソース統合オフィススイート「OpenOffice.org 3.0」到来!! 6.Excel VBAのサポート」
http://journal.mycom.co.jp/special/2008/ooo3/005.html
Calc上でも、マクロの先頭に「Option VBAsupport 1」というコードを記述しておくと互換性のあるExcel VBAが動作します。
ご質問の際に投稿されたマクロですが、上記の「Option VBAsupport 1」を加え、一部半角であるべき文字を全角から修正して、以下のサンプルを用意しました。
faq5_100sample1.ods
結果、「削除_Click()」「印刷_Click()」「列幅拡大_Click()」「列幅縮小_Click()」はそのままで動作可能でした。
「入力_Click()」は調べきっていないので、よくわからないVBAのコードがあり、動作しません。「Worksheet_Change()」は、引数が必要だと思うのですが、どのように与えるのかわからないので、わたしは動作させることができませんでした。
オリジナルのExcelファイルをサンプルとして添付していただくのが、このあたりの理解につながると思います。できたら、添付をお願いします。
さて、初心者とのことですが、まずOpenOffice.orgのVBA互換機能について、基礎的な理解を持っていただくことが必要ではないでしょうか。
無題 †
tani (2009-10-05 23:52:08 (月))
経験上、Option VBASupport 1を冒頭につけるとVBAの8割〜9割くらいのステップは動いたりします。ただマクロの場合「8割くらいのステップが動く」≒「動かない」になっちゃいます。
なので基本的にはUNO APIで書き換える必要があります。動かない箇所だけ書き換えてもいいんですが、そうするとVBAのコードとOpenOffice.org Basicのコードが混じってしまって、保守性がちょっと悪くなってしまうので、いっそ全部書き換えるほうがいいかもしれません。そのあたりの検討もされたほうが良いのではと思います。
OOo BasicとUNOに関してはまずは以下あたりを読んでみてください。
http://wiki.services.openoffice.org/wiki/JA/Documentation/BASIC_Guide
無題 †
tani (2009-10-06 00:04:46 (火))
ちなみにExcelでのWorksheet_Change()は、OOoでは自分でシート切り替えイベントのリスナーを設定したりする必要があるので、Option VBASupport 1がついていてもなんとなく引数の与え方というレベルの書き換えでは動かない気がします。
どこかで見た気が。。。 †
M.Kamataki (2009-10-06 01:01:50 (火))
どこかで見た気がしたので探してみると、はにゃ?さんのサイトでした。「入力_Click()」は、以下にCalcのマクロでの代替方法が紹介されています。
選択セルが変更されたときマクロを起動する方法。
http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOobbs2%2F1
「Worksheet_Change()」についても似たマクロが俎上に上がってますね。
無題 †
TAKA6855 (2009-10-06 07:49:35 (火))
沢山の、ご投稿いただき、有難うございました
カテゴリーなど変更 †
M.Kamataki (2009-10-06 07:53:07 (火))
TAKA6855さん、別質問でのコメントを統合し、当質問は完了としました。なお、カテゴリーも適当と思われるものに変更しました。