こんにちは良です。いつもお世話になります。
環境は
excel2003 vb.net2003 winxpです。
エクセルで空白の列を削除しようとしたのですが
'Dim xlsEntireRow As Excel.Range
'xlsEntireRow = xlRange.EntireRow
'xlsEntireRow.Delete(Left)
'ComObjectRelease(CType(xlsEntireRow, Object))
としたけど削除できませんでした。
どういう方法なら削除できるんでしょうか?
調べたんですがうまい答えが載っていませんでした。
もしよろしけれべご教授のほうよろしくお願いいたします。
今晩は良です。
エラーの内容は
"HRESULT からの例外です : 0x800A03EC。"
です。
> xlsEntireRow.Delete(Left)
フォームのコードで Left と書くと、Me.Left のことで、
フォームの Left (左端の x 座標)ですが?
エクセルの定数を指定しないといけないのでは?
こんにちは良です。
>特攻隊長まるるうさん
いつもいつもお返事ありがうございます!
エクセルの定数を探してみたんですがみつかりませんでした。
どこかのっているサイトを知りませんか?
>エクセルの定数を探してみたんですがみつかりませんでした。
では、探し方を教えますので覚えてください。
その前に、マクロの記録をした時は、どういったコードが記録されましたか?
こちらでは、
[Excel VBA]
Selection.Delete Shift:=xlToLeft
といったコードが記録できました。
xlToLeft が調べるべき定数ですが、間違っても Left とかいう記述になることは
無いと思うのですが?
どういった経緯で Left になってしまったのでしょうか?
ボクに言わせれば、
『適当すぎるよ。ってか自由すぎる。正常な動作するわけがないよ』
…って事なんですが、正しくプログラムする気はありますか?
それが無いなら、時間の無駄なので、レスつけるのやめますから。
エクセルの定数を調べる方法です。
# ※ ただし、エクセルの Object Library を参照設定していなければ
# 使えない方法です。
・Visual Studio のメニューバーから[表示]-[オブジェクト ブラウザ]
を選択してオブジェクトブラウザを表示してください。
・上部に並んでいるアイコンのうち、右端の双眼鏡マークが『シンボルの検索』
になっていると思います。クリックしてください。
・表示されたダイアログで、
検索する文字列…xlToLeft
検索対象…アクティブになっているプロジェクト
参照内で検索…チェックあり
オプション…サブストリングで探すを選択
大文字と小文字を区別する…チェックなし
で検索してください。(使用方法の詳細はヘルプ(MSDN)で確認してください)
・検索結果をダブルクリックすると、定義されている場所に飛びますから
Excel.XlDirection.xlToLeft
であることが分かります。
Public Shared Const という表示の通り、定数になってます。
実際の値は = -4159 となっていると思います。通常はこの定数を
使いますが、参照設定しない場合は、この定数を自分で定義して
使うことになります。
ちなみに行の削除のマクロを記録すると
[Excel VBA]
Selection.Delete Shift:=xlUp
となり、同じグループに Public Shared Const xlUp
も定義されていることが確認できます。
ちなみに、ちゃんと花ちゃんさんのサイトにも載ってます。
[VBレスキュー(花ちゃん) Excelの定数の調べ方]
http://www.bcap.co.jp/hanafusa/dotnet/Excel03.htm#teisuu
こんばんは良です。
<特攻隊長まるるうさん
お返事ありがとうございます。
マクロの記録では確かにxlToLeft
と出ました。書かないですみませんでした。
でも
'xlsEntireRow.Delete(xlToLeft)
とうったら波線が出て、
'xlsEntireRow.Delete(Left)
だと波線が出なかったのでこれでいいのかなと勝手に解釈してしまいました。
申し訳ないです・・・
決して適当にプログラムしているわけではありません。
あと花ちゃんさんのサイトにも出ていたんですね。
検索方法が悪くて出なかったので・・・
>特攻隊長まるるうさん
いつもこんなに長いレスをすみませんです・・・
上記の検索方法でちゃんと検索できました。
いつも本当にありがとうございます!
そして本当に申し訳ないです・・・
>決して適当にプログラムしているわけではありません。
ええ、理解してます。
ただし、やっている事がどれだけお馬鹿な事かを説明しておきます。
気を悪くせずに聞いてください。
>'xlsEntireRow.Delete(Left)
>だと波線が出なかったのでこれでいいのかなと勝手に解釈してしまいました。
このコードの意味は説明しましたが、分かりましたか?
エクセルの列削除の命令の引数に Form の座標を渡していました。
エクセル君はそんなものもらっても、どうしようもないのでエラーを出してました。
現実世界で例えると…魚屋にキャベツを納品する感じ?…どうしろと?
で、これが正しいか?簡単に調べる方法があります。
>'xlsEntireRow.Delete(Left)
Left の部分を選んで右クリック、[定義へ移動]
してみてください。オブジェクトブラウザに飛びましたか?
ツリーの上のほうを見てください。
System.Windows.Forms.Control
のグループの下に居ますよね?。つまり Form に関係していることが
分かります。
エクセルの操作をしていれば、Excel の下のグループに居ないと
おかしいですよね?
>'xlsEntireRow.Delete(Left)
のコードが正しいかどうか?実は2秒で分かることなんです。
質問するのも回答するのも馬鹿らしいでしょ?
Left の場合はフォームのプロパティなので、[F1]キーで
ヘルプにも飛べます。コードの意味はすぐに分かった筈です。
ヘルプの説明に目を通しても30秒で間違ってることが分かります。
以後、自分で分かるようになってください。
こんばんは良です。今は自宅から打っています。
>特攻隊長まるるうさん
・・・そうですね。やっていることがすごく御馬鹿でした。
エクセル削除命令の引き数にフォームの座標を渡してもしょうがないですね・・・
わかりました。本当にすみませんm(__)m
ツイート | ![]() |