■記事リスト / ▼下のスレッド
/ ▲上のスレッド
■1495 / 親記事) |
Excelのシート名の取得方法
|
□投稿者/ 田代正美 -(2024/08/29(Thu) 10:47:34)
| またまたExcelについての質問です。
Excelのワークシート名を取得する方法はないでしょうか? ワークシート名を取得して 桐に渡したいのですが こんなことは可能なのでしょうか?
よろしくお願いします。
|
|
|
▽[全レス9件(ResNo.5-9 表示)]
■1500 / ResNo.5) |
Re[5]: Excelのシート名の取得方法
|
□投稿者/ ONnoji -(2024/09/02(Mon) 06:55:52)
| 2024/09/02(Mon) 08:52:24 編集(投稿者) 2024/09/02(Mon) 08:02:04 編集(投稿者)
> 一括処理で記述しています。 > &シート名="1234" > > エクセル &Excel,&シート名,項目名行=する,表名=表名.tbx,上書き="する",終了状態=&実行リターン > > 通常はワークシート名は1234なのですが > たまに違うときがあるのです。 > その時にエラーになってしまうので、、、
私は[エクセル]コマンドを使ったことがありませんが・・・(^^ゞ
エクセル <ワークブック名>,\ <ワークシート名>,\ 変換範囲 = (<開始セル>,<終了セル>),\ 項目名行 = する|しない,\ 表名 = <文字列型の変数名>,\ 上書き = しない|する,\ 強制改行文字 = <文字>,\ 終了状態 = <変数名>
↑こういうコマンドなんですね。
> エクセル &Excel,&シート名,項目名行=する,表名=表名.tbx,上書き="する",終了状態=&実行リターン
↑このコマンドを実行すると、&実行リターン に
正常終了 → 0(ゼロ) それ以外 → 0(ゼロ)以外の値
が代入されますね。
もしも、&実行リターンの値が0(ゼロ)以外の値の場合の処理はどうされていますか? ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
<ワークブック名>:&Excel の値は常に固定で同じ内容ですか??それとも毎回違いますか?? ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
p.s.
なぜこのような事をお尋ねするかというと、
桐の[シェル実行]コマンドで VBS または Windows PowerShell のスクリプトを実行すれば、
ワークシートの名前を変更することも、ワークシートの名前一覧を調べることも可能です。
しかし、そこまでする必要があるのか否かがクエスチョン?なんです。
だって、&実行リターン の値が0(ゼロ)以外の値の場合の処理をすれば良いだけの事ですから。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
つまり、適切な対処法を書いた文言をオペレータに[メッセージボックス]で見せればよいのですから・・・
if ( &実行リターン = 0 )
通常の処理を実行
else
メッセージボックスを表示
end
しかし、もしも、VBS または Windows PowerShell のスクリプトを絡ませると、
現在使用されている一括処理の内容がややこしくなるので、プログラムのメンテナンス(保守)が大変になるわけです。
そこまで、リスクを負ってまでして、VBS または Windows PowerShell のスクリプトを利用する価値はあるのでしょうか?
私( ONnoji )的には、VBS または Windows PowerShell のスクリプトを利用しない方がベターだろうと思えます。
|
|
|
■1501 / ResNo.6) |
Re[6]: Excelのシート名の取得方法
|
□投稿者/ ONnoji -(2024/09/02(Mon) 13:13:05)
| 2024/09/02(Mon) 21:00:35 編集(投稿者)
> つまり、適切な対処法を書いた文言をオペレータに[メッセージボックス]で見せればよいのですから・・・ > > if ( &実行リターン = 0 ) > > 通常の処理を実行 > > else > > メッセージボックスを表示 > > end > > しかし、もしも、VBS または Windows PowerShell のスクリプトを絡ませると、 > > 現在使用されている一括処理の内容がややこしくなるので、プログラムのメンテナンス(保守)が大変になるわけです。 > > そこまで、リスクを負ってまでして、VBS または Windows PowerShell のスクリプトを利用する価値はあるのでしょうか? > > 私( ONnoji )的には、VBS または Windows PowerShell のスクリプトを利用しない方がベターだろうと思えます。
一括処理を例に、エラーメッセージを簡単に表示する例を以下に示しますので参考にしてください。 ・・・・・・・・・・・・・・・・・
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
** begin of program
変数宣言 固有,文字列{ &Excel = "hogehoge.xlsx" } 変数宣言 固有,文字列{ &シート名 = "1234" }
変数宣言 固有,文字列{ &gMsg } 変数宣言 固有,整数 { &gErrorRefErrno } 変数宣言 固有,長整数{ &gErrorRefLineno } 変数宣言 固有,文字列{ &gErrorRefCmdname } 変数宣言 固有,文字列{ &gErrorRefErrmsg } 変数宣言 固有,文字列{ &gErrorRefDetail }
** 変数の値を未定義値に初期化する &gErrorRefErrno = #u &gErrorRefLineno = #u &gErrorRefCmdname = #u &gErrorRefErrmsg = #u &gErrorRefDetail = #u
エラー処理 手続き名 = "prcOnErrorExcellCommand" *エクセル &Excel,&シート名,項目名行=する,表名="表名.tbl",上書き="する",終了状態=&実行リターン エクセル &Excel,&シート名,項目名行=する,表名="表名.tbx",上書き="する" エラー処理 /* 解除を忘れずに */
if ( &gErrorRefErrmsg = #u ) /* エラーメッセージが代入されていなければ */
** 通常処理
else
** エラーの場合に else を実行
** エラー番号・エラーメッセージ・エラーの詳細・一括処理・行番号をメッセージボックスで表示する
&gMsg = "[エクセル]コマンドの実行に失敗しました。" &gMsg = &gMsg + "\n\nエラー番号:" + #cond( &gErrorRefErrno > 0, "KU", 1, "KD" ) + #str( &gErrorRefErrno ) &gMsg = &gMsg + "\n\nエラーメッセージ:" + &gErrorRefErrmsg &gMsg = &gMsg + "\n\nエラーの詳細:" + &gErrorRefDetail &gMsg = &gMsg + "\n\n一括処理名:" + &gErrorRefCmdname &gMsg = &gMsg + "\n\n行番号:" + #str( &gErrorRefLineno )
メッセージボックス "タイトル", &gMsg, アイコン = E, ボタン指定 = 1, 制御文字展開 = する
end
終了
** end of program
手続き定義開始 prcOnErrorExcellCommand( ) 変数宣言 自動,文字列{ &icon, &title = "prcOnErrorExcellCommand( )", &gsg }
エラー処理 /* ここでも解除を忘れずに */
** エラー番号・エラーメッセージ・エラーの詳細・一括処理・行番号を固有変数に代入する
&gErrorRefErrno = &errno &gErrorRefLineno = &lineno &gErrorRefCmdname = &cmdname &gErrorRefErrmsg = &errmsg &gErrorRefDetail = &detail
手続き定義終了
p.s.
[エラー処理]コマンドは、非常に使い道が限られています。
なので、むやみやたらと[エラー処理]コマンドを使うのは慎んでください。
<参考>
桐の釣魚大全のトップ > 目からウロコのデータベース桐プログラミング入門 パート2 より転載 http://silicon7565.html.xdomain.jp/primer/primer_side_reader_part2.html#section13-2
13.2 エラー処理コマンドはあるけれど エクセルのVBAを知っている人の場合、VBAの[ On Error ステートメント]に相当する桐のコマンドを使いたいという思う人が現れても不思議ではありません。 実は、桐には[エラー処理]というコマンドがあります。※桐9-2012 までは非公開のコマンドでした。 しかし、結論から申し上げると、桐でこの[エラー処理]コマンドを実行する必要はまずありません。 その理由は、多くのコマンドにおいて、そのコマンドが実行出来たか否かの結果を変数に格納する[終了状態 = <変数名>]パラメータが用意されているからです。 また、使用するファイルがディスクに存在しなかった場合の対処に使用するのもNGです。 その場合には、#ファイルサイズ( )という関数を使用して判定できますゾ。(^^ok なによりも厄介なのは[エラー処理]コマンドを使うと、単純なスペルミスによる文法エラーも拾ってしまうのです。 そうなると、何が何だかサッパリ分からなくなってプログラムのテスト(デバッグ)どころではなくなってしまいます。 ということで、初級者は[エラー処理]コマンドを使わないと覚えてください。
p.p.s.
> 桐の中で処理できるようなことを考えます。
「エラーする前に先回りして処置したい」という気持ちは確かによく分かります。
しかし、今回の場合には「エラーする前に先回りして処置する」という行為が、桐の単独で出来ません。
なので、先回りせずに、素直に「エラーまんねん。エラーでっせ。エラーちゅ−てんねん。エラーまんにゃわ。!」と表示することで、
現行で使用している一括処理のメンテナンス(保守)が容易になると思いますよ。
|
|
874×515 => 250×147
1725278382.jpg/84KB
|
|
■1502 / ResNo.7) |
Re[7]: Excelのシート名の取得方法
|
□投稿者/ 田代正美 -(2024/09/05(Thu) 08:34:12)
| ONnojiさん
ありがとうございます。
勉強します。
またわからな事がでましたら よろしくお願いします。
|
|
|
■1503 / ResNo.8) |
Re[8]: Excelのシート名の取得方法
|
□投稿者/ ONnoji -(2024/09/05(Thu) 11:29:53)
| > 勉強します。
サンプルを再掲載します。
新しく一括処理を作って、以下の内容をコピー&ペーストしてください。
こうして作った一括処理を実行すると、より具体的に分かると思いますよ
このサンプルはコピペだけで動くように作ってありますよ。
** begin of program
変数宣言 固有,文字列{ &Excel = "hogehoge.xlsx" } 変数宣言 固有,文字列{ &シート名 = "1234" }
変数宣言 固有,文字列{ &gMsg } 変数宣言 固有,整数 { &gErrorRefErrno } 変数宣言 固有,長整数{ &gErrorRefLineno } 変数宣言 固有,文字列{ &gErrorRefCmdname } 変数宣言 固有,文字列{ &gErrorRefErrmsg } 変数宣言 固有,文字列{ &gErrorRefDetail }
** 変数の値を未定義値に初期化する &gErrorRefErrno = #u &gErrorRefLineno = #u &gErrorRefCmdname = #u &gErrorRefErrmsg = #u &gErrorRefDetail = #u
エラー処理 手続き名 = "prcOnErrorExcellCommand" *エクセル &Excel,&シート名,項目名行=する,表名="表名.tbl",上書き="する",終了状態=&実行リターン エクセル &Excel,&シート名,項目名行=する,表名="表名.tbx",上書き="する" エラー処理 /* 解除を忘れずに */
if ( &gErrorRefErrmsg = #u ) /* エラーメッセージが代入されていなければ */
** 通常処理
else
** エラーの場合に else を実行
** エラー番号・エラーメッセージ・エラーの詳細・一括処理・行番号をメッセージボックスで表示する
&gMsg = "[エクセル]コマンドの実行に失敗しました。" &gMsg = &gMsg + "\n\nエラー番号:" + #cond( &gErrorRefErrno > 0, "KU", 1, "KD" ) + #str( &gErrorRefErrno ) &gMsg = &gMsg + "\n\nエラーメッセージ:" + &gErrorRefErrmsg &gMsg = &gMsg + "\n\nエラーの詳細:" + &gErrorRefDetail &gMsg = &gMsg + "\n\n一括処理名:" + &gErrorRefCmdname &gMsg = &gMsg + "\n\n行番号:" + #str( &gErrorRefLineno )
メッセージボックス "タイトル", &gMsg, アイコン = E, ボタン指定 = 1, 制御文字展開 = する
end
終了
** end of program
手続き定義開始 prcOnErrorExcellCommand( ) 変数宣言 自動,文字列{ &icon, &title = "prcOnErrorExcellCommand( )", &gsg }
エラー処理 /* ここでも解除を忘れずに */
** エラー番号・エラーメッセージ・エラーの詳細・一括処理・行番号を固有変数に代入する
&gErrorRefErrno = &errno &gErrorRefLineno = &lineno &gErrorRefCmdname = &cmdname &gErrorRefErrmsg = &errmsg &gErrorRefDetail = &detail
手続き定義終了
|
|
|
■1504 / ResNo.9) |
Re[9]: Excelのシート名の取得方法
|
□投稿者/ 田代正美 -(2024/09/06(Fri) 09:11:44)
| ONnojiさん
ありがとうございます。
作成いただいた一括処理でわからない点がでてくるかとおもいますので その折はよろしくお願いいたします。
|
|
|
■記事リスト /
レス記事表示 →
[親記事-9]
|