Excelの不要シートを削除する

excelの不要シートを削除する処理を考えました。
しかし、どうしても削除が途中で止まってしまいます。
wf:
Excel Application Scope : VTemp02 +VTempF02 <絶対パスとファイル名の変数
assgin:
VAllsheets = VWb01.GetSheets.ToArray >VAllsheetsはstring
VWb01はworkbookapplication
for each 以降でifを入れ削除対象外のsheetを指定
以下処理

エラー:The sheet does not exist.
また、enter : Cannot find the UI element corresponding to this selector: "またとなります。

再度考え.netでsheet削除を考えました。

上記のfor each 以降でifを入れ削除対象外のsheetを指定までは同様で削除処理を.net利用にしました。
invoke code
edit argumentsに、
name: item
direction: in
type: string
value: item.tostring

code:
Dim ws As Microsoft.Office.Interop.Excel.Worksheet
ws=CType(wb.Sheets(item.tostring),Microsoft.Office.Interop.Excel.Worksheet)
ws.Delete()

invoke code で文法エラーとなります。

2点指定したシート削除の方法考えましたがうまくいきません。
ご教示いただければと思います。

@matrix99999 さん

シート削除について、下記サンプルをご参照ください。

なお、逆に考えて、シートを削除するではなく、
ソートをコピーする時に、不要シートをコピーしないとしていかがでしょうか。
その後、元ファイルを削除すればよいと思います。
従って、Copy Sheetというアクティビティがあるので、手軽に実現できるでしょう。
しばらく唯一の欠点は、コピー先は新規の場合、初期シートのSheet1も削除する必要です。
でも、初期シート有りのテンプルファイルなどを用意すれば、その問題が回避できます。

ちなみに、
RPA処理の中に、万が一のことを免れて、
直に削除するという操作をしないほうがよいと思います。
ファイルでも、シートでも、
「処理の先にコピーを作成して、処理成功の場合だけで元を削除する」は
RPAベストプラクティスの一つです。

ありがとうございます。
元データは退避して利用するようにしました。
1点確認したいことがございます・

ALT + h
でショートカットメニューボタンが表示されます。
後続処理のsend hotkeyでdsをしてした場合、dsコードがショートカットメニューに
対応せずシートに書き込まれてしまいます。
selectorは同一です。

この点ご教示いただければと思います。

@matrix99999 さん

セレクタは下記のようにリボンまで設定してみてください。

<wnd app='excel.exe' cls='XLMAIN' title='*' />
<wnd cls='MsoCommandBar' title='Ribbon' />
<wnd cls='MsoWorkPane' title='Ribbon' />
<wnd aaname='Ribbon' cls='NetUIHWND' />

1 Like