ラベル Excel の投稿を表示しています。 すべての投稿を表示
ラベル Excel の投稿を表示しています。 すべての投稿を表示

2010年4月13日火曜日

OpenOffice.org Basic マクロ で 連想配列 をやってみた!( aName.Add 1, Cells(nRange, m_nStartRange).Value

過去にエクセルのマクロを使っていたツールを、OpenOfficeに改修した。

Novellが出してる派生OpenOfficeはVBA互換だが、本家オリジナルはVBAと完全な互換性はないので、めんどくせーなーと思いつつOOoBasicで書き直した。

※会社にはNovellのでいいじゃんと訴えたが、派生はダメなんだと。

OOoBasicはVBAとちがって圧倒的にサンプルが少ない。
今回は連想配列に苦労した。
VBAの連想配列も、あまりスマートではないが、エクセル版は「Collection」を使っていた。

Dim aName As New Collection
aName.Add 1, Cells(1, 1).Value

OpenOfficeでどうやろうかとググったがなかなかない。
頭をかかえていると、VBA向けのCreateObjectを使う連想配列を見つけた。

VBで連想配列

CreateObject で 外部APIを呼ぶ・・・
ということは、OpenOfficeがCreateObjectを使えればいいわけか。

で、ググったが出てこない。OpenOfficeのhelpを探したら、あった!

'UNO オブジェクトを作成します。Windows では、OLE オブジェクトも作成できます。
'このメソッドにより、パラメータとして渡されるタイプのインスタンスが作成されます。
'構文:
oObj = CreateObject( type )

で、やってみたら・・・
できました。できましたよ。ふーーつかれた。

REM  *****  BASIC  *****
Option Explicit

Sub Macro1
    ' 宣言部
    Dim oSheet As Object
    Dim oCell As Object
    Dim oObj As Object

    ' 初期化
    oSheet = ThisComponent.Sheets(0)
    oObj = CreateObject("Scripting.Dictionary")
    oCell = oSheet.getCellByPosition(1,1)

    ' もし配列キーが存在したら
    If oObj.Exists(oCell.getString) = True then
        oObj.Remove(oCell.getString)    ' 削除して
        oObj.Add(oCell.getString,5)     ' 作成
    Else
     oObj.Add(oCell.getString, 1)    ' 作成
    End If

    ' 値を入れる
    oSheet.getCellByPosition(2,1).String = oObj.Item(oCell.getString)

    MsgBox  "完了しました"
End Sub

まーこうしてすこしずつでも使えるようになれば、いつかは使いこなせるさ。

免責
この記事やプログラムによって生じた事故・損害などは一切保証致しません。ご自身の責任でご使用ください。

子育てブログ「おとう日記」はじめました。
興味ある方、是非ご覧下さい!
おとう日記

コピペプログラマの倉庫を作りました。
サンプルプログラムなど置いておきますのでお立ち寄り下さい。
コピペプログラマ倉庫


良ければ↓投票お願いします↓ m(._.)m ペコッ
人気ブログランキングへ

2009年10月8日木曜日

エクセルのマクロが、OpenOffice で開いて保存するだけで、、、壊れる

エクセルで組み込んだマクロを誤ってOpenOfficeで開いてしまった。

つい癖で保存したら、VBAで組んだマクロが・・・
動かなくなってしまう。

修正してなくてもなるから怖い。
つまり、単に開いて保存して閉じるだけで壊れる。

ソースコードは問題ないのだが、どうも「ボタン」などのObjectが異質のものに変換されてしまっているようで、
メソッドへのリンク(関連付け)が外れてしまう事が原因だ。

めんどくさいが、ボタンを作り直し、名前を過去の名前と同じものにすれば、紐付きが復旧して元に戻せる。


免責
この記事やプログラムによって生じた事故・損害などは一切保証致しません。ご自身の責任でご使用ください。

子育てブログ「おとう日記」はじめました。
興味ある方、是非ご覧下さい!
おとう日記

コピペプログラマの倉庫を作りました。
サンプルプログラムなど置いておきますのでお立ち寄り下さい。
コピペプログラマ倉庫


良ければ↓投票お願いします↓ m(._.)m ペコッ
人気ブログランキングへ

2009年7月31日金曜日

エクセル(Excel)プロジェクトがロックされています

エクセルを使っていて、VBAのエディタを開こうとしたら

「プロジェクトが表示できません」のエラーが出た。

シート、ブックの保護はしていないし。。。
うんうん唸って探すこと5分。

共有していたからだった。

「複数のユーザで使用する」のチェックを外したらOK

免責
この記事やプログラムによって生じた事故・損害などは一切保証致しません。ご自身の責任でご使用ください。

子育てブログ「おとう日記」はじめました。
興味ある方、是非ご覧下さい!
おとう日記

コピペプログラマの倉庫を作りました。
サンプルプログラムなど置いておきますのでお立ち寄り下さい。
コピペプログラマ倉庫


良ければ↓投票お願いします↓ m(._.)m ペコッ
人気ブログランキングへ

2009年3月2日月曜日

#DIV/0!のエラーを非表示にする

#DIV/0!の除算エラーを非表示にする

=IF(ISERROR(C4/B4),"",C4/B4)

・・・詳細は下記参照の事




免責
この記事やプログラムによって生じた事故・損害などは一切保証致しません。ご自身の責任でご使用ください。

子育てブログ「おとう日記」はじめました。
興味ある方、是非ご覧下さい!
おとう日記

コピペプログラマの倉庫を作りました。
サンプルプログラムなど置いておきますのでお立ち寄り下さい。
コピペプログラマ倉庫


良ければ↓投票お願いします↓ m(._.)m ペコッ
人気ブログランキングへ