〜 ソフトウェア 〜
シートの追加・削除・選択とシート名の取得と変更

HSP3のサンプルフォルダに少しだけエクセル操作を行うスクリプトファイルがありますが、
エクセル操作を行うのに必要最低限な極一部のものしか紹介されておらず、
また、そのままでは自分のスクリプトに組み込みにくい形でもあるので、
当サイトで汎用的なTipsモジュールとして紹介します。

紹介しているモジュールは、COMオブジェクト型変数を使用していますので、
RiffRaffさん作成、ちょくとさん引継のHSP非公式LOLLIPOPモジュールを用いれば、
HSP2でもサンプルと似た処理が可能になると思われますが、
LOLLIPOPは標準モジュールではないのでHSP3以上のみ対象としたTipsとしています。

当Tipsでは、シートの追加・削除・選択、シート名の取得・変更についてのみを紹介します。
サンプルで使用されている、その他の処理については別途用意したTipsを参照してください。

新しいシートを追加するにはxlAddSheetを使います。
追加すると共にシート名を設定する場合はパラメータに対象文字列を指定してください。
「Sheet1」等のデフォルト名称で良い場合は空文字指定で構いません。

既存のシートを削除するにはxlDelSheetを使います。
パラメータに削除するシート名を指定してください。

既存のシートのうちの1つをアクティブ化するにはxlSelSheetを使います。
パラメータに選択するシート名を指定してください。

もし、削除や選択対象のシート名がわからない場合は、
用意したxlGetSheetNameで1番から始まるシート番号を指定して名称を得ることができます。
また、xlGetSheetNamesで文字列型配列変数にシート名一覧をセットすることもできます。

設定されているシート名を別の名称に変更したい時はxlSetSheetNameを使います。
ざっと紹介だけしましたが、具体的な使い方は下記のサンプルを参照してください。
	

xlInit 表示モード
表示モードエクセルを利用する際の表示モード(0:非表示, 1:表示)を指定する。

xlNew
[パラメータなし]現在のブックに新しいシートを追加するだけである為、パラメータは必要ない。

xlClose 保存フラグ
保存フラグ保存モード(0:非保存, 1:強制保存)を指定して現在のブックを終了する。

xlQuit
[パラメータなし]エクセルを終了させるだけである為、パラメータは必要ない。

xlSelSheet シート名
シート名選択対象シートを指定する。

xlAddSheet シート名
シート名シート追加時に付けたい名前を指定する。

xlDelSheet シート名
シート名削除対象シート名を指定する。

シート数 = xlGetSheetNum( )
シート数取得したシート数の受取先を指定する。
[パラメータなし]シート数を取得するだけである為、パラメータは必要ない。

シート名 = xlGetSheetName(シート番号)
シート名取得したの受取先を指定する。
シート番号1番から始まるシート番号を指定する。

xlGetSheetNames シート名格納配列
シート名格納配列全シート名を格納する文字列型配列変数を指定する。
尚、シートの総数がstatに返る。

xlSetSheetName 新シート名, 旧シート名
新シート名変更後のシート名を指定する。
旧シート名変更対象のシート名を指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#module
*xlerror
	xlQuit
	dialog "エラーが発生した為、終了します", 1
	end

#deffunc xlInit int hide
	onerror *xlerror
	newcom xlApp, "Excel.Application"
	xlApp("Visible") = (hide = 0)
	xlApp("DisplayAlerts") = 0 
	xlBooks = xlApp("WorkBooks")
	return

#deffunc xlNew
	xlBook = xlBooks("Add")
	return

#deffunc xlQuit
	if vartype(xlSheet) = vartype("comobj") : delcom xlSheet
	if vartype(xlBook) = vartype("comobj") : delcom xlBook
	if vartype(xlBooks) = vartype("comobj") : xlBooks -> "Close" : delcom xlBooks
	if vartype(xlApp) = vartype("comobj") : xlApp -> "Quit" : delcom xlApp
	return

#deffunc xlSelSheet str shname
	xlSheet = xlBook("Worksheets", shname)
	xlSheet -> "Select"
	return

#deffunc xlAddSheet str shname, local s, local xlSheets
	xlSheets = xlBook("Sheets")
	xlSheets -> "Add"
	xlSheet = xlBook("ActiveSheet")
	if shname ! "" : xlSetSheetName shname, ""
	return

#deffunc xlDelSheet str shname
	if shname ! "" : xlSheet = xlBook("Worksheets", shname)
	xlSheet -> "Delete"
	return

#defcfunc xlGetSheetNum local xlSheets
	xlSheets = xlBook("Sheets")
	return xlSheets("Count")

#defcfunc xlGetSheetName int shno, local xlSheets
	xlSheets = xlBook("Sheets")
	xlSheet = xlSheets("Item", shno)
	return xlSheet("Name")

#deffunc xlGetSheetNames array shname, local i
	i = xlGetSheetNum()
	repeat i
		shname.cnt = xlGetSheetName(cnt + 1)
	loop
	return i

#deffunc xlSetSheetName str newname, str shname
	if shname ! "" : xlSheet = xlBook("Worksheets", shname)
	xlSheet("Name") = newname
	return
#global

	sdim sh, 16, 5
	gsel 0, 2
	mes "エクセル起動"
	xlInit
	xlNew
	wait 100
	mes "シート追加(シート名:ultimate)"
	wait 100
	xlAddSheet "ultimate"
	wait 100
	mes strf("シート(%s)を%sに変更", xlGetSheetName(2), "hspbc")
	wait 100
	xlSetSheetName "hspbc", xlGetSheetName(2)
	wait 100
	mes "シート(ultimate)削除"
	wait 100
	xlDelSheet "ultimate"
	if xlGetSheetNum() >= 2 {
		wait 100
		mes strf("シート(%s)を選択", xlGetSheetName(2))
		wait 100
		xlSelSheet xlGetSheetName(2)
		wait 100
	}
	mes "エクセル終了"
	wait 100
	xlQuit
	wait 300
	end