OpenOffice.org3のマクロについて教えてください

このQ&Aのポイント
  • OpenOffice.org3にてマクロ(OpenOffice Basic)を使って株価取得のプログラムを作成していますが、処理時間が非常に長くなっています。
  • VBAのマクロと同じ処理を行うOpenOffice Basicのマクロを実行する際に、処理状況を表示させる方法を知りたいです。
  • VBAのマクロでは、進捗率やバー表示を行うことができますが、OpenOffice Basicのマクロでは実現方法がわかりません。ご教示いただけると助かります。
回答を見る
  • ベストアンサー

OpenOffice.org3のマクロについて教えて下さい。

お世話になります。 現在、OpenOffice.org3にてマクロ(OpenOffice Basic)を使ってWebサイトより株価取得のプログラムを作成しております。 同じ機能を持ったVBAにて実行する処理時間に比べてOpenOfficeでは非常に長い処理時間を要しています。 そこで、下記VBAマクロに相当するマクロの処理状況を表示させる方法をご存知の方がいらっしゃれば、ご教示頂けます様お願いします。 【VBA】 Dim blnSaveStatus As Boolean Dim strBarNow As String Dim strBarWk As String Dim int進捗率 As Integer Dim intマス数 As Integer Dim i As Integer blnSaveStatus = Application.DisplayStatusBar Application.DisplayStatusBar = True strBarNow = "現在 0%:□□□□□□□□□□" Application.StatusBar = strBarNow For i = 1 To ループ回数 ~~ ループ内の処理 ~~ : : int進捗率 = Int(i * 100 / ループ回数) ' 進捗率(%) intマス数 = Int(i * 10 / ループ回数) ' 10個マスだから10%単位 strBarWk = "現在 " & int進捗率 & "%:" & _ String(intマス数,"■") & String(10 - intマス数,"□") If (strBarWk <> strBarNow) Then Application.StatusBar = strBarWk ' 変化がある時だけバー更新 strBarNow = strBarwk End If Next i Application.StatusBar = False ' ステータスバーの制御をExcelに戻す Application.DisplayStatusBar = blnSaveStatus

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

  • ベストアンサー
回答No.1

'データをちょっとずつ受け取りながら進捗用のサブルーチンを実行する方法は質問者さんが知っていると仮定して(残念だが俺は見つけられなかったので教えて欲しい。StarDesktop.LoadComponentFromURLじゃ駄目っぽいし) ,ステータスバーに進捗情報を表示する方法を示すよ 'C#でいう,WebClient.DownloadProgressChangedEventみたいな。 http://www.oooforum.org/forum/viewtopic.phtml?t=11200 #実際には自分はOption Explicitを書いてたから変数宣言が必要だった。 #JavaやC#経験者で関心があれば,Singletonってのを調べてみるのも面白いかも

new-OKWave
質問者

お礼

ご回答有難うございます。 VBAの様に邪魔にならない様にStatusbarに表示させる事を考えておりましたが、挫折し、開いてるセルにFor~Nextのステップ数を表示させる事で代用する事にしました。

関連するQ&A

  • OpenOffice.org Basicについて

     OOo.rcg Basicでsheet1のセルA2に入力されている文字列を指定されたバイト(桁)数にしたいんですが(今回は5バイトに指定し、桁数が足りない時はスペースで埋めます。)、メッセージボックスでは欲しい文字列が返ってくるのに、最後のセルへの代入ができません。  この説明文では理解できないかもしれませんが、おかしい所が分かる方教えていただけませんでしょうか? Function tkorigin(strVal As String, siteiketa As Integer) As String Dim moto As string Dim keta As long Dim i keta = len(strVal) moto = strVal if keta <> siteiketa then if keta < siteiketa then for i = 1 to siteiketa - keta moto = moto & " " next else moto = left(strval,siteiketa) end if end if ' msgbox "[" & moto & "]" tkorigin = moto End Function '--------------------------------------------------------------- Sub tameshi Dim strin As String Dim strout As String strin = Thiscomponent.Sheets(0).getCellByPosition(0,1).String strout = tkorigin(strin, 5) strin = strout ' msgbox "[" & strin & "]" End Sub

  • エクセルマクロに関する質問

    最近、エクセルマクロを始めてたのですが、下記のような状態で困っています。 プログラムを実行した際に、Cells((I1 + I5), I6)のセルに計算式がはいって欲しいのですが、 現状では計算結果が入るだけになってしまっています。 また、単純に文字列に変換してしまうだけだと、変数が邪魔になって式になってくれません。 誰かお分かりになる方がいましたら、教えてください。  Dim I1 As Integer Dim I2 As Integer Dim I3 As Integer Dim I4 As Integer Dim I5 As Integer Dim I6 As Integer Dim I7 As Integer Dim I8 As Integer Cells((I1 + I5), I6) = Cells((I1 + I5) - 2, I6) + Cells((I1 + I5), I6 - 2) - Cells(I1 + I5, I6 - 1)

  • Int((100-1+1)*Rnd+1)

    Dim i As Integer, mS(9) As String For i = 0 To 9 mS(i) = Int((100-1+1)*Rnd+1) Next i 3行目では何が行われているのでしょうか。 易しく、教えて頂けると、助かります。 宜しくお願い致します。

  • VBAにて複数フォルダのエクセルファイルからデータ抽出を行いたいのですが…

    現在、下記の方法で複数のブックからデータを抽出し、 一覧表示をしています。(一覧表示をしているブックを仮にAとします。) 今のままだと、同一フォルダ内のブックしか抽出されません。 これを、サブフォルダまで対象にするには、どうすれば良いのでしょうか? 簡単に例をあげると、 フォルダ(1)の中にAを入れておいて フォルダ(1)の下にあるサブフォルダ(1)、サブフォルダ(2)の中にあるブックからデータの抽出を行いたいのです。 現在つかっているVBAは Sub 抽出用() Dim FName As String Dim Folder As String Dim wb As Workbook Dim i As Integer, j As Integer Application.ScreenUpdating = False Folder = ThisWorkbook.Path & "\" i = 1: j = 1 Worksheets(1).Cells.ClearContents FName = Dir(Folder & "*.xls") Do While FName <> "" If FName <> ThisWorkbook.Name Then Workbooks.Open (Folder & FName) Workbooks(Workbooks.Count).Worksheets(5).Rows("1:1").Copy _ ThisWorkbook.Worksheets(5).Cells(i + 3, 1) Workbooks(Workbooks.Count).Close Application.StatusBar = j & "ファイル処理済み" i = i + 1: j = j + 1 End If FName = Dir() Loop Application.StatusBar = "" Application.ScreenUpdating = True MsgBox ("完了しました") End Sub です。 いいお知恵があれば、よろしくお願い致します。

  • OpenOffice,Basic,Mid()関数にて「無効なプロシージ

    OpenOffice,Basic,Mid()関数にて「無効なプロシージャの呼び出し」のエラー? OpenOffice Basicの初心者です. 「指定ユーザ数の、指定文字数のランダム文字列(a-z,A-Z,0-9)を生成するプログラム」 を作成したのですが, 以下のスクリプトを実行すると,下から6行目にて 「アクションは支援されません。無効なプロシージャーの呼び出し。」 というエラーが,出力されます. 出力されるタイミングは定まっておらず, プログラムが正常に動くときもあれば, 実行初期段階でエラーが出るときもあれば, 実行途中でエラーが出るときもあります. 色々と自分で原因究明してみましたが,原因が分かりません. (どうも Mid()関数 のところでひっかかっているようなのですが・・・.) どなたか、ご教授頂けませんでしょうか? (※添付画像は,出力されるエラー画面です.) ----- 自作スクリプト ここから ----- Sub Main dim doc as object dim sheet as object dim cell as object dim i, j as integer ' for文制御用 dim m, n as integer ' m:何人分か, n:何文字分か dim rand, maxRand as integer dim pw as string '文字列格納用変数 ' 初期化 rand = 0 maxRand = 63 ' 63未満の乱数生成する m= 20 ' 何人分の文字列か n = 15 ' 何文字分の文字列か doc = thiscomponent sheet = doc.sheets (0) smallString = "abcdefghijklmnopqrstuvwxyz" largeString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" numberString = "0123456789" rootString = smallString + largeString + numberString cell = sheet.getcellbyposition(0,0) cell.string = "生成した文字列" for i = 1 to m    pw = ""    for j = 1 to n       rand = int(maxRand * Rnd()) ' 乱数の生成       pw = pw + Mid(rootString, rand, 1)    next    cell = sheet.getCellByPosition(0,i)    cell.string = pw next End Sub ----- 自作スクリプト ここまで -----

  • エクセルのマクロで複数セル指定は?

    以前(7月22日 質問No.936181)の質問でご回答を頂いたマクロなんですが、 Private Sub Worksheet_Change(ByVal Target As Range) Dim MyData As String Dim i As Integer Dim ImaNanji As String Dim SakkiNanji As String Dim ImaNanpun As String Dim SakkiNanpun As String SakkiNanpun = Cells(2, 3).Value ImaNanji = Cells(1, 3).Value ImaNanpun = Mid(ImaNanji, Len(ImaNanji) - 4, 2) If ImaNanpun <> SakkiNanpun Then Application.EnableEvents = False For i = 10 To 2 Step -1 MyData = Cells(i - 1, 2).Value Cells(i, 2).Value = MyData Next i MyData = Cells(1, 1).Value Cells(1, 2).Value = MyData Cells(2, 3).Value = ImaNanpun Application.EnableEvents = True End If End Sub A1のデータをB1からB10に一分おきにつぎつぎに書き込むというものなんですが、ひとつのセルではなく複数のセル(例えばA1からA30の30個のセル)をいっぺんに書き込むようにしたいのですが可能でしょうか? よろしくお願いします。

  • オブジェクト名

    複数のWinsockを使用したいです。 オブジェクト名Winsock1~Winsock6があるとします。 例えば Dim i As Integer Dim strWinsock As String For i = 1 to 6 strWinsock = Winsock & i //処理 Next 上記のようなループで文字列strWinsockを、オブジェクト名として使用することはできないのでしょうか? また、もし他の方法があるようでしたら、教えて下さい。

  • マクロの解読に困っています

    マクロの仕事がきましたが、初めてで苦戦しています。 5冊くらい本を読みながら、今あるマクロの解読をしています。 しかし、次のErrShori:の意味がどうしてもわかりません。 わかる方がいらっしゃいましたらぜひ教えてください。 ErrShori: Open sFilename & ".csv" For Output Shared As #1 その前の文もつけておきます。 Sub Auto_Close() On Error GoTo ErrShori Dim MaxPage As Integer Dim sFilename As String Dim sFilename2 As String Dim i As Integer Dim j As Integer Dim sKensaku As String MaxPage = 0 Do MaxPage = MaxPage + 1 Loop Until Cells(MaxPage * 17 + 21, 1) = "" ChDrive "W" ChDir "W:\" sFilename = Range("O22") sFilename2 = sFilename & ".csv" Workbooks(sFilename2).Close SaveChanges:=False ErrShori: Open sFilename & ".csv" For Output Shared As #1 以上です。 質問の仕方が悪かったらすみません。

  • エクセル マクロ ループ処理の構文について

    お世話になります。エクセル初心者です。 i < j の関係があるときに、それぞれの数値をfor構文でループを回したいです。 i の数値は外部から入力される前提です。 現在、以下のような構文を考えています(istartとiendは外部から決められた数値とします)が、 この場合、jendはiend + 1とすれば良いのですが、jstartはどのように入力すれば良いでしょうか? 修正箇所を指摘(もしくは全文修正)していただけると、非常に助かります。 よろしくお願いいたします。 Sub test() Dim i As Integer Dim j As Integer Dim istart As Integer Dim iend As Integer Dim jstart As Integer Dim jend As Integer istart = 1 iend = 50 For i = istart To iend For j = jstart To jend '実行したい内容 Next Next End Sub

  • 全ての変数を一気にリセットする方法はありますか?

    全ての変数を一気にリセットする方法はありますか? Sub test() Dim i As Integer Dim int1 As Integer Dim int2 As Integer int1 = 1 int2 = 2 For i = 1 To 100 'プロシージャー int1 = 0 'リセット int2 = 0 'リセット Next End Sub みたいなコードがあり、 ループが終わる度に変数をリセットしたい場合 int1 = 0 'リセット int2 = 0 'リセット のように一つ一つ変数に値を入れてリセットするしかないですか? 例のコードは二つしか変数が有りますが 実際100個くらいの変数が有る場合も、 一個一個リセットするしかないのでしょうか? 理想としては、VBAを中断したら全ての変数がリセットされますが それと同じようなコードが有れば、楽だなと思います。

専門家に質問してみよう