マクロの呼び出しでセルがdd/mm/yyyyになる

UiPath Studio内のアクティビティ「VBAの呼び出し」を実行しマクロを走らせると、Excelデータの日付が入力されているセルが「yyyy/mm/dd」から「dd/mm/yyyy」に強制的に変更されてしまいます。

米国の日付の入力式に変換されているのではないかと思い、マクロのスクリプト内に[SaveAs local:=True]を入力しましたが、上手く作動しませんでした。

UiPath上でこの問題を解決する方法はありますでしょうか?

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

forumを検索すると、国コードを設定する方法が見つかります!ja-JP辺りで検索してみてください

これだ!!

はなっち様

ご回答いただきありがとうございます。
早速試してみましたが、結果は変わらずdd/mm/yyyyのままとなっておりました。。。。

他の問題なのでしょうか?

CSVをXLSXに変換保存するマクロなのでしょうか?
形式変換のためでしたら、CSVを読み込んだ際にできるDataTableを
保存すべき名前を指定したEXCELアプリケーションスコープを用意し、「範囲へ書き込む」アクティビティで転記、それから保存ってのも手ですね

はなっち様

ご連絡ありがとうございます。

以下がマクロを走らせたい、csvデータをメモ帳から貼り付けたものです。

スクリーンショット 2021-03-08 102005

csvから確認すると日付部分はyyyy/mm/ddとなっております。

CSVをXLSXに変換保存するマクロなのでしょうか?
→いえ、csvデータを変換してcsvデータのまま保存します。
スクリプト内には文字置換するスクリプトが格納されています。
UiPath上で文字の置き換えもできそうですが、マクロを有効活用したいため、この現象を解決したいと思っております。

マクロで、「End Sub」ではなく、「End SubX」とかすると、実行時にエラーとなります。その際にExcelで開いているシートが見えるので、状況確認ですね。

こちらでやってみました。
image

EXCELApplicationが動いた時
image

ちゃんとなっていますねぇ…

※EXECLの言語設定は以下の通りでした

はなっち様

ご丁寧にありがとうございます。
補足として、UiPathを通さず同マクロを実行すると、日付部分の変更はなく(yyyy/mm/ddのまま)、UiPathを通すと日付の変更(yyyy/mm/dd→dd/mm/yyyy)が発生してしまっているという状況です・・・・

.Netの版数なんですかねぇ。。。

Splitして、最初の要素が4文字ならYYYY/M/D、そうでなかったら、D/M/YYYYとして処理するマクロに改修…とかかなぁ。

抜本的な解決になりませんが。。。

はなっち様

ご連絡ありがとうございます。
色々試してみましたが根本的な解決には至りませんでした。。。

splitした場合でも、UiPath上で保存した時点で、日付が逆に更新されているようです。。。

憶測の話になるのですが、UiPathアクティビティの「エクセルアプリケーション」が上手く操作
からcsvデータを呼び出すと不具合が発生するのかなと考えています。

マクロ自体もreplaceメソッドのみを格納していたので、一度他の方法を探してみようと思います。

アドバイス頂き、ありがとうございました!
引き続き勉強頑張っていきます!

こんにちは

もし可能なら、実際のワークフローやCSV等一式共有いただくと、良いかもしれません。
(文言だけだと状況が良くわかりにくいので)

1 Like

Yoichi様

いつもお世話になっております。
承知しました。一式アップロードさせていただきます。
当方、AWS codecommit を利用しているのですが、そのURLを添付する形でよろしかったでしょうか?

こんにちは

差しさわりなければzipで固めて、ここにupいただくのが手っ取り早いように思えますが...
難しそうであれば、URL添付いただいても良いかと思います。

Yoichi様

失礼しました。
こちらになります。
uipathVba.zip (21.2 KB)
変換前csvデータは「Data」内フォルダに格納しております。

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

こんにちは

ありがとうございます。
拝見しましたが、問題はマクロ処理ではなく、CSVファイルをExcel Application Scopeで開き
これを(CSVとして)上書き保存すると、日付の書式が変わってしまうようです。

ワークアラウンドとしては、例えばマクロ実行後のワークシートを、表示形式を維持オプションを
ONにした状態で、DataTableに読み込み、これをCSV書き出しで出力する方法があるかと思います。
(Excel Appliction Scopeの自動保存は念のためOFFにした方が良いと思います。)

1 Like

Yoichi様

ご連絡ありがとうございます!
早速、同ワークフローを作成し、実行してみたところ上手くいきました!
ただ、一点別の問題が出てしまいました。。。

本番のcsvデータが4000行に及ぶものでして、「範囲に読み込み」のアクティビティでかなり時間がかかってしまっております。
このフォーラムを参考にしながら解決策を企てておりますが、なにかよい方法はありますでしょうか?

こんにちは

これのパフォーマンスは如何ともしがたいところです。

このオプションを使わずに取り込んで、文字列操作等で成形すれば目的は
達成できると思いますが、今回の趣旨のVBA資産の活用の観点からは
合致しないですよね...

Yoichi様

ご連絡ありがとうございます。

「範囲に読込」の件、承知しました。

すこし他のアイデアを参考にしながら、良い方法を探していきたいと思います、ご助言いただきありがとうございました!

1 Like