メール送信2

gettime()

title="テキスト"+G_TIME_MM+"テキスト"+G_TIME_DD

path="C:\Users\user\Desktop\aaaaaa.xlsm"

Dim o_XL = CreateOLEObj("Excel.Application")
Dim o_WB = o_XL.WorkBooks.Open(FileName := path, ReadOnly := False)

o_XL.Visible  = TRUE
o_XL.DisplayAlerts  = FALSE

r_fp="C:\Users\user\Desktop\a.txt"
w_fp="C:\Users\user\Desktop\a.txt"

Dim ID_f	= FOpen(r_fp)
str= FGet(ID_f, F_ALLTEXT)
FClose(ID_f)

from="$1"
from1="$2"

str=chgmoj(str, from, G_TIME_MM)
str=chgmoj(str, from1,G_TIME_DD)

ID_f = FOpen(w_fp, F_READ or F_WRITE8 or F_NOCR)
FPut(ID_f, str, F_ALLTEXT)
FClose(ID_f)

o_XL.range("b5").value=title

o_XL.range("b6").value=str

o_XL.run("sheet1.abc")

タグ

2019年7月16日 | コメントは受け付けていません。 |

カテゴリー:掲示板

Excelのセルをクリックする

Excelマクロで作られたツールがあります。マクロは保護されていて中が見れません(無理に覗くのも使用規約に反するようで)。<br>
このツールはシート上のセルをダブルクリックすると、その行に記載されている情報を元に動作するようになっています。<br>
このツールを1行ずつダブルクリックしていく処理をUWSCで実現したいと思います。<br>
低レベル関数では実現出来ていますが、Excelの表示設定によって座標の調整が必要なため、他の方法が無いかと考えております。<br>
<br>
試しにCLKITEMを使って以下の様に組んでみましたが、<br>
いずれもCLKITEMの戻り値がFalseになります。<br>
################################<br>
id = GETID("Book1.xlsx - Excel", "XLMAIN", -1)<br>
ACW(id)<br>
ret1=CLKITEM(id, "A3", CLK_LEFTCLK)<br>
ret2=CLKITEM(id, "A3", CLK_DBLCLK)<br>
print "1:" + ret1 + " ,  2:" + ret2<br>
################################<br>
<br>
種別はCLK_ACCなども試してみましたが変わりませんでした。<br>
<br>
BTN以外での実現方法はありませんでしょうか。<br>
よろしくお願いいたします。<br>

タグ

2017年7月21日 | コメントは受け付けていません。 |

カテゴリー:掲示板

OUTLOOK2013でのメールの送り方

毎日、データを更新したExcelファイル(Sales.xlsx)がデスクトップ上(C:\Users\shihan\Desktop)に自動作成されます。 ここまではプログラミングできたのですが、OUTLOOK2013を立ち上げ、その作成されたExcelファイルをメール配信したいのですが、コードの書き方が分かりません。ご教授いただけないでしょうか? よろしくお願いいたします。

タグ

2017年7月3日 | コメント/トラックバック(1) |

カテゴリー:掲示板

Excel 空白セルの判定がうまくいかない

こんにちは。UWSCで、Excelのセルにデータが入っているか判定するプログラムを書こうと思っています。 ExcelのSheet1のA1に何らかの文字列が入っていれば、処理を行うといった事をしたいのですが、下記のコードだとうまく動きません。 A1に文字列が入っていないにも関わらず、IF文がTRUEになってしまい、DO SOMETHINGを実行してしまいます。 下記のコードを試したのですが、ダメでした。 ☓ LENGTH(.Range(“A” + “1″)) “” ☓ LENGTH(.Range(“A” + “1″)) 0 ☓ .Range(“A” + “1″) “” ☓ .Range(“A” + “1″) EMPTY ☓ .Range(“A” + “1″) NOTHING ☓ .Range(“A” + “1″) NULL EXCEL = GETACTIVEOLEOBJ(“Excel.Application”) WB = EXCEL.WorkBooks(“myFile.xlsx”) With WB.WorkSheets(“sheet1″) if LENGTH(.Range(“A” + “1″)) “” then //Do SOMETHING endif EndWith どのようにすれば解決できますでしょうか?UWSCの問題というよりは、Excelの問題のような気もしますが・・・ お手数おかけします。よろしくお願いいたします。

タグ

2016年1月15日 | コメントは受け付けていません。 |

カテゴリー:掲示板

GETITEMでリストビューが取得できない

お世話になってます。

あるアプリのリストビュー情報を取得したく
GETITEMを使おうとしました。

もしかしたらLISTBOXなのかもしれないですが…

リストビューは、2列になっており
情報取得が上手く出来ない状況です。

見た目は、Excelで2列にリストビューを作ったときと
同じです。
1列目の情報は取れますが、2列目が重要です。

試してみるべきこと等ありましたらお願いします。

タグ

2015年4月8日 | コメント/トラックバック(2) |

カテゴリー:掲示板

Excelファイル内のsubプロシージャをUWSCから実行する?

こんばんは,よろしくお願いします。
Excelのファイル(例えば,AAAA.xlsm)に保存されているsubプロシージャやfunctionプロシージャを,UWSCから実行する事は出来ますでしょうか?

あるExcelファイルのプロシージャから,別のExcelファイルのプロシージャを実行することは,
まず,AAAA.xlsmを開いて,アクティヴにし,
 Application.Run “‘AAAA.xlsm’!Module1.BBBB”
などとする事によって,AAAA.xlsmというファイルの,Module1という標準モジュールのBBBBというsubプロシージャを実行することが出来ますが, 同様のことは,UWSCからでも出来るのでしょうか?
是非,ご解説いただきたくお願い申し上げます。

なぜ,このような事をしたいのかといいますと,日々生じるあるデータを収集し,分析をするという作業を,ExcelVBAを使って行っていると思ってください。
分析をする各プログラムは,それぞれ,別々のファイルに保存されています。これらのファイルのすべてに,それぞれ膨大な日々のデータを持たせる事は,無駄ですし,同一のデータで,それぞれの分析を行いたいのに,使用するデータが分析ファイルごとに違っていては都合が悪いのです。ファイルごとに新しい物もあれば古い物もあるというのでは困ります。
いつも,どの分析を行う時にでも,使用するデータは同一かつ最新の物であってほしい訳です。そこで,現在は,それぞれの,分析プログラムを実行する際に,同一の情報収集用のExcelファイルを開き,情報を最新の物に更新・保存するようにしています。この際に,分析用のExcelファイルから,情報収集用のExcelファイルのプロシージャを実行する必要があるのです。状況をご理解いただけましたでしょうか?
どうかご解説よろしくお願いいたします。

タグ

2015年1月28日 | コメント/トラックバック(1) |

カテゴリー:掲示板

IEの画面更新完了待ちと表示値の取得

2006年、POSACCでの文字列の取得を使って以来、新たな取り組みはなく、暫くUWSCとは縁がありませんでしたが、他に手段を思いつかない事案が発生し、お力をお借りしたいと思います。 やりたいこと クラウドで運用するデーターエントリーで、行を動的に追加する
操作について、Excelの一覧表から登録できる様自動化したい。 行追加の手順は、 1. 追加する行数分の入力枠追加ボタンの押下を繰り返す 2. 追加された入力枠に、Excel表から商品、数量を転記する やってみたこと (UWSCで扱えるブラウザとしてIEを選択しましたがバージョンは11) 行追加ボタン押下を記録し、動作確認。 記録によるため、1行追加毎の完了確認は考慮されていないので、よく使われているIE待ち合わせ関数を用意して同期を試す。
		
	IE = CreateOLEObj("InternetExplorer.Application") 		
	IE.Visible = True 		
	print IE.readyState        // 結果は0		
	sleep(2)		
	print IE.readyState        // 結果は0		
	for 追加回数 = 1 to 10		
	    msgbox(追加回数)		
	    CLKITEM(導入連絡ID, "行追加", CLK_ACC)		
	    ie_wait(IE)		
	next		
	procedure ie_wait( IE )		
	  repeat		
	    sleep( 0.1 )		
	    print IE.busy            // 結果はfalse		
	    print IE.readyState      // 結果は0		
	  until ( ! IE.busy ) and ( IE.readyState = 4 )     // Loopを抜けられません		
	  sleep( 0.2 )		
	fend		
	
ここで、待ち合わせが解けないという問題が発生 IE.busy と IE.readyState の状態をトレースすると、オブジェクト定義以後、IE.readyStateが常に0であることが直接の原因 IEの設定かアプリの問題か手に負えないと判断し、別のアプローチを検討 (ネット上のサンプルコードでも同じ結果なので、スペル違いとかの問題ではないと思います。IE11で非互換が発生しているという記事も気になります。) 別のアプローチ 画面の固定された位置に表示されている「行数」が変わったことを検知して待ちが解けたと判断する 「行数」は「件数」という文字に続いて表示されます 「行数」を特定する識別子を調べて値を取得する方法が望ましいけれど、識別子の調べ方が不明なので、「件数」という文字列の位置情報から、後続する値を取得できないかネットでいろいろ調べて、「.document.forms・・・」など試してはみましたが、いずれも空白が取得されるばかりです ここで、これ以上、独力での進展は無理と判断しました。 教示いただきたいこと 1. 上記、IEの完了待ちを機能させるヒントはないでしょうか 2. 行数を取得する有効な手段は何でしょうか 以上、よろしくお願いいたします。

タグ

2014年8月15日 | コメント/トラックバック(1) |

カテゴリー:掲示板

EXCELにおけるFind(keyword)について

EXCELでの検索を行っているのですが Find(keyword) にて検索しているのでが 数式 を検索しているようなのですが 値 での検索はできないのでしょうか?

タグ

2013年8月10日 | コメントは受け付けていません。 |

カテゴリー:掲示板

複数のEXCELファイルを制御したい

ひとつのスクリプトで複数のExcelファイルからデータを取得したいのですが、 うまくいきません。 スクリプトは下記の通りです。
// A1には『りんご』 A2 には『ごりら』

PT1 = "C:\Users\UWSC\Desktop\TEST1.xls"
PT2 = "C:\Users\UWSC\Desktop\TEST2.xls"

Excel = XLOPEN(PT1)
PRINT XLGETDATA( Excel,"A1") //結果:りんご

Excel = XLOPEN(PT2)
PRINT XLGETDATA( Excel,"A2") //結果:ごりら
PRINT XLGETDATA( Excel,"A1") //結果は空になる

対策を教えて下さい。

COMオブジェクトの認識の問題ですね。

エクセルの操作はExcel = XLOPEN(ファイル名)と考えがちですが、
実際は戻値 = XLOPEN(ファイル名)です。
なので、戻値のCOMオブジェクトを適切に設定すれば、解決します。

修正コード

PT1 = "C:\Users\UWSC\Desktop\TEST1.xls"
PT2 = "C:\Users\UWSC\Desktop\TEST2.xls"

Excel = XLOPEN(PT1)
PRINT XLGETDATA( Excel,"A1") //結果:りんご

Excel2 = XLOPEN(PT2)
PRINT XLGETDATA( Excel2,"A2") //結果:ごりら
PRINT XLGETDATA( Excel,"A1")  //結果はりんご

ちなみに、COMオブジェクトをクリアーしないで、質問のコードを連続して走らせると、
『空』→『ごりら』→『空』になります。

タグ

2013年3月6日 | コメントは受け付けていません。 |

カテゴリー:Q&A

ブックを保存し閉じる

ブックを保存し閉じる


ActiveWorkbook.Save
ActiveWorkbook.SaveAs(ファイル名)
ActiveWorkbook.Saved
ActiveWorkbook.Close

ブックを保存し閉じる

ブックを上書き保存(Save)、別名で保存(SaveAs)をすることができます。
またブックの変更後に保存されたか否かをSavedで取得することができます。
最後にCloseとすることでブックが閉じられます。

EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
EXCEL.Workbooks.add()
EXCEL.ActiveWorkbook.Save
EXCEL.ActiveWorkbook.SaveAS("C:\myBook.xls")
PRINT "保存済み? "EXCEL.ActiveWorkbook.Saved
EXCEL.ActiveWorkbook.Close

上記のスクリプトを実施すると、ブックの保存やクローズが確認できます。
なお、上書き保存時に保存されるパスはご自身のマシンにより異なります。
※例えばマイドキュメントに保存されます

保存状況に応じて保存する

Savedを使うことにより、未保存時はFalse、保存時はTrueが返ります。
条件分岐に使用し、未保存ならば上書き、保存済みならば別名で保存をするようにしてみます。
スクリプトは下記のとおりです。

この投稿の続きを読む »

タグ

2013年1月14日 | コメントは受け付けていません。 |

カテゴリー:UWSCとExcel


このページの先頭へ