Page 5 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼スクリプト教えてください。 xyr 01/11/11(日) 23:39 ┗Re:スクリプト教えてください。 ykitz 01/11/12(月) 3:00 ┗Re:スクリプト教えてください。 xyr 01/11/12(月) 18:56 ┗Re:スクリプト教えてください。 ykitz 01/11/13(火) 1:35 ┗Re:スクリプト教えてください。 xyr 01/11/13(火) 23:11 ┣スクリプトマニュアル購入について ykitz 01/11/14(水) 2:22 ┗Re:スクリプト教えてください。 ykitz 01/11/14(水) 6:17 ┗Re:スクリプト教えてください。<- マクロではだめですか? ykitz 01/11/14(水) 6:21 ┗Re:スクリプト教えてください。<- マクロ... xyr 01/11/14(水) 23:19 ┣Re:スクリプト教えてください。<- マクロ... issun 01/11/15(木) 2:08 ┗Re:スクリプト教えてください。<- マクロ... ykitz 01/11/15(木) 5:28 ┗Re:スクリプト教えてください。<- マクロ... xyr 01/11/15(木) 23:11 ┣手詰まり状態です ykitz 01/11/16(金) 3:14 ┃ ┗スクリプトの例を増やしました ykitz 01/11/18(日) 15:06 ┗Re:スクリプト教えてください。<- マクロ... issun 01/11/17(土) 1:01 ┗原因がわかりました! xyr 01/11/17(土) 16:25 ┗Re:原因がわかりました! ykitz 01/11/17(土) 16:48 ─────────────────────────────────────── ■題名 : スクリプト教えてください。 ■名前 : xyr ■日付 : 01/11/11(日) 23:39 -------------------------------------------------------------------------
| スクリプトがわからず困っている初心者です。 内容は カレントレコードの フィールド "A" の値を、同じく カレントレコードの フィールド "B" に入力する、というものです。 "GetValue" と "SetValue" を使えばいいとは思うのですが 書式が理解できず、ヘルプを見ながら色々やったのですがエラーになるばかり。 どうしてもできません、助けてください。 |
| >> xyrさん: 私も、スクリプトは初心者です。 なぜなら、大抵のことはマクロで簡単にできてしまうし、 スクリプトは手直しが面倒なもので、スクリプトはあまり使いません。 ですので、これからもずっと、スクリプトの初心者でしょうね。いやはや。 そんな私で、わかる範囲です。 なので、かなり怪しげです。 下記の方法は、データベースのAフィールドの値でBフィールドを一気に 書き換えてしまう方法のつもりです。 Sub faandfb Dim tablename as Table Dim RS as ResultSet Dim I as Integer Dim wanko as Integer (A,B フィールドが整数と前提して) Set tablename = CurrentDocument.GetTableByName("なんとかかんとか") Set RS= tablename.CreateResultSet() RS.FirstRow For I=1 to RS.NumRows wanko = RS.GetValue("A") RS.SetValue "B", wanko RS.UpdateRow RS.NextRow Next I End Sub このようなので、どうでしょうか? あまり、自信はありませんが。 |
| ykitzさん お答えありがとうございます。 早速、下のプログラムを作って試してみたのですが これを実行すると、カレントビュー(フォーム)で表示している レコードではなく 全レコード中 先頭レコードの フィールドを書き換えてしまいます。 カレントビューのレコードを指定するにはどうすればよいのでしょう。 ヘルプも見たのですが、理解力が足りず わかりません。 何度も申し訳ありませんが、教えていただけないでしょうか? ちなみに 最初、 "RS.FirstRow" の記述していたので このせいかなと思い、REM にしてみましたが結果は同じでした。 Dim tablename As Table Dim RS As ResultSet Dim I As Integer Dim DT01 As Integer Set tablename = CurrentDocument.GetTableByName("項目品名") REM RS.FirstRow DT01 = RS.GetValue("項目01") RS.SetValue "項目02",DT01 RS.UpdateRow |
| >カレントビューのレコードを指定するにはどうすればよいのでしょう。 そういうことだったんですね。見当違いの回答になってしまったようです。 以下は、ロータス社の「ロータススクリプト ハンドブック」の記載例を 元にしたものです。 まず、フォームにスクリプトを起動するためのボタンを作成します。 そのボタンのスクリプトの Click に以下のスクリプトを作成します。 Sub Click(Source as Button 以下省略 ) Dim dwin as DocWindow Set dwin = CurrentApplication.ActiveDocWindow Source.項目02.text = Source.項目01.text End Sub ここからは蛇足です。 ロータススクリプトをお使いになるのでしたら、 ロータス社から「ロータススクリプト マニュアル」を購入なさることをお勧めします。 けっして分かりやすくはありませんが、多少なりとも利用価値はあると思います。 スクリプトエディタだけの情報では、ロータススクリプトを扱うのは、かなり 難しいと思います。 |
| ykitzさん こんばんは。 すばやい回答、本当にありがとうございます。 >ロータススクリプトをお使いになるのでしたら、 >ロータス社から「ロータススクリプト マニュアル」を購入なさることをお勧めします。 「ロータス スクリプト プログラミング入門」という本は持っているのですが アプローチ固有機能については、ほんの数ページしか記述が無く さっぱりわかりませんでした。 今日も仕事の帰りがけに本屋によって参考文献を探したのですが こちらが田舎であることに加え、やはり ロータス スクリプトは マイナーな存在らしく 全く置いてありませんでした。 「ロータススクリプト マニュアル」は注文しないといけませんね。 しかし、今回 せっぱ詰まっていて 一刻も早く前述の機能を実現しなければ ならない状況でして。 (うちの会社で使用しているアプリケーション改造。 私が作ったのですが 色々ややこしい要望が多くてマクロだけでは対応できなくなっています。) ネット検索でこちらのHPを探し当て、わらをもすがる気持ちで質問しております。 Excel の VBA とかは多少経験がありまして 質問事項さえクリアできれば 後の作成は 何とかなると思います。 最初に教えていただいたスクリプトで フィールドの読み書きする事はできたので これにカレントビューのレコードの指定さえ出来ればokなんですけど この方法では不可能なのでしょうか? それともう一つの方法。「ボタンのスクリプトの Click」 を実行したところ Source.項目02.text 〜 の行で「名前が無効です」のエラーが出て止まってしまいます。 ご迷惑は承知の上で質問しています、この件の質問は最後にしますので 何とか 教えていただけないでしょうか? |
| >「ロータススクリプト マニュアル」は注文しないといけませんね。 このマニュアルは書店扱いではなく、ロータスへの直接注文です。 以下に、インターネットでの購入方法をお知らせします。 1.ロータスストア(http://store.lotus.co.jp/)の画面を開きます。 2.ロータスストアの画面の上のほうにある、「製品一覧」のドロップダウンリストを 開き、「スーパーオフィス」をクリックします。 3.開いた画面に「2001」と表示したドロップダウンリストで、「2000」を クリックします。 4.そして「マニュアル」の項目をクリックすると、 ロータス スクリプト R4/スーパーオフィス版 の表示がでます。 あとは、購入手続きを取れば完了です。 なお、3.の画面で「2001」を選んでも、「マニュアル」の項目には ロータス スクリプト R4/スーパーオフィス版 は表示されません。 2000 と 2001 は、実質的にはほとんど同じですから、 ロータス スクリプト R4/スーパーオフィス版 マニュアルは 2000 と 2001 のどちらでも利用可能のはずです。 また、会社での購入で、インターネットでの購入ができない場合は、 上記のロータスストアの画面上部の「お問い合わせ」をクリックすると 問い合わせ先の電話番号などが表示されますので、そちらをご覧ください。 |
| >今回 せっぱ詰まっていて 一刻も早く前述の機能を実現しなければ >ならない状況でして。 >(うちの会社で使用しているアプリケーション改造。 私が作ったのですが >色々ややこしい要望が多くてマクロだけでは対応できなくなっています。) そういう状況だったんですね。 苦労を知らない同僚や上司は、言いたいことを言ってくれるんですよね。 お察しします。 >最初に教えていただいたスクリプトで フィールドの読み書きする事はできたので >これにカレントビューのレコードの指定さえ出来ればokなんですけど >この方法では不可能なのでしょうか? 最初の方法は、画面表示せずに、一括してファイルの内容を書き換える方法です。 xyr さんが実現なさりたいのが、フォーム上でスクリプトを実行させるということ でしたら、二番目の方法のほうが向いていると思います。 >それともう一つの方法。「ボタンのスクリプトの Click」 を実行したところ >Source.項目02.text 〜 >の行で「名前が無効です」のエラーが出て止まってしまいます。 とのことですが、12日の xyr さんのメールに次のような記述があったため 項目01, 項目02 がフィールド名だと思ってました。 DT01 = RS.GetValue("項目01") RS.SetValue "項目02",DT01 説明のため、項目01, 項目02 という表現をなさったのでしたら、 Source.項目02.text = Source.項目01.text を フィールド名を使ったものに、変更してください。 >ご迷惑は承知の上で質問しています、この件の質問は最後にしますので そうおっしゃらずに、これからも質問してください。 ただし、スクリプトの自信はありませんので、ご承知おきください。 ギブアップしたら、ご勘弁を。 |
| ご質問の内容だけのために、スクリプトを使うのではないと思いますが、 ご質問の内容だけに絞って言うならば、マクロで簡単にできます。 「データ入力 項目02 = 項目01」 これだけです。 このマクロを、項目01 の「データ変更時」にセットすれば、 項目01 にデータを入力すると、自動的に項目02 の内容も同じになります。 他に制約がなければ、マクロのほうが簡単だと思います。 余計なコメントでした。 |
| ykitzさん 最後と言っておきながらまた書いてます、ごめんなさい。 >12日の xyr さんのメールに次のような記述があったため >項目01, 項目02 がフィールド名だと思ってました。 "項目01", "項目02"は数値型のフィールド名です。 お答えを参考に Sub Click(Source As Button, X As Long, Y As Long, Flags As Long) Dim dwin As DocWindow Set dwin = CurrentApplication.ActiveDocWindow Source.項目02.text = Source.項目01.text End Sub と記述してボタンのクリックで実行させるようにしたのですが なにか足りない記述があるのでしょうか? "項目01" というのは "品名項目"という別のデータベースを連結させて表示させています。 これが原因かと思い、メインデータベースのフィールド名を使ってやってみたのですが やはり同じエラーが出ました。 "Source.項目01.text" の "text" というのは文字列フィールドだった場合はどう書くのでしょう。 "Source" というのもヘルプで検索しても意味が....。 それとこのデータベースは連結ベータベースが複数ありまして 1レコードに700個前後の入力フィールドを持ち、 フォームに表を形成しております。 その表の"1行削除"とか"1行挿入"とか をやらせようとしているのです。 マクロでは 膨大な数をつくらなければならず、とても無理で もしやれたとしても 実行時間がとんでもなくかかってしまいそうなので、 それではスクリプト使い For〜Next でまわせば簡単じゃないかな? と言うわけなのです。 甘い考えだったようです、う〜。 会社に「ご免なさい」しなければ しょうがないかな。 >そうおっしゃらずに、これからも質問してください。 お言葉に甘え 書いてしまいました。 これで この件の質問、本当に最後にします。 |
| >> xyrさん: >ykitzさん xyrさんこんにちは、issunともうします。 よこやりで申し訳ないのですが、憎まれっ子させてください。 自分は最初からykitzさんのマクロの提案と同じことを考えていましたが、 xyrさんのされようとしている事が大変危険なんじゃないかな?と思い 投稿してしまいました。 おそらくykitzさんの事ですから、なんらかの解決策を出してくれると思いますが、 >1レコードに700個前後の入力フィールドを持ち、 >フォームに表を形成しております。 表という表現があるってことは、行番号が付けれるわけですから 極端な表現ですが7フィールドの100レコードという形式にして 反復パネルを使うようなやりかたにテーブルデザインを変えておくべきでは ないでしょうか? リレーショナルデータベースとしてのテーブルデザインの正規化を という事です。 それなりの理由があって今の形式になっているとは思いますが 今回の事が出来たとしても、その処理中に暴走・フリーズ・停電等がおこれば 取り返しのつかない状態におちるでしょうし 今後xyrさんしか手を加えられないアプリになりそうな気がします。 これって会社サイドから考えて嬉しい事でしょうか? 「マクロとか他の連結とかいろいろあってこうなってるんや。わからんくせして あっさり言うな!」とお怒りにならないように・・・ ykitzさん この投稿駄目なようなら削除していただくか 削除要請してください。 |
| xyr さんのシステムの状況が、少しずつ見えてくると、かなり複雑なシステムのようで、 このような掲示板での簡単なやり取りで、解決策が見つかるものかどうか、 自信がなくなってきました。 また、xyr さんがなさろうとしていることが、 現行システムに手を加えることが可能な範囲なのかも、 いただいている情報だけでは判断できません。 現在要求されていることは、もしかすると、新システム構築で対処すべき 内容なのかもしれません。 また、xyr さんが目指していることを、全く別の処理方法で実現できるかもしれません。 データとかシステムは、企業にとってとても重要な財産ですから、 issun さんの心配なさっているように、システムの停止・データの破壊などに対する 充分な配慮も必要です。 ですので、xyr さんがなさろうとしていることは、小手先のテクニックで対処するより、システムの見直しにより解決すべき内容かもしれないと思えるのです。 もちろん、せっぱ詰まって質問をされた xyr さんには、時間的余裕がないとは 思いますが、今回は、システムに手を加えずに、システムの見直しをなさるほうが 良いのではないかと思います。 目の前の改善はできませんが、システムの見直しと再構築をすれば、 より大きな改善効果を得ることができるかもしれません。 なんら解決策を示すことができないうえに、お節介な提案をして お気に障ったかもしれませんが、ご検討いただければと思います。 |
| ykitz さん issun さん 長文でのお返事 恐縮しております。 私が低レベルの話をしているのは十分認識してますから、 気に障るなどということはありませんので お気になさらないでください。 確かに 反復パネル を使うべきなのでしょうけれども このシステムを作り始めたとき、知識が足りずに 変なつくりで構築がすすんでしまい 今更作り替えるのは ちょっと不可能な状態です。 それと反復パネルを使うと、 印刷用のフォームに 1ページ目: 1〜10項目、 2ページ目:11〜30項目。 というようなレイアウトは出来ないのではないかと思い、 (出来るのかな? いまでもわからない...。) 連結フィールドの羅列という、作成に手間はかかるけれども なにも考えなくてもいい安易な方法をとりました。 PS:ちなみに ボタンの "Click" を使ったスクリプトを 全く新規のデータベースを作って 試しましたが "名前が無効です。オブジェクトのプロパティかメソッドをバインドできません。" とエラー表示がでます。 フィールドを数値型にしても文字型にしても全く同じ結果でした。 |
| 手詰まり状態です。 下記に、サンプルをダウンロードできるようにしましたので、ご確認ください。 http://www.geocities.co.jp/SiliconValley-Bay/5766/sample/smpls00.htm |
| スクリプトの例を増やしましたので、よろしければ、ご覧になってください。 こちらのページにあります。 http://www.geocities.co.jp/SiliconValley-Bay/5766/sample/smpls00.htm |
| >印刷用のフォームに >1ページ目: 1〜10項目、 >2ページ目:11〜30項目。 これは、おそらくレポートに検索ノートを割り当てる事により 可能だと思います。レポートは検索とソートの使い方でガラリと変わって 結構奥が深いので自分も良く悩みます。 >PS:ちなみに ボタンの "Click" を使ったスクリプトを > 全く新規のデータベースを作って 試しましたが > > "名前が無効です。オブジェクトのプロパティかメソッドをバインドできません。" マクロを作ってスクリプトに変換しても同じ記述になったので、 前出のスクリプトで何の問題も無かったと思いますが。 原因はさっぱりわかりません。 ykitz さんのスクリプトを自分も見させていただきましたが 何の問題もありませんでした。 自分も参考にしている書籍はロータスストアで購入した プログラマーズガイドです。(読んでも呪文にしか見えませんが・・・) それを購入されて、解決の糸口を見つけられたほうが、良いと思います。 それとアプローチのスマートマスターにある《会議予約室》のスクリプトが 一番近いスタイルではないでしょうか?《会議予約室》のスクリプトの グリーンの文字を訳されるのも一つの手段だと思います。 あとマクロでもやって見ましたが、 700フィールドというのは、やはり対処しきれませんね 少ないマクロでなんとかならないものかと考えましたが 変数型フィールドと組み合わせて 任意に指定した 行モドキ への移動が精一杯でした。 結局データベース間やレコード間は移動できてもフィールド間は タブの移動でしか移動方法が無いので、行の追加・削除モドキ にしようと思えば 膨大なマクロの量になりそうですね。 最初に構築された時の発想が表計算的な構築のように思えるので 123に持っていったほうが早いかも。。。 解決は無理でも、少しは何か発見できれば良かったのですが ごめんなさい。 |
| ykitz さん issun さん 出張の為に返事が遅れてしまいました、すみません。 スクリプトがエラーになる原因がやっとわかりました。 "Source.項目02.text" の "項目02" は オブジェクト名を記述するのですね。 フィールド名を書くものだと頭から決めてかかっていたので、気づくのに相当 時間がかかってしまいました。 私のシステムはフォーム内のオブジェクトをコピーして作っている部分がほとんどです。 ペーストすると 勝手に変なオブジェクト名が付いていくので、動作しなくて当たり前でした。 ykitz さん のスクリプトに間違いはありませんでした。 私の知識不足でご迷惑おかけしました。 サンプルまで作って頂いて申し訳ありませんでした。 おかげで、やっと出口が見えてきました。 (とはいえ、前に issun さんの言われていた危険は付きまとう訳ですが。) >これは、おそらくレポートに検索ノートを割り当てる事により >可能だと思います。レポートは検索とソートの使い方でガラリと変わって >結構奥が深いので自分も良く悩みます。 そのような方法があるのですね。 "検索ノート" 勉強してみます。 >結局データベース間やレコード間は移動できてもフィールド間は >タブの移動でしか移動方法が無いので、行の追加・削除モドキ にしようと思えば >膨大なマクロの量になりそうですね。 私も最初そのようなことを考えやってみたのですが、フィールドが多いものですから 必ず最初から順に移動していくタブコマンドは遅くて使い物になりませんでした。 一発で目的のタブへ移動できるコマンドがあれば、動作も速くて非常に便利なのでしょうけどね。 お礼: 延々と何のゆかりもない私にお付き合い頂いてありがとうございました。 こちらのHPに巡り会えてよかった、本当に感謝しています。 また おかしな質問するかもしれませんがよろしくお願いします。 |
| xyr さん、解決の糸口が見つかり良かったですね。 こちらも一安心です。 issun さん、情報ありがとうございました。 いろんな人の知恵を集めて文殊の知恵、これを実感しました。 |