HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

《 桐に関する質問は、「桐質問掲示板」からどうぞ 》
■ 24時間以内に作成されたスレッドは New で表示されます。
■ 24時間以内に更新されたスレッドは UpDate で表示されます。

記事リスト ( )内の数字はレス数
Nomal入門講座 改定版(0) | NomalExcelのシート名の取得方法(9) | NomalExcelのシート名の変更(4) | Nomal「目からウロコの・・・パート2」を公開しました。(32) | NomalFW_チェックボックスINF_Framework(2) | Nomal(仮題)目からウロコの「桐プログラミング」入門(9) | Nomal蔵書物品管理 正式バージョン(4) | Nomal桐sについて(3) | Nomal桐の正規表現(0) | Nomalコマンドボタンの機能名・機能パラメータの一覧表を掲載しました(0) | NomalINF_Framework の入門講座を公開しました(0) | NomalINF_Framework 第3.3版 改訂版(MkII) の解説(0) | Nomalイベント処理の整形ユーティリティについて(0) | Nomalアイテム登録が要らないランチャー(0) | Nomal電子カルテ、レセコン(0) | Nomalいつも、ありがとうございます。(0) | Nomal「新 フォームアプリケーション入門 §1」をアップロードしました。(2) | NomalINF_カードには INF Framework の最新版が含まれています(0) | Nomalデートピッカーの修正情報(0) | Nomaltoy_launcher の解説に加筆しました(0) | Nomal蔵書物品管理 ベータバージョン−2(3) | NomalISBNでゲットだぜ!(25) | Nomal断捨離(続) CD・DVD編(3) | Nomal先発品後発品(1) | Nomal岡崎市立中央図書館事件(1) | Nomal書籍管理って TRC で無いの?(0) | NomalINF Framework 第3.3版(1) | Nomal断捨離(6) | NomalWindows10 2004 と桐10(s)(2) | Nomalキーダウンイベントを簡単に(*ショートカットキーも登録できます)(0) | Nomal局所変数の受け渡し(0) | Nomalファイル管理(0) | Nomalダブルクリック(0) | Nomal現在の状況で(4) | Nomal最新の Office (Excel) で 桐9x のクロスエクセル機能を有効にする方法!?(1) | Nomal表で設定した項目の表示条件をフォームに反映する(0) | NomalINF_Framework 第3.2版 Rev.238(0) | Nomalシームレス電卓機能(0) | Nomal入力支援ボタンで都道府県ピッカーから入力する(0) | Nomal入力支援ボタンでDatePickerから日付入力(0) | Nomal入力支援ボタンで電卓を呼び出して結果を反映(0) | Nomalコマンドボタンのオートリピート(0) | Nomalスピンボタンの仕様をアップしました(0) | Nomal入力支援ボタンのリストを登録、更新するサンプル(0) | Nomalランチャーでファイルを開く(0) | Nomal局所変数の保存(0) | Nomalプルダウンメニューの解説をアップしました(0) | NomalクラシックINF_Frameworkのマニュアル完成(0) | Nomaltoy_launcher3(0) | Nomalファイル管理を桐で作成しました。(9) | NomalオートINF_Framework(0) | Nomalエクセルで計算結果エラー(3) | Nomal桐の記事(0) | Nomal桐のプログラミング入門(2) | Nomal新元号の桐対応は(8) | Nomal拙作:HPのリニューアルに関して(4) | Nomal桐と外部DB(10) | NomalSQL Server 2017 Express か Developer のインストールについて(7) | Nomalこのページって何!?(8) | Nomal桐をタブレットにインストールしたい(6) |



■記事リスト / ▼下のスレッド
■1505 / 親記事)  入門講座 改定版
□投稿者/ AKome -(2024/10/18(Fri) 23:59:02)
    【あこめの桐のプログラミング入門】
    http://akome409102.html.xdomain.jp/index.html

    2019年4月に公開した入門講座を全面改定しました。
    桐s-2024LTに合わせて、5年半ぶりの全面改定ということになります。

    また今回は番外編として
    入力支援ボタンのドロップダウンリストに配列変数を利用するサンプル
    トレース出力のサンプルも作成してみました。

    興味のある方はご覧になってみてください (^_^)v
引用返信 [メール受信/OFF]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■1495 / 親記事)  Excelのシート名の取得方法
□投稿者/ 田代正美 -(2024/08/29(Thu) 10:47:34)
    またまたExcelについての質問です。

    Excelのワークシート名を取得する方法はないでしょうか?
    ワークシート名を取得して
    桐に渡したいのですが
    こんなことは可能なのでしょうか?

    よろしくお願いします。
引用返信 [メール受信/OFF]

▽[全レス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 のスクリプトを利用しない方がベターだろうと思えます。


引用返信 [メール受信/OFF]
■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
引用返信 [メール受信/OFF]
■1502 / ResNo.7)  Re[7]: Excelのシート名の取得方法
□投稿者/ 田代正美 -(2024/09/05(Thu) 08:34:12)
    ONnojiさん

    ありがとうございます。

    勉強します。

    またわからな事がでましたら
    よろしくお願いします。
引用返信 [メール受信/OFF]
■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

    手続き定義終了

引用返信 [メール受信/OFF]
■1504 / ResNo.9)  Re[9]: Excelのシート名の取得方法
□投稿者/ 田代正美 -(2024/09/06(Fri) 09:11:44)
    ONnojiさん

    ありがとうございます。

    作成いただいた一括処理でわからない点がでてくるかとおもいますので
    その折はよろしくお願いいたします。
引用返信 [メール受信/OFF]

■記事リスト / レス記事表示 → [親記事-9]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■1490 / 親記事)  Excelのシート名の変更
□投稿者/ 田代正美 -(2024/08/06(Tue) 17:24:09)
    桐ではないのでこちらに書き込みさせていただいていいのでしょうか?

    ExcelのA.xlsxのファイルを桐Excelブリッジで桐に変換したいのですが
    毎回ワークシート名がまちまちなのです。
    Excelがまったくわからないのです。

    桐ではワークシート名の変更はできないので
    Excelで変更する方法はあるのでしょうか?

    どなたかご指導いただけるとありがたいのですが
引用返信 [メール受信/OFF]

▽[全レス4件(ResNo.1-4 表示)]
■1491 / ResNo.1)  Re[1]: Excelのシート名の変更
□投稿者/ ONnoji -(2024/08/08(Thu) 12:34:06)
    2024/08/09(Fri) 13:19:16 編集(投稿者)

    > 桐ではワークシート名の変更はできないので
    > Excelで変更する方法はあるのでしょうか?

    エクセルのVBAを使う例はネットをググればたくさん見つかると思いますよ。

    VBAの他に Windows PowerShell でも可能だそうですよ。

    以下は、たくさんあるネット記事の一例です。

    > windows環境で Excel をプログラム言語で操作する方法に VBA がよく紹介されてますが、
    > Windows PowerShell でもお手軽に操作することが可能なので、紹介していきたいと思います。

    Windows PowerShell を使って Excel を操作する - シート操作編 | MSeeeeN
    https://mseeeen.msen.jp/sheets-operation-of-excel-with-powershell/

    PowerShell で Excel をいじる方法の備忘録 #初心者 - Qiita
    https://qiita.com/23fumi/items/aa65ffa2098509337d33

    p.s.

    VBAのほかにVBS( VBScript )も候補になりますが、かなり将来的な話ですが・・・

    VBScriptが非推奨になった?その理由と代替言語を解説
    https://and-engineer.com/articles/ZTKJXhIAACcA5gCV

    その点、後発の Windows PowerShell の方が心配がいりません。

    私( ONnoji )的には、これからというのであれば、Windows PowerShell をお勧めしますよ。

    p.p.s.

    ダウンロードコーナーに掲載されている拙作では、UTF8 → UTF16 / ANSI 等の文字コード変換にバッチ( .bat )で PowerShell を実行していますよ。

    #207 God_Excel_Reader 第1.1版 for 桐10s/ 桐sSL
    God_Excel_Reader.kex
    手続き名:prcBatPowershellReplaceCreate

    #206 イベント処理の整形ユーティリティ 第 3.91 版  for 桐10 / 桐10s / 桐sSL
    utx_list3.kex
    手続き名:prcBatPowershellReplaceCreate



引用返信 [メール受信/OFF]
■1492 / ResNo.2)  Re[1]: Excelのシート名の変更
□投稿者/ ななーし -(2024/08/09(Fri) 08:12:29)
    2024/08/09(Fri) 08:13:34 編集(投稿者)

    VBSで実施できます。
    なお、VBSのコードは自分が作らなくとも作成したい要望をChatGPTに依頼すれば以下のようにつくってくれます。

    VBSはメモ帳に以下コードを保存し、保存時のファイル名を○○〇.vbsにすればOKです。
    検索するまたはChatGPTに聞いてみてください。

    Dim objExcel, objWorkbook, objSheet
    Dim filePath
    Dim i

    ' ドラッグアンドドロップされたファイルのパスを取得
    If WScript.Arguments.Count > 0 Then
    filePath = WScript.Arguments(0)
    Else
    WScript.Echo "ドラッグアンドドロップされたファイルがありません。"
    WScript.Quit
    End If

    ' Excelアプリケーションを作成
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = False
    objExcel.DisplayAlerts = False

    ' Excelファイルを開く
    Set objWorkbook = objExcel.Workbooks.Open(filePath)

    ' シート名を変更
    i = 1
    For Each objSheet In objWorkbook.Sheets
    objSheet.Name = "AAA" & IIf(i > 1, i, "")
    i = i + 1
    Next

    ' Excelファイルを保存して閉じる
    objWorkbook.Save
    objWorkbook.Close False

    ' Excelを終了
    objExcel.Quit

    ' オブジェクトの解放
    Set objSheet = Nothing
    Set objWorkbook = Nothing
    Set objExcel = Nothing

    ChatGPT依頼文
    次のVBSプログラムを作成してください。
    VBSファイルにドロップアンドドロップしたEXCELファイルを編集します。
    編集内容はEXCELファイルを開き、シート名を「AAA」に変更。変更後に閉じます
    シートが複数ある場合はAAA2、AAA3とします。
引用返信 [メール受信/OFF]
■1493 / ResNo.3)  Re[2]: Excelのシート名の変更
□投稿者/ 田代正美 -(2024/08/10(Sat) 09:08:44)
    ONnojiさん

    ありがとうございます。
    Excelがまったくわからないので
    勉強します。

    また質問するかもしれませんが
    よろしくお願いいたします。
引用返信 [メール受信/OFF]
■1494 / ResNo.4)  Re[2]: Excelのシート名の変更
□投稿者/ 田代正美 -(2024/08/10(Sat) 09:10:33)
    ななーしさん

    ありがとうございます。
    Excel全くわからないので勉強します。

    わからないことが出てくるとおもいますので
    その時にはまたよろしくお願いいたします。
引用返信 [メール受信/OFF]

■記事リスト / レス記事表示 → [親記事-4]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■1445 / 親記事)  「目からウロコの・・・パート2」を公開しました。
□投稿者/ ONnoji -(2024/06/11(Tue) 16:31:26)
    2024/06/11(Tue) 16:44:53 編集(投稿者)

    <お知らせ>

    拙作webページで

    「目からウロコのデータベース桐プログラミング入門 パート2」を公開しました。

    こちら
     ↓
    桐の釣魚大全のトップ
    http://silicon7565.html.xdomain.jp/

    桐の釣魚大全のトップ > 目からウロコのデータベース桐プログラミング入門 パート2
    http://silicon7565.html.xdomain.jp/primer/primer_side_reader_part2.html

    ブラウザで表示されない場合には、F5キーを押してリロードしてください。
                    ・・・・・・・・・・・・・・・・・

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    このテキストの内容は、[フォーム+イベント処理]の初級者向けです。

    パート2で初級者の前に最初に立ちはだかる難問は、「オブジェクトって何ですか〜?」です。

    なお、このテキストは拙作webページの「桐の釣魚大全」の

    「桐のイベント処理の入門講座」

     新 フォームアプリケーション入門 §1
     新 フォームアプリケーション入門 §2

    の副読本として執筆したものです。

    目次
    10     オブジェクトって何ですか〜?
    10.1   オブジェクトは、パソコンの画面上の操作対象のこと
    10.2   [オブジェクトのリスト]ウィンドウを使いましょう
    11     属性ってなんですか〜?
    11.1   [オブジェクトの属性]ウィンドウと[オブジェクトのリスト]ウィンドウの違い
    11.2   属性の取得と属性の設定
    11.2.1 属性の取得
    11.2.2 オブジェクトの属性と変数のデータ型
    11.2.3 属性の設定
    12     メソッドってなんですか〜?
    12.1   メソッド呼び出し
    12.2   [更新モード設定]メソッドを使うか? コマンドボタンの機能を使うか?、それが問題だ
    12.3   [フォーカス設定]メソッドを使うか? タブオーダーの設定を使うか?、それが問題だ
    13     エラー対策のあれこれ
    13.1   if ( 条件 ) ... else ... end
    13.2   エラー処理コマンドはあるけれど
    13.3   フォーム以外のオブジェクト名をチェックする


580×442 => 250×190

1718091910.jpg
/44KB
引用返信 [メール受信/OFF]

▽[全レス32件(ResNo.28-32 表示)]
■1485 / ResNo.28)  Re[9]: 多重化のメリット 時限式タイマーのメリット
□投稿者/ ONnoji -(2024/07/18(Thu) 17:29:11)
    2024/07/18(Thu) 17:46:12 編集(投稿者)

    ジェダイの桐さん

    > タイマーイベントの事が少し理解出来ました。
    > 任意のプロシージャの中で
    > オブジェクト操作 @フォーム.タイマー1 = 1
    > で タイマーイベントを オン にする。
    >  ↓
    > 任意の時間プログラムを中断する
    >  ↓
    > プロシージャ終了後 タイマーイベントが発生
    >
    > タイマーイベント内で やりたい事があれば行い
    >
    > オブジェクト操作 @フォーム.タイマー1 = 0
    > で タイマーイベントを オフ にする。
    >
    > この認識であっているでしょうか??

    タイマーイベント内で、処理をすればOKという単純なものではありませんよ。

    と書いて、よく見たら・・・

    以下のように


    手続き定義開始 フォーム::タイマー1()
     変数宣言 自動, 文字列 { &title, &msg }
     変数宣言 自動, 整数  { &trace }

     &title = "タイマー1()"
     &trace = 0
     トレース出力 &title + "を実行開始しました"

     オブジェクト操作 @フォーム.タイマー1 = 0
     条件 ( &trace ) トレース出力 " オブジェクト操作 @フォーム.タイマー1 = 0 /* 時限タイマーの [タイマー1] イベントを停止 */"

     トレース出力 &title + "を実行終了しました"

    手続き定義終了


    ↑上のように、タイマーイベントでは、何も実行していないではありませんか!

    実際には、タイマーイベント内で、何も実行していませんから・・・

    全然違うようですね。

    > 何故タイマーイベントが理解かもしないかと言えば、
    > AAAA と 4桁の 文字列があり
    > 1桁で表現できるのは
    > A 〜 Z、0 〜 9 の 36文字
    > この条件でカウントアップしたい事がありました。
    > こちらは実現出来たのですが、サンプル表に 3000行 あり プログラムを実行していると 応答なし と表示され どうした物かと思案していました。
    >
    > ONnojiさんのHPで、プログレスバーの項目を見ていると タイマーを使えば
    > 応答なし を回避できるのでは?とヒントを貰い サブフォームの件で作成頂いたサンプルを参考に プログラムを書いてみたら 応答なし が回避出来ました。
    >
    > パソコンに不可がかかる処理を分散させたい時等に タイマーイベント を使用するのだろうなと思いました。
    >
    > プログレスバー をフォームヘッダに作りたいなと思いましたが断念しました。
    > その代わり 近しい事で代用しました。
    >
    > 桐って色んな事が出来るので、教えて頂いた知識を使って実現出来た時は本当に嬉しいです!

    うーん、

    > サブフォームの件で作成頂いたサンプルを参考に プログラムを書いてみたら 応答なし が回避出来ました。

    ↑これって、タイマーとは全然関係ないと思いますよ。

    多重化して、多重化した方の表(.tbx)で作業しているでしょう。

    これが、ビジー(応答なし)を回避した原因だと思いますよ。

    試しに、

    タイマーを操作しているメソッドをコメントアウトしてみてください。

      オブジェクト操作 @フォーム.タイマー1 = 1
      オブジェクト操作 @フォーム.タイマー値1 = 25

      オブジェクト操作 @フォーム.タイマー1 = 0

    タイマーは動かなくなりますが、多重化によるパフォーマンスでビジー(応答なし)を回避しているので何も変わらない思いますよ。

    ということで、拝見したイベント処理では、無駄にタイマーをセットしリセットしているだけで、何の役にも立っていないと思いますよ。(^^ゞ

    p.s.

    多くの場合、多重化によるパフォーマンスでビジー(応答なし)を回避できると思いますよ。

    多重化してもパフォーマンスが悪い場合に、更にパフォーマンスを上げたい時に、時限タイマーによるプログレスバー方式を使います。

    しかし、プログレスバーを使う主な目的は、作業の中断を出来るようにすることですよ。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・





引用返信 [メール受信/OFF]
■1486 / ResNo.29)  Re[10]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ジェダイの桐 -(2024/07/18(Thu) 18:24:47)
    ONnojiさん


    こんにちは!

    やっぱりタイマーイベントの事を聞いて良かったです!
    誤って理解する所でした。

    > 多重化して、多重化した方の表(.tbx)で作業しているでしょう。
    > これが、ビジー(応答なし)を回避した原因だと思いますよ。


    回避要因は多重化だったんですね!


    > タイマーを操作しているメソッドをコメントアウトしてみてください。


    明日早速試してみます。


    今回の件で タイマーイベント は登場しなくて
    良さそうと言う事が分かりました^_^


    > ということで、拝見したイベント処理では、無駄にタイマーをセットしリセットしているだけで、何の役にも立っていないと思いますよ。(^^ゞ


    半信半疑で タイマーイベント と書いてみて 見かけ上上手く行った様に
    みえたので失敗した事が分かった嬉しいです(^^)

    意外にも内容はないけど タイマーセット と リセット までは出来ていたのですね!
    セットする位置とタイマーイベント内の内容が重要なのでしょうね。

    >>サブフォームの件で作成頂いたサンプルを参考に プログラムを書いてみたら 応答なし が回避出来ました。


    こちらのサンプルでは、タイマーイベント内で 手続き実行をしていました。
    私も最初 タイマーイベント内で 手続き実行を行ったのですが、引数を入れていたのでエラーが起こりました。
    これは考えて見ればタイマーイベント内に関係のない引数でしたので当たり前の話です。


    タイマーイベント に限らず 手続き内で 別の手続きを呼び出す時は よく考えて使えば
    汎用性のある プログラムになるし、他の影響を受けては行けない時に 手続きを呼び出すとエラーになる。


    プログラムの考え方って本当に良く出来ていると思います^_^


    勉強になりましたm(_ _)m
引用返信 [メール受信/OFF]
■1487 / ResNo.30)  Re[10]: 多重化のメリット 時限式タイマーのメリット
□投稿者/ ONnoji -(2024/07/18(Thu) 18:26:21)
    2024/07/19(Fri) 00:40:54 編集(投稿者)

    ジェダイの桐さん

    蛇足を少々・・・(^^ゞ

    > タイマーイベント内で、処理をすればOKという単純なものではありませんよ。
    > 多くの場合、多重化によるパフォーマンスでビジー(応答なし)を回避できると思いますよ。
    >
    > 多重化してもパフォーマンスが悪い場合に、更にパフォーマンスを上げたい時に、時限タイマーによるプログレスバー方式を使います。
    >
    > しかし、プログレスバーを使う主な目的は、作業の中断を出来るようにすることですよ。
    >     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    フォームの編集対象表を[イベント処理で多重化した表]は、双子の表ですが、一方がビジブルで、多重化した方はステルスな表ですね。

    このように、多重化した表と、[イベント処理で開いたステルスな表]を処理する場合には、

    フォームの編集対象を対象にした時と比べると、けた違いにパフォーマンスが良いです。

    つまり、フォームに見えている表は、レコードの移動によって再描画(リドロー)が発生しますので、

    その再描画(リドロー)がパフォーマンスを悪くさせているということです。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    ステルスな表を扱っていても、ファイルのサイズが大きい場合や、レコード数が極端に多い場合、

    処理する内容が極端に複雑な場合、などにはパフォーマンスが悪くなります。

    例えば、

    A.レコード数が多いけれど、1パスで処理を行う場合 ⇒ 時限タイマー1回につき処理するレコード数を決めます

    B.レコード数は多くないが、複数パスで処理を行う場合(結果的に処理レコード数が多くなったのと同じです)⇒時限タイマーから処理する内容ごとに手続きを呼び出します

    このような場合に、時限タイマーによるプログレスバーを検討するということですよ。

    p.s.

    A.の場合には、以下のような感じ。※あくまでもアバウトなフィーリングです。細かいことは気にしないこと
                      ・・・・・・・・・・・・・・・・・・

    手続き定義開始 prcプログレスバーを実行( )

     &m処理単位レコード数 = 対象レコード数/回数

     &mRecordCount   = 1
     &mProgressBarRun = 1
     ブジェクト操作 @フォーム{ タイマー1 = 1, タイマー値1 = 10 }

    手続き定義終了

    手続き定義開始 フォーム::タイマー1()

     if ( &mProgressBarRun )

      手続き実行 prcProgressbarCall( )
     end

    手続き定義終了

    手続き定義開始 prcProgressbarCall( )

     &count = 0 /* カウンタ */

     繰り返し

      ** プログレスバーで行う処理内容 例えば、一般手続きを実行 prcProcedureName()とか

      &count = &count + 1
      if ( &count > &m処理単位レコード数 .or #eof .or [Esc] キーを押した )

       ** プログレスバーの1回あたりの規定回数を実行した、または終端行に到達したので脱出する

       繰り返し中止
      end
     繰り返し終了

     if ( [Esc] キーを押した または #eof )

      ** [Esc] キーを押した、または終端行に到達したのでプログレスバーを終了する

      &mProgressBarRun = 0
      オブジェクト操作 @フォーム.タイマー1 = 0 /* タイマーをリセットする */
     end

    手続き定義終了

    ※なお、[Esc] キーで中断するためには、[キーダウン]イベントをアクティブにして、[Esc] キーを検出する必要があります。


    B.の場合には、以下のような感じ。※あくまでもアバウトなフィーリングです。細かいことは気にしないこと
                      ・・・・・・・・・・・・・・・・・・

    手続き定義開始 prcタイマーによる分割実行( )

     &mPhase = 1
     ブジェクト操作 @フォーム{ タイマー1 = 1, タイマー値1 = 10 }

    手続き定義終了

    手続き定義開始 フォーム::タイマー1()

     if ( &mPhase = 1 )

      手続き実行 prcPhasePrimaryRun( )
     end

     if ( &mPhase = 2 )

      手続き実行 prcPhaseSecondaryRun( )
     end

    手続き定義終了


    手続き定義開始 prcPhasePrimaryRun( )
     &mPhase = &mPhase + 1

     ** 処理内容

    手続き定義終了


    手続き定義開始 prcPhaseSecondarRun( )
     &mPhase = &mPhase + 1

     ** 処理内容

     &mPhase = 0
     オブジェクト操作 @フォーム.タイマー1 = 0 /* タイマーをリセットする */

    手続き定義終了


    A.

     prcプログレスバーを実行 … インターバル … フォーム::タイマー1
                           └ prcProgressbarCall

    B.

     prcタイマーによる分割実行 … インターバル … フォーム::タイマー1
                            ├ prcPhasePrimaryRun
                            └ prcPhaseSecondaryRun

引用返信 [メール受信/OFF]
■1488 / ResNo.31)  Re[11]: 多重化のメリット 時限式タイマーのメリット
□投稿者/ ジェダイの桐 -(2024/07/19(Fri) 10:10:10)
    ONnojiさん


    おはようございます。


    タイマーに関わるプログラムのコメントアウト
    フォームのオブジェクトの属性からタイマーイベント を オフ

    上記を行いcmd資材品番カウントアップClick() を実行しました。


    結果、ビジー(応答なし)は出てきませんでした。
    結論、あのプログラムにタイマーイベントは必要なく、ビジー(応答なし)回避は
    多重化によるものと言う事が理解出来ました!


    >>しかし、プログレスバーを使う主な目的は、作業の中断を出来るようにすることですよ。
    >>    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


    進捗状況が見た目に分かる事は目的の一つで、主目的は作業の中断が出来ると言う事なのでしょうね(^^)
    確かにONnojiさんのHPにも、作業の中断が出来ると便利と書いていました。


    > A.の場合には、以下のような感じ。※あくまでもアバウトなフィーリングです。細かいことは気にしないこと
    >                   ・・・・・・・・・・・・・・・・・・


    プログレスバーの道しるべありがとうございます!
    いつの日か プログレスバーが必要な時 こちらの道しるべを参考にプルグラムを考えます(^^ゞ


    解説ありがとうございましたm(__)m

引用返信 [メール受信/OFF]
■1489 / ResNo.32)  Re[11]: 「多重化のメリット 時限式タイマーのメリット
□投稿者/ ONnoji -(2024/07/19(Fri) 12:59:10)
    2024/07/19(Fri) 18:41:07 編集(投稿者)

    ジェダイの桐さん

    > タイマーに関わるプログラムのコメントアウト
    > フォームのオブジェクトの属性からタイマーイベント を オフ
    > 上記を行いcmd資材品番カウントアップClick() を実行しました。
    > 結果、ビジー(応答なし)は出てきませんでした。
    > 結論、あのプログラムにタイマーイベントは必要なく、ビジー(応答なし)回避は
    > 多重化によるものと言う事が理解出来ました!

    でしょう。やっぱり。

    「イベント処理による編集対象表の多重化」は慣れれば簡単に出来るでしょ。

    パフォーマンスの向上は凄まじいです。

    そして、フォームに見えている編集対象表のレコードが移動しないのでサイレントです。

    > >>しかし、プログレスバーを使う主な目的は、作業の中断を出来るようにすることですよ。
    > >>    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    > 進捗状況が見た目に分かる事は目的の一つで、主目的は作業の中断が出来ると言う事なのでしょうね(^^)
    > 確かにONnojiさんのHPにも、作業の中断が出来ると便利と書いていました。

    確かに「進捗状況を見える化する」という目的もありますよ。

    整形ユーティリティでイベント処理ファイルを整形する時に、

    [整形エンジン]と表示されたプログレスバーを表示する小さなフォームが現れますが、

    これが「作業の中断が出来るプログレスバー」です。

    ただし、これは難易度が非常に高いです。

    なぜかというと、主ウィンドウ(整形1〜4)側には、整形エンジンが搭載されていなくて、

    「プログレスバーのフォーム」が進捗表示と実際の整形処理を行っているのです。

    この点は重要で、「外部プログレスバー(フォーム)」の場合には、

    単なる見かけ上のプログレスバーではなく、実体としての「モーダルフォームのプログレスバー」なのです。

    なので、難易度が高くなるのです。

    最初から「外部プログレスバー(フォーム)」を作るのは困難ですので、最初は内部プログレスバーにします。

    つまり、フォームヘッダ部にプログレスバー(ラベルオブジェクト)を配置します。

    この形式の例は、整形ユーティリティ(整形1〜4)のフォームヘッダ部にある

    [変数チェック]ボタンを実行して現れる「変数チェック」ウィンドウのプログレスバーです。

    >>A.の場合には、以下のような感じ。※あくまでもアバウトなフィーリングです。細かいことは気にしないこと
    > プログレスバーの道しるべありがとうございます!
    > いつの日か プログレスバーが必要な時 こちらの道しるべを参考にプルグラムを考えます(^^ゞ

    あたかも疑似コードのような、まるでポンチ絵のような、とてもアバウトなものを示しましたが、

    拙作webページの詳細な解説よりは取っ付き易いだろうと思います。

    頭の中で想像して、イメージが沸いたら拙作webページの詳細な解説を読んでみてください。

      35.1 内部プログレスバーと外部プログレスバー|桐の釣魚大全のトップ > フォームアプリケーション教書 第2部
      http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section35

    ヒントとか閃きが得られるかもしれませんよ。


引用返信 [メール受信/OFF]

■記事リスト / レス記事表示 → [親記事-9] [10-19] [20-29] [30-32]



■記事リスト / ▲上のスレッド
■1481 / 親記事)  FW_チェックボックスINF_Framework
□投稿者/ AKome -(2024/07/02(Tue) 10:50:12)
    INF_Framework 第3.3版 改訂版(MkII) には

    サンプルとして FW_チェックボックスINF_Framework
    が含まれています。

    これは
    一覧表形式のフォームの明細部にチェックボックスをきれいに配置し
    自然な操作をすることができる優れものです。

    ご覧になってみてください。

    あこめの桐のプログラミング入門
    http://akome409102.html.xdomain.jp/index.html

    [チェックボックスを明細部で繰り返し表示] です。

    ※念のためにブラウザで Shift+F5 などでリロードしてください。

引用返信 [メール受信/OFF]

▽[全レス2件(ResNo.1-2 表示)]
■1482 / ResNo.1)  Re[1]: FW_チェックボックスINF_Framework
□投稿者/ ONnoji -(2024/07/02(Tue) 15:11:52)
    2024/07/03(Wed) 15:19:22 編集(投稿者)
    2024/07/02(Tue) 15:53:27 編集(投稿者)

    拙作:FW_チェックボックスINF_Framework は、フレームワークです。

    フレームワークとはテンプレートのようなものです。

    1.フォームに名前を付けて保存したり、2.イベント処理に名前を付けて書き出したり、3.表に項目を3つ追加するするだけで、

    ご自身の表(.tbl/.tbx)を編集対象表にした一覧表形式のフォームが簡単に作れます。

    これをカスタマイズすると呼びます。

    以下にカスタマイズする手順を示します。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

      FW_チェックボックスINF_Framework のカスタマイズの手順

      以下は、FW_チェックボックスINF_Framework.wfx/.kex/.tbx から任意の filename.wfx/.kex/.tbx を作成する手順です。


                        手順は1、2、3のどれから先に行ってもOKです。

                        〔手順〕

     ┌───────────────┐
     │1.イベント処理       │  1.  イベント処理の再定義で[ファイル]メニュー→[一括]→[書き出し 一括・イベント処理ファイル]で、
     │               │      "ファイルの種類" に "イベント処理" を選び、任意のイベント処理を名前を付けて書き出します。
     │FW_チェックボックス      │
     │INF_Framework.kev/.kex    │
     │               │
     │┌────────────────┐
     ││2.一覧表形式のフォーム    │2.1 再定義でフォームの[ファイル]メニュー→[名前を付けて保存]で、任意の名前を付けて保存します。
     ││                │
     ││FW_チェックボックス       │2.2 再定義でフォームのオブジェクトの属性の[編集対象表]タブの "参照表" を〔手順3.2〕の任意の表(.tbl/.tbx)に変更します。
     ││INF_Framework.wfm/.wfx     │
     ││                │2.3 再定義でフォームのオブジェクトの属性の[編集対象表]タブの "編集対象表" が "参照表" と同じになっていることを確かめます。
     ││                │
     └│                │2.4 再定義でフォームのオブジェクトの属性の[イベント]タブの "イベントファイル名" に〔手順1〕のファイル名を設定します。
      │                │
      │                │
      │                │
      │                │
      └──────┬─────────┘
             │
      ┌──────┴────────┐
      │3.フォームの編集対象表   │ 3.1 FW_チェックボックスINF_Framework.tbl/.tbx は使いません。
      │               │
      │FW_チェックボックス      │ 3.2 任意の表(.tbl/.tbx)を用意してください。
      │INF_Framework.tbl/.tbx    │
      │               │ 3.3 表定義で任意の表(.tbl/.tbx)に次の3つの項目を追加します。
      │               │
      │               │     項目名   データ型 項目計算式
      │               │     チェック  整数
      └───────────────┘     recordID  カウンタ
                            空欄    文字列  #u
     
                        3.4 表編集の[属性]メニュー→[列の表示]→[一覧で設定]で、
                            追加した3つの項目の[表示]のチェク印をオフにします。


      ┌───────────────┐
      │4.フレームワーク      │ 4.  イベント処理ファイルがあるフォルダにフレームワークが存在しない場合には、
      │               │     2つのフレームワークをイベント処理ファイルがあるフォルダにコピーしてください。
      │               │     ※( INF_Framework.cmd/.cmx と IPS_Framework.cmd/cmx )
      │INF_Framework.cmd/.cmx     │
      │               │    (ご注意)
      │               │     フレームワーク( INF_Framework.cmd/.cmx と IPS_Framework.cmd/cmx )はライブラリです。
      │IPS_Framework.cmd/cmx     │     一括処理ではありません。
      │               │
      └───────────────┘


引用返信 [メール受信/OFF]
■1483 / ResNo.2)  Re[2]: FW_チェックボックスINF_Framework
□投稿者/ ONnoji -(2024/07/02(Tue) 15:14:47)
    これは拙作フレームワークの宣伝です。(^^ゞ

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    《FW_チェックボックスINF_Framework の四大特長》  By ONnoji

    FW_チェックボックスINF_Framework の特長は、一覧表形式のフォームの明細部でチェックボックスを繰り返し表示する場合の4つのユーザインタフェースです。

    【フォーカスの制御】

    一覧表形式のフォームの明細部にチェックボックスを配置すると、チェックボックスをクリックした際に、フォーカスがあったテキストへフォーカスが戻りません。

    しかし、FW_チェックボックスINF_Frameworkを使えば、チェックボックスをクリックしても、フォーカスがあったテキストへフォーカスが戻ります。

    【美しいフォーム】添付画像参照

    一覧表形式のフォームの明細部にチェックボックスを配置すると繰り返し表示されるので、終端行以降にもチェックボックスが表示されてしまいます。

    しかし、FW_チェックボックスINF_Frameworkを使えば、終端行以降にチェックボックスが表示されませんので、スッキリとした美しいフォームに仕上がります。

    【リバースボタン】

    フォームヘッダ部の[リーバス]ボタンをクリックすると、(現在選択中の行の)すべてのチェックボックスを対象にオン/オフを反転できます。

    【すべてオン/オフ】

    フォームヘッダ部のチェックボックスをオン/オフすると、(現在選択中の行の)すべてのチェックボックスを対象にオンまたはオフにセット出来ます。


473×536 => 220×250

1719900887.jpg
/77KB
引用返信 [メール受信/OFF]

■記事リスト / レス記事表示 → [親記事-2]






210295

Mode/  Pass/

HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -