4月のカレンダー
 123456
78910111213
14151617181920
21222324252627
282930    
最近の日記
全体の新着
各月の日記
ユーザーRSS
Pitekanさんの公開日記
02月01日
02:25

概要
 Calcファイル名を「セル⇔ダイアログ.ods」とし、マクロコード(Module1)やダイアログ(Dialog1)をその中のStandardライブラリに作成します。

 CalcのSheet(1)[Sheet2=表2]のC列に書き込まれたデータ(string)を
Dialog1のListBox1に表示します。次にTextField1に書き込んだ
セル番地(Sheet(0)[Sheet1=表1])に、ListBox1で指定した
アイテム(データ)を書き込みます。
Dialog1のCloseボタンで、ダイアログが消え、プログラムが終了します。
(Excel_VBAと同様 ダイアログの表示中にはセルに直接アクセスできない)
詳細説明
1. CalcのSheet(0)[Sheet1=表1]にPush Buttonを一つ作成し、
 マクロコードのSub ShowDlg_Cells_to_Listを割り当てます。(注)
 表示(View)⇒ ツールバー(Toolbars)⇒ フォームコントロール(Form Controls) ⇒ デザインモード(Design Mode On) ⇒ボタン(Push Button)⇒(矩形描画)
 Push Buttonの上で右クリック。コントロール(Control..)⇒ Eventsタブ
 ⇒ 作動時(When initiating) ...(Click Button)
 ⇒ Macro...でCalcファイル名「セル⇔ダイアログ.ods」⇒Standard
 ⇒ Module1⇒Sub ShowDlg_Cells_to_Listを選択
 [vnd.sun.star.script....が登録される]
 右クリック Control..⇒全般タブ(General)のタイトル(Label)は「ダイアログ表示」とした。(任意)

2. 図1はダイアログ作成画面 Command Button1 のプロパティを表示。
 Tools⇒ Macros⇒ Organize Dialogs(ダイアログの管理)
 ⇒ セル⇔ダイアログ.ods⇒ Standard⇒ New(新規作成)⇒名前(Dialog1) OK⇒ Edit(編集)
 Dialog1にListBox1と TextField1を各1つ、Command Buttonを2つ作成します。
 「選択アイテムを指定セルに入れる」と[Dialog1の]「Close」の2つ。
 (他にTextField1の説明のためにLabel1=「Sheet1:セル指定」を作成)
3. マクロコードは下記。
 Command Button1「選択アイテムを指定セルに入れる」にはSub Dialog_to_Cellを指定し、
 Command Button2「Close」にはSub CloseDlgを指定します。
 ダイアログ編集画面でCommand Buttonを選択して右クリック プロパティー(Properties...)
 で1. での作業と同様にマクロを指定する。

4. ダイアログ内の各アイテムの作成順に、マクロ実行時のタブキー(≒)で
 各アイテムがFocusされます。これを変更するときは、ダイアログ編集画面で
 各アイテムの上で右クリック。Properties⇒ General⇒ Tab order(タブの順序)
 Tab order(タブの順序)の数値は各アイテムがFocusされる順。
 Dialog1の場合は0~4までの数値。ただしLabel1はFocusされない。
 一つのアイテムのTab order(タブの順序)を変更すると、他のアイテムの
 数値が自動調整される。
 なおコマンドボタン上のラベルの末尾に(A)と(B)が自動で追加されます。
 これはショートカットキーです。A, Bの順序は「タブの順序」に従います。

5. エラー処理
 TextField1の内容がセル指定で無い場合は
 「Cell指定の間違い 再入力してください」とエラーメッセージを表示します。

6. 5. のエラー発生の場合にTextField1がFocusされるようにしました。
 エラー無しの場合はCommand Button2「Close」にFocusが移ります。
以上 解説終わり

追記 マクロの初歩の初歩
Calcの初期設定はSecurityのため、マクロの実行を不可に設定しています。
マクロ実行を可能にするためには
Tools⇒ Options⇒ Security⇒ 'Macro Security..' button⇒
click 'Medium' ラジオボタン(OOo英語版ではOption Button)⇒ OK⇒ OK⇒ restart Calc
'Enable Macros' button

注: この作業はマクロコード(下記)作成後になります。
以下はBasic code
REM ***** BASIC *****
Option Explicit
Dim oDlg As Object
Dim myRng As Object

Sub ShowDlg_Cells_to_List
Dim sSourceCellAdd As String
Dim sStr1 As String
DialogLibraries.LoadLibrary("Standard")
oDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1 )
Dim sCellValue1 As String
Dim vCounter As Long
vCounter = -1
Do
vCounter = vCounter + 1
sStr1 = Ltrim(Str(vCounter + 1))
sSourceCellAdd = "C" & sStr1
myRng =_
ThisComponent.Sheets(1).getCellRangeByName(sSourceCellAdd)
sCellValue1 = myRng.String
If Len(sCellValue1) < 1 Then Exit Do
With oDlg.getControl("ListBox1")
.AddItem (sCellValue1, vCounter)
End With
Loop

oDlg.Execute
oDlg.dispose
End Sub

Sub CloseDlg
oDlg.endExecute
End Sub

Sub Dialog_to_Cell
Dim sCellName As String
Dim sCellValue As String
Dim oTextField As Object

With oDlg.getControl("ListBox1")
If .SelectedItemPos = -1 Then
MsgBox "項目が選択されていません"
Else
sCellValue = .SelectedItem
End If
End With

oTextField = oDlg.getControl("TextField1")
sCellName = oTextField.Text
On Error Goto CellAddressMiss
myRng = ThisComponent.Sheets(0).getCellRangeByName(sCellName)
myRng.clearContents(31)
myRng.String = sCellValue
Exit Sub
CellAddressMiss:
On Error Goto 0
MsgBox "Cell指定の間違い 再入力してください"
oDlg.getControl("TextField1").setFocus

End Sub
公開日記トップへ
oooug-jp SNS

●サイドメニュー

  • 公開日記
  • >公開日記はログインしなくても読めます

http://www.ospn.jp/

inetd