107070
UWSC 仮 掲示板
投稿時に「証明書が不正です」と出る場合には、JavaScriptをオン
動作不具合での質問の場合には環境を表記(OS,バージョン等)
タイトルは内容を表し、内容はネットゲーム関係禁止
自身でコードを書く気の無いナマケモノは特に質問禁止
失敗作でもコードを投稿すること(具体性の無い質問は無視される可能性大)

UWSC掲示板 が復活することを祈り、それまでの繋ぎとして。
環境設定[s7777777]

CSV区切りのファイルを正しく区切って呼び出したい / けいち
お世話になります。
CSV区切りのファイルに

2023,3,1,"新規","20230215-0001",5,"箱No1,No2",1000

が保存されている時(実際は数万件あります)
たまに品名に半角カンマ「,」が含まれており品名は
ダブルクォーテーションで囲まれているのですが
数値などはダブルクォーテーションが付いていません。
SPLITを使うと品名まで分かれてしまいます。
1文字目で処理分けすると分けられるのですが件数が多い為に遅いです。
もう少しスッキリ早く終わるような方法はないでしょうか?
エクセルで開くと正しく読み込んでくれます(凄いですね)
以下コードです。

print "SPLITを使って区切りを,にした場合"
FID = fopen("data.csv",F_READ)
data = fget(FID,1)
FCLOSE(fid)
配列 = SPLIT(data,",")

for i = 0 to length(配列)-1
print 配列[i]
next

print "-------------------------------------"
print "1文字目で処理分けする"
data2 = data
while 0 < POS(",",data2)
//data2の一文字目が"
if "<#DBL>" = copy(data2,1,1) then
DBL = pos("<#DBL>",data2,2) //2個目の"を探す
print copy(data2,2,DBL-2)
data2 = copy(data2,DBL+2) //取得した分を消去

else
CAN = pos(",",data2) //,位置を探す
print copy(data2,1,CAN-1)
data2 = copy(data2,CAN+1) //取得した分を消去
endif
wend
print data2


-----結果-----
SPLITを使って区切りを,にした場合
2023
3
1
"新規"
"20230215-0001"
5
"箱No1
No2"
1000
-------------------------------------
1文字目で処理分けする
2023
3
1
新規
20230215-0001
5
箱No1,No2
1000

No.1576 2023/03/19(Sun) 04:46:19

Re: CSV区切りのファイルを正しく区切って呼び出したい / stuncloud
fgetがcsvに対応しているのでそれを使うのが一番簡単なのではないでしょうか

fid = fopen("data.csv", F_READ)
for i = 1 to fget(fid, F_LINECOUNT)
 col = 0
 while TRUE
  col = col + 1
  value = fget(fid, i, col) // 第三引数で列を指定
  if length(value) = 0 then
   // 値が空であればループを抜ける
   // このサンプルでは空の列があることを考慮していません
   break
  else
   print value
  endif
 wend
next
fclose(fid)

// 出力
2023
3
1
新規
20230215-0001
5
箱No1,No2
1000


ちなみにUWSCRであればsplit()でCSV分割ができるようになっているので以下のように書けます

fid = fopen("data.csv", F_READ)
for i = 1 to fget(fid, F_LINECOUNT)
 row = fget(fid, i)
 // 第5引数TRUEでCSV扱い、この場合第3第4引数は無視される
 csv = split(row, ",",,, TRUE)
 for value in csv
  print value
 next
next
fclose(fid)

// 出力
2023
3
1
新規
20230215-0001
5
箱No1,No2
1000

No.1577 2023/03/19(Sun) 11:46:15

Re: CSV区切りのファイルを正しく区切って呼び出したい / けいち
(解決)
stuncloud様
速く処理したいと1行まとめて読み込んだ結果
より遠回りをしてかえって遅くなっていたようです。
列読み込みをする方が速くなる事もあるんですね
何日も悩んであれこれ思いついた方法があっさりと覆され改善しました。
UWSCRもより拡張され使いやすくなっているのを知りました。
ありがとうございました。

No.1578 2023/03/19(Sun) 13:00:25
別ファイルのExcelのマクロをもう一つのファイルで使いたい / sen
excel_M = XLOPEN("マクロ.xlsm")
sleep(2)
excel= XLOPEN("転記先.xlsx")
sleep(2)
Excel.Run ("マクロ集!Macro1") //エラー

お世話になっております。
別ファイルのExcelのマクロをもう一つのファイルで使いたいのですが、
Runの部分でエラーになります。
()の書き方が違うのだと思いますが、分かりません。
ご教授頂けませんでしょぅか?

No.1574 2023/03/18(Sat) 15:22:40

Re: 別ファイルのExcelのマクロをもう一つのファイルで使いたい / sen
解決しました。
Excel.Run ("マクロ.xlsm!Macro1")
が正解でした。

やっぱり、uwsc最高です。
今後ともよろしくお願い申し上げます。

No.1575 2023/03/18(Sat) 15:37:04
XLGETDATAでアクティブセルの値を収得したい / sen
お世話になっております。

KBDを使用せずにXLGETDATAを使用したいのですが、
うまくいきません。
ヘルプには「省略された場合は現在の選択セル領域」と
書かれているので大丈夫そうなのですが、エラーがでます。
GETACTIVEOLEOBJを使用するのも考えたのですが、
どうしてもCOMエラーが走ります。
ご教授頂けましたら助かります。

DIM 受注番号
EXCEL = GETID("Nrb0000.CSV","XLMAIN",-1)
CTRLWIN(EXCEL,activate)
SLEEP(0.5)
受注番号=XLGETDATA(Excel)
//KBD(VK_CTRL,DOWN,10)
//KBD(VK_C,CLICK)
//KBD(VK_CTRL,UP)
SLEEP(0.5)
受注番号=GETSTR(0)
受注番号 = replace(受注番号,"<#CR>","")
print "受注番号="+受注番号+"■"

No.1560 2023/03/05(Sun) 21:41:06

Re: XLGETDATAでアクティブセルの値を収得したい / stuncloud
> EXCEL = GETID("Nrb0000.CSV","XLMAIN",-1)
> 受注番号=XLGETDATA(Excel)

ここが誤りです
XLGETDATAの引数はウィンドウIDではなくExcelオブジェクトです

No.1562 2023/03/06(Mon) 17:48:52

Re: XLGETDATAでアクティブセルの値を収得したい / sen
ご返事ありがとうございます。
下記のように書き換えたとき、
起動済みのエクセルを捕獲して欲しいのですが、
新しくエクセルを2重にファイルを開いてしまいます。
これは、どこが間違っているのでしょうか?

DIM 受注番号
id = GETID("Nrb0000.CSV","XLMAIN",-1)
CTRLWIN(id,activate)
SLEEP(0.5)
Excel = XLOPEN("Nrb0000.CSV")
受注番号=XLGETDATA(Excel)
SLEEP(0.5)
print "受注番号="+受注番号+"■"

No.1564 2023/03/07(Tue) 22:52:41

Re: XLGETDATAでアクティブセルの値を収得したい / stuncloud
> Excel = XLOPEN("Nrb0000.CSV")
で新しく開いているからです

すでに開いているものを操作する場合はgetactiveoleobjを使う必要があります
(COMエラーが出ると書かれていましたがそれについては詳細がわからないのでお答えできることはありません、ヘルプをよく見て正しく使ってください)
どうしてもだめそうなら、xlopenでファイルを開いて操作するという設計に変更することをおすすめします

No.1565 2023/03/08(Wed) 01:06:52

Re: XLGETDATAでアクティブセルの値を収得したい / sen
ありがとうございます。
会社のパソコンではうまく捕獲できました。
ただ、自宅のパソコンでは駄目で、下記のような過去のレスを参照してみたのですが、
うまくいきません。uwscは管理者と通常の両方でやってみましたが、うまくいきません。
comエラーは、「操作を利用できません」とでます。
家で作って、会社で活用するので何とかできるようになりたいのですが、
他のヒントはないでしょうか?
ご教授頂けましたら助かります。

//
//Excel.exeを管理者として実行していて、UWSCが通常実行だと同じエラーが表示されました
//Excelの実行方法とUWSCの実行方法に差異はないでしょうか?
//      UWSC管理者 UWSC通常
//Excel管理者   ○     ×
//Excel通常    ×     ○
//https://www3.rocketbbs.com/13/bbs.cgi?id=umiumi&page=2


DIM 受注番号
Excel = GETACTIVEOLEOBJ("Excel.Application")
id = GETID("Nrb0000.CSV","XLMAIN",-1)
CTRLWIN(id,activate)
SLEEP(0.5)
受注番号=XLGETDATA(Excel)
SLEEP(0.5)
print "受注番号="+受注番号+"■"

No.1566 2023/03/12(Sun) 13:08:47

Re: XLGETDATAでアクティブセルの値を収得したい / stuncloud
Excelの修復インストールを行うか、アンインストールして再インストールで改善されるか試してみてください
No.1567 2023/03/12(Sun) 17:57:42

Re: XLGETDATAでアクティブセルの値を収得したい / sen
ご返事ありがとうございます。
実は今日間違ってアンインストールをしてしまって、
慌てて、Excel2021を購入してみました。
しかし、comエラーは、「操作を利用できません」とでます。

No.1568 2023/03/12(Sun) 20:57:35

Re: XLGETDATAでアクティブセルの値を収得したい / stuncloud
Excelは64ビット版ですか?32ビット版ですか?
64ビットだとUWSCから使えない、ということがあるかもしれません
(UWSCが32ビットなので)

No.1569 2023/03/12(Sun) 23:46:43

Re: XLGETDATAでアクティブセルの値を収得したい / sen
64 ビットです。
No.1570 2023/03/13(Mon) 00:53:21

Re: XLGETDATAでアクティブセルの値を収得したい / sen
お世話になっております。

GETACTIVEOLEOBJを使用せずに、Excelオブジェクトを収得はできないものでしょう??

No.1571 2023/03/18(Sat) 10:55:54

Re: XLGETDATAでアクティブセルの値を収得したい / stuncloud
getactiveoleobjではなくcreateoleobjは成功しますか?
それも失敗するようであればそもそも32ビット版Excelでないと操作できないのでは?という話になります
32ビット版を試せるようならそちらでやってみてください

No.1572 2023/03/18(Sat) 11:31:12

Re: XLGETDATAでアクティブセルの値を収得したい / sen
ご返事ありがとうございます。

32ビット版は難しいのですが、XLOPENだとうまくいきます。

No.1573 2023/03/18(Sat) 13:45:43
VSCODEの環境 / taro
VSCODEでのUWSCの開発をしたいのですが、拡張機能がない旨のエラーメッセージがでて困っています。

https://marketplace.visualstudio.com/items?itemName=nalulabo.uwsc-support
上記のリンクも今一インストールの方法がわからず頓挫しております。

現在、詳細なインストール方法が掲載されているサイトをさがています。

ご存じの方がおられましたら、リンクをよろしくお願いします。

No.1561 2023/03/06(Mon) 14:02:45

Re: VSCODEの環境 / stuncloud
VSCodeの拡張機能のパネルを開いて、パネル上の検索バーで「UWSC」と入力して表示された拡張機能を選択し、インストールボタンを押すだけです
デフォルトのキーバインドであればCtrl+Shift+Xで拡張機能のパネルが開けます

ただしこの拡張機能はシンタックスハイライトしか提供されていないことに注意してください
(補完機能などはありません)

No.1563 2023/03/06(Mon) 17:54:37
処理が歯抜けになる / YMK
データ群にアクセスし、高速化のために同時進行処理しているのですが、
処理が歯抜けになってしまいます。

以下は、症状が起きるプログラムですが、
1〜30000の数字が(スレッド処理なので順番はともかく)全て出力されるはずですが、
実際には、7522〜7541が抜けたり、4239〜4261が抜けたり、また、やるときによって抜ける箇所がバラバラになってしまいます、、

どのような修正をすれば良いかご教授下さい。

--------------------------------------------------------
Public str = "",スレッド数 = 0 ,フラグ[100000]

for i = 1 to 30000 step 20
thread 情報取得(i)
スレッド数 = スレッド数 +1
while スレッド数 > 60 //スレッドは60を超えないように
wend
next

for i = 1 to 30000 step 20//全てのスレッドの完了待ち
while フラグ[i] <> 1
sleep(0.001)
wend
next

//結果をテキストに出力
f = fopen("test.txt",F_WRITE)
fput(f,str) ; fclose(f)

PROCEDURE 情報取得(i)
for num = 0 to 19
str = str +(i +num) +"<#cr>"
next

スレッド数 = スレッド数 -1
フラグ[i] = 1
fend

No.1557 2023/02/27(Mon) 10:20:23

Re: 処理が歯抜けになる / stuncloud
> str = str +(i +num) +"<#cr>"
この部分ですかねえ…排他制御なんかがあったほうが良い気がします
ただ、そうするとせっかくthreadで並行処理してるのにstrに詰めるところがボトルネックになりそうですよね

とにかく結果をすべて変数strに入れていくというのがどう見ても悪手なので、まずはそこを見直すのが良いのではないでしょうか
この場合であれば情報取得関数内でF_EXCLUSIVEを付けて書き出すとか?

例示されたコードに関してはこうかな?という話で、実際の解決策はケースバイケースだと思います
ただ、threadでグローバル変数を随時書き換えていくというのはやるべきではないでしょう

No.1558 2023/02/27(Mon) 16:26:39

Re: 処理が歯抜けになる / YMK
stuncloud 様、ご返信有り難うございます。

>threadでグローバル変数を随時書き換えていくというのはやるべきではない

strに随時追記するのではなく、別途配列に代入させたら安定させることが出来ました。

有り難うございました。

No.1559 2023/02/27(Mon) 19:48:33
CREATEFORMで生成したウインドウを全画面にしたい / けいち

CREATEFORMで作ったウインドウを画面いっぱいにしたいのですがオプションを見ても
最大化ボタンまででタイトルバーが残ります。
ウインドウのIDを取得してCTRLWINから最大化も同様でした
なにか特殊な方法が必要でしょうか?
過去ログから探してみましたがそれらしきスレを参考にしましたがリンク先は既に無くなっていました。
良い方法は無いでしょうか?

No.1552 2023/02/21(Tue) 22:23:22

Re: CREATEFORMで生成したウインドウを全画面にしたい / stuncloud
SetWindowLongでウィンドウスタイルを変更し、WS_POPUP or WS_VISIBLEのみにするとクライアント領域だけが表示される (タイトルバーなどが消える) ようです
その後画面幅いっぱいまでウィンドウをリサイズすればフルスクリーンのような表示にできると思います
事前にGetWindowLongでもともとのスタイルを保持しておけば、再度SetWindowLongを実行することで元のウィンドウの状態に戻せます
スタイルの取得・変更はGWL_STYLEです

No.1553 2023/02/21(Tue) 23:02:14

Re: CREATEFORMで生成したウインドウを全画面にしたい / けいち
stuncloud様
レスありがとうございます。
SetWindowLongAを検索しながら下記のようなサンプルを作っています
いろいろな検索結果からためしていますが
使い方がわからずエラーがでてしまいます。
どのようにすればできるでしょうか?

DEF_DLL GetWindowLongA(HWND, int): dword: User32
DEF_DLL SetWindowLongA(HWND, int, dword): dword: User32
CONST GWL_STYLE = -16
CONST WS_CAPTION = $C00000


// フォーム作成
obj = CREATEFORM("about:blank", "タイトル", True, FOM_NOHIDE,200,200,0,0)  // フォーム生成
obj.ToolBar = False
obj.StatusBar = False
SetWindowLongA(obj.Hwnd, GWL_STYLE, GetWindowLongA(obj.Hwnd, GWL_STYLE) - WS_CAPTION)

obj.Document.write(フォーム)       // HTMLを書き込む

while obj.Visible              // 画面が出ている間
  ifb GETFORMDATA("OKボタン") then // OKボタンが押された
MSGBOX("OK押した")
  endif
  Sleep(1)
wend

TextBlock フォーム
 <form method="POST">
  <input type="submit" value=" OK " name="OKボタン">

 </form>
EndTextBlock

No.1554 2023/02/22(Wed) 11:48:41

Re: CREATEFORMで生成したウインドウを全画面にしたい / stuncloud
> 使い方がわからずエラーがでてしまいます。
エラーで止まった場合は
・どの行で発生したのか
・エラーメッセージ
を書いてもらわないとわかりません
この二点は必ず書くようにしてください

結論から言うと悪いのは
> obj.Hwnd
です、CreateFormのオブジェクトにhwndというプロパティはありません
このあたりはエラーメッセージがCOMエラーであることから簡単に推察できますね (def_dllの関数はCOMエラーを吐かない)

エラーメッセージをちゃんと読むことや
> SetWindowLongA(obj.Hwnd, GWL_STYLE, GetWindowLongA(obj.Hwnd, GWL_STYLE) - WS_CAPTION)
といった書き方をやめてGetWindowLongAの引数を変数に取るなどをしつつ問題点の切り分けをしていけばエラー原因も特定できたと思います
もう少し頑張りましょう


それはそれとして、上記コードを改変してフルスクリーンのサンプルを書いてみました

DEF_DLL GetWindowLongA(HWND, int): dword: User32
DEF_DLL SetWindowLongA(HWND, int, dword): dword: User32
CONST GWL_STYLE = -16
// CONST WS_CAPTION = $C00000
const WS_POPUP = $80000000
const WS_VISIBLE = $10000000

// フォーム作成
obj = CREATEFORM("about:blank", "タイトル", True, FOM_NOHIDE,200,200,100,100)
obj.ToolBar = False
obj.StatusBar = False
id = getid(GET_FORM_WIN)
hwnd = idtohnd(id)
oldstyle = GetWindowLongA(hwnd, GWL_STYLE)
newstyle = WS_POPUP + WS_VISIBLE

obj.Document.write(フォーム)

while obj.visible
 if getformdata("フルスクリーン") then
  SetWindowLongA(hwnd, GWL_STYLE, newstyle)
  ctrlwin(id, MAX)
 elseif getformdata("元に戻す") then
  ctrlwin(id, NORMAL)
  SetWindowLongA(hwnd, GWL_STYLE, oldstyle)
 endif
wend

TextBlock フォーム
<form method="POST">
<input type="submit" value="フルスクリーン" name="フルスクリーン">
<input type="submit" value="元に戻す" name="元に戻す">
</form>
EndTextBlock

No.1555 2023/02/22(Wed) 13:55:34

Re: CREATEFORMで生成したウインドウを全画面にしたい / けいち
stuncloud様
エラー特定の方法やサンプルコードまで頂き感謝致します。
元のサイズに戻す方法も大変参考になりました。
貴重なお時間を割いて頂きありがとうございました。

No.1556 2023/02/22(Wed) 22:36:26
UWSCの文字列の結合について / haku
CSVからデータベースへレコードを登録しようとしています。
その際に大量に文字列の結合が必要なのですが、想像していた以上に処理が遅くて困っています。
速度をアップさせる方法がないでしょうか?

No.1550 2023/02/16(Thu) 17:44:34

Re: UWSCの文字列の結合について / stuncloud
要約すると
・CSVから得たデータをDBに書き込む
・文字列結合処理がある
・一連の処理が遅く感じる
・早くしたい
という内容なのでこれだけだと回答は難しいです

処理が遅いのは文字列結合部分だけなのでしょうか?そもそも文字列結合は本当に遅いのでしょうか?
一連の処理の要所要所で実行時間を計測し、遅い部分を突き止めつつそのコードの提示をしてもらうといったことをしていただく必要があるように思います

No.1551 2023/02/16(Thu) 18:42:46
UWSCからsqlite3.dllを使ってDB操作 / トリビア
UWSCからsqlite3のデータベースを扱いたく、exe版を利用していましたが、
DEF_DLLでsqlite3.dllを呼び出し使用する方法を探しています。
こちら方法をご教示いただけないでしょうか。

No.1544 2023/02/11(Sat) 00:02:35

Re: UWSCからsqlite3.dllを使ってDB操作 / stuncloud
C++ですがわかりやすいものがありました
https://seraphy.hatenablog.com/entry/20061031/p1
sqlite3_open16()でDBに接続してsqlite3_exec()でSQLを実行する、という流れのようですね
sqlite3_openだとUTF8ですがsqlite3_open16ならUTF16を使うようです
UWSCであればUTF16のほうが使いやすいと思います (def_dllの際にwstringを使う)

関数の解説は以下から見れます、ちょっと読みにくい…
https://www.sqlite.org/c3ref/funclist.html

def_dll sqlite3_open16(wstring, var dword):int:sqlite3.dll
def_dll sqlite3_exec(dword, wstring, dword, dword, dword):int:sqlite3.dll
でいいのかな?あまり自信ないですがいろいろ試してみてください
・openの第二引数はポインタのポインタなのでここで得られた値(アドレス)の先にある値を取らないとDBハンドルのポインタにならない気がする
 ・{var dword} でなんとかならんか?RtlCopyMemoryするのが無難か
・dwordのとこにNULLを入れる場合はNULLではなく0でいいです

No.1545 2023/02/11(Sat) 01:37:25

Re: UWSCからsqlite3.dllを使ってDB操作 / トリビア
stuncloudさん
ご教示ありがとうございます。
いただいた情報をもとに少し試行錯誤してみます!
またご報告いたします

No.1546 2023/02/11(Sat) 11:42:08

Re: UWSCからsqlite3.dllを使ってDB操作 / stuncloud
sqlite3_open16の第二引数、ポインタのポインタについて補足します

まず、var dwordとしてポインタを32ビット整数として受けます
ポインタなので受けた値が示すのはメモリ上のアドレスとなります
このアドレス上にある値がsqliteのハンドルのポインタです (sqlite3_execに渡す値)
あるアドレスが示す先にある値を任意の型で得るための関数が以下になります

def_dll RtlMoveMemory(var dword, dword, dword):kernel32

第一引数で得たい値を受けます、ポインタなので型をdwordとします

コード例は以下の通りです (コードの検証はしていないためこの通りに動かない可能性があります)

ppdb = 0
sqlite3_open16(filename, ppdb) // ハンドルのポインタのポインタをppdb変数で受ける

// ハンドルのポインタを受ける変数
pdb = 0
RtlMoveMemory(pdb, ppdb, 4) // ppdbが示すアドレスにあるデータをdword型としてpdbに受ける


sqlite3_exec(pdb, sql)

No.1547 2023/02/11(Sat) 12:46:43

Re: UWSCからsqlite3.dllを使ってDB操作 / トリビア
詳細な解説をいただき、ありがとうございます。
引き続き下記ですが操作が出来ないので試行錯誤してみます!


def_dll sqlite3_open16(wstring, var dword):int:sqlite3.dll
def_dll sqlite3_exec(dword, wstring, dword, dword, dword):int:sqlite3.dll
def_dll sqlite3_close(wstring):int:sqlite3.dll
def_dll RtlMoveMemory(var dword, dword, dword):kernel32

ppdb=0
sqlite3_open16("sample1.db",ppdb)

pdb=0
RtlMoveMemory(pdb, ppdb, 4)

sqlite3_exec(pdb, "create table Data(id, name);")
sqlite3_exec(pdb, "insert into Data(id, name) values (1,2);")
sqlite3_close(pdb)

No.1548 2023/02/11(Sat) 13:37:49

Re: UWSCからsqlite3.dllを使ってDB操作 / トリビア
色々と教えていただきましたが、下記で操作できるようになりましたので、
ご報告いたします。ありがとうございました。

def_dll sqlite3_open16(wstring, var dword):int:sqlite3.dll
def_dll sqlite3_exec(dword, dword, dword, dword, dword):int:sqlite3.dll
def_dll sqlite3_close(dword):int:sqlite3.dll
def_dll RtlMoveMemory(var dword, var dword, dword):kernel32

ppdb=0
ret=sqlite3_open16("sample1.db",ppdb);

pdb=0
RtlMoveMemory(pdb, ppdb, 4)

ret=sqlite3_exec(pdb, "create table Data(id, name);",0,0,0)
ret=sqlite3_exec(pdb, "insert into Data(id, name) values (1,2);",0,0,0)
ret=sqlite3_close(pdb);

No.1549 2023/02/12(Sun) 21:03:55
Selenium edge の再接続について / みつ
どうしてもフレーム操作が必要 (おそらくIEモードがサポートされる2029年頃まで) な為、
Selenium egdeへの再接続が以下で問題ないかご教授をお願いできないでしょうか。

左画面と右に上下2画面の3画面に分かれており、右上で入力検索を行い、右下の結果を取得するを繰り返すので
別画面を開いて対応できません(知識不足かもしれませんが)。

UwscWebDriver の SwitchFrame() で対応したかったのですが、最新のUwscWebDriverでも動きませんでした。
VBAでは動くことを確認できましたが、UWSCで動かしたいです。


edgeバージョン:109.0.1518.70 (公式ビルド) (64 ビット)
edgedriver バージョン:109.0.1518.70 
SeleniumBasicフォルダに msedgedriver.exe では動かなかった為、edgedriver.exe に名称を変更したらVBAでは動きました。現在はedgedriver.exeにしてあります。

前準備
"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --remote-debugging-port=9222 --user-data-dir="C:\Users\Temp_ForEdge"
をbatファイルに記載し起動


driver = CreateOleObj("Selenium.WebDriver")
//driver.SetCapability "ms:edgeOptions", "{""debuggerAddress"":""127.0.0.1:9222""}" ←VBAではこれで再接続できます
driver.SetCapability("ms:edgeOptions", "{<#DBL><#DBL>debuggerAddress<#DBL><#DBL>:<#DBL><#DBL>127.0.0.1:9222<#DBL><#DBL>}") ← UWSCではここでCOM_Errorとなってしまいます。
driver.Start("Edge")
driver.Get("http://www3.rocketbbs.com/601/siromasa.html")

よろしくお願い致します。

No.1541 2023/02/02(Thu) 14:10:44

Re: Selenium edge の再接続について / stuncloud
> <#DBL><#DBL>
<#DBL>一個でいいんじゃないでしょうか
VBAは"を"でエスケープしてますが、UWSCではそこは不要なので

No.1542 2023/02/02(Thu) 14:53:47

Re: Selenium edge の再接続について / みつ
stuncloud 様

毎度的確なご回答ありがとうございます。
ばっちり動きました。
これで何とか動かせそうです。


>VBAは"を"でエスケープしてますが、UWSCではそこは不要なので

知識不足でした。
勉強になります。

またよろしくお願い致します。

No.1543 2023/02/02(Thu) 18:07:40
Funcionの参照渡しから参照戻りについて / haku
下記にて受け取りができずに困っています。
ご助言よろしくお願いします。

HASHTBL Dic1 =HASH_SORT


Dic1 = Test(Dic1)
↑↑↑↑↑↑↑

Function Test(Var Dic)
Dic = HASH_REMOVEALL 
Result = Dic
FEND

No.1538 2023/01/24(Tue) 10:26:37

Re: Funcionの参照渡しから参照戻りについて / stuncloud
問題点は2つあります

> Function Test(Var Dic)

連想配列を受けるのであれば引数名に[]を付ける必要があります

Function Test(Var Dic[])

> Result = Dic

UWSCのユーザー定義関数は配列及び連想配列を戻り値として返す事ができません
参照渡しにより引数として渡した変数が書き換えられるので、ここでは戻り値も不要でしょう

procedure Test(var Dic[])
 Dic = HASH_REMOVEALL
fend

実行例は以下のようになります

HASHTBL Dic1 =HASH_SORT
// 要素を10個追加
for i = 0 to 9
 Dic1[i] = i
next

print length(Dic1) // 10
Test(Dic1)
print length(Dic1) // 0 (Test関数内でDic1の全要素が削除された)

No.1539 2023/01/24(Tue) 11:51:33

Re: Funcionの参照渡しから参照戻りについて / haku
ご助言に感謝しつつコードを修正します。
No.1540 2023/01/24(Tue) 14:10:44

以下のフォームに記事No.と投稿時のパスワードを入力すれば
投稿後に記事の編集や削除が行えます。
200/200件 [ ページ : << 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 20 >> ]

- HOME - お知らせ(3/8) - 記事検索 - 携帯用URL - フィード - ヘルプ - メール - 環境設定 -

- Skin: Modern v2.0 - Author: ロケットBBS -

Rocket Board Type-X (Free) Rocket BBS