プロが教える店舗&オフィスのセキュリティ対策術

知人から貰ったexcelvbaですが、
私のwin10で上手く機能せず、知人に確認したところ、
win7では間違いなく機能するとのこと。
該当する箇所を診ましたが分かりません。
宜しくご指導ください。

・excelはexcel2003です。
・上手く機能しないのは私のwin10です。
・問題ないと言うのは知人のwin7です。

内容ですが、以下が実際のコードです。
1.ActiveSheet.Shapes.AddLine(34.5, 163.5, 171.75, 138).Select
2.Range("A11:D12").Select
3.Selection.Delete Shift:=xlToLeft

1で引いた線を2と3で消していますが、win10では消えません。
知人はwin7では問題無く消えると言っています。

試してみたのは、
1で引いた線が2の範囲をはみ出していたので、
余裕をもって範囲を変更してみましたが結果に変化なしです。
(全く消えず残っています。)

win7とwin10でexcel2003の動きに違いが在るとしか思われませんが、
ズバリの原因を教えてください。
宜しくお願いします。

A 回答 (8件)

No4です



>このセル範囲にいろいろな線を引くので、
>それの特定方法が分からず、
>セルごと消したということです。
とは言っても、質問者様とその知人様とで、セル範囲が違うというようなことが、実際に起きているのですよね?
No4にも書きましたように、「線を消したければ線を消す」のが常道です。

>『線全体を指定するようなコード』を教えて頂けるとありがたいです。
エクセルでは、線はShapeといわれるオブジェクトになっていますが、これは図形やテキストボックス、コントロール、グラフなど全部をひっくるめて同じ範疇になっているので、「線」を特定するのは結構面倒です。
シート上のオブジェクトを全て消しても構わないようであれば、
 For Each s In ActiveSheet.Shapes
  s.Delete
 Next s
とするのが一番簡単です。
(上述のように、消したくないコントロールやグラフ等が存在する場合はこの方法は使えません)

そのオブジェクトが指定セル範囲にあるか否を判断することはできますが、
>1で引いた線が2の範囲をはみ出していたので、
というようなことが実際に起こっているようなので、これが良い方法とは思えません。

全体の構成が不明ですけれど・・・
>このセル範囲にいろいろな線を引くので、
というので、線の引き方がご提示のように固定座標で引いているのであれば、その範囲もわかっているでしょうから、その範囲内にあるものを消せば良くなります。
(セル範囲とは異なり、座標で判断すれば、環境によって位置がずれるようなことはありません)

一方で、線を引いた際に「後で消す線」であることはプログラム上でわかっているのでしょうから、そのShapeに名前を付けておいて、それで特定するのが確実かつ簡単です。
例えば、ご提示の例であれば、
 ActiveSheet.Shapes.AddLine(34.5, 163.5, 171.75, 138).Select
 Selection.Name = "delete_line01"
  '何らかの処理を行う。
  ' ・・・・・・・
 '線を消したくなったら
 ActiveSheet.Shapes("delete_line01").Delete
のように、付与しておいた名前のShpaeを消せばよくなります。
(名前は自由に付けられます)


とは言うものの、一連の処理の中で「線を描いて、後で消す」ということが必要になるようなケースを思いつけません。
私なら、どうせ消してしまうのであれば、最初から描かない方法を考えますけれど・・・
    • good
    • 0
この回答へのお礼

何回もご親切な回答ありがとうございます。
仰るとおりでして、
その後、(邪道ですが)セル範囲を広げてみたら綺麗に消えました。
どうやら同じ位置で引いているのに、
win7とwin10ではずれるみたいです。
(さらに、明らかにはみ出していなかったのですが)

ということで、邪道ながらやりたいことは出来ましたが、
今回教えて頂けた「名前を付ける」という方向で考えてみます。
そこまでやる必要もないかもしれませんが、
私の勉強のためです。

なお、わざわざ引いて消してしまう、という件ですが、
ユーザーに見せてそれに対して次の手を考えさせるという繰り返しです。
ということで、ユーザーが引いては確認、また引いては確認、、、、
これはこれで意味があるかなと。

お世話になりました。
取りあえずこれで本件はクローズしておきます。
また、関連で質問する際にも宜しくお願いいたします。

お礼日時:2023/07/20 19:51

Win 7 と Win 10 の動きの違いは、SP3 のインストール有無が関係しているかも知れません。



・OfficeOffice 2003 Service Pack 3 (SP3)
https://web.archive.org/web/20121006023317/http: …
    • good
    • 0
この回答へのお礼

私は貰ったexcelを実行しているだけなので、
細かな点は分かっていません。
もう少し調べてみます。

お礼日時:2023/07/20 18:13

色々試す中の1個です。


HomeGroupProviderを停止する。

start⇒windows管理ツール⇒サービス
一覧の中のHomeGroupProviderをダブルクリックし、停止を選択してok。
    • good
    • 0
この回答へのお礼

未だ調べられていません。
調べてみます。

お礼日時:2023/07/20 18:14

私は Excel 2000 で作成した結構複雑な Excel VBA のファイルを、Windows 7 でも Windows 10 (共に 64bit Pro) でも正常に動かせています。

当時の設計・製作をしている機械の部品表を整理して、どれくらいコストが掛かるか算出する目的て作ったかなり古い Excel VBA です。

Excel 2000 は、当然 Windows 10 には対応していませんが、おかしな点はありません。普通に入力できるし、大きな表も難なく計算できます。設定ウィンドウの表示が昔風なくらいです(笑)。最近の Libre Office 等でも読み込むことはでき、通常の表計算は可能ですが、流石に VBA が動作しません(笑)。

恐らく Windows 7 や 10 には関係なく、環境の問題のような気がします。私は、Windows 10 で使うに当り Excel の OS 互換性は設定していませんが、それを試してみてどうでしょう?

因みに、Excel 2000 では全く問題がないのに、同時期の Word 2000 は日本語入力(FEP)が駄目でまともに入力できません。ただ編集する分には動作するので、テキストエディタで文章を入力し貼り付けて編集することは可能です。しかしそれは面倒なので、仮想環境 (VirtualBox) で Windows XP を立ち上げ、そこで使ってみようと思っています。
    • good
    • 0
この回答へのお礼

問題無く機能するということで、少しは救いが持てそうですが、なんででしょうか。
不思議です。
環境は細かいので、聞けていません。
どちらもosは64ビットです。

お礼日時:2023/07/20 18:11

こんにちは



>win7とwin10でexcel2003の動きに違いが在るとしか思われませんが~
その可能性がないとは言えませんけれど、同じ2003で動作しているということですので、OSの差以前に考慮すべきことがあるように思います。

>1で引いた線を2と3で消していますが、win10では消えません。
ご提示のコードが何を目的として作られているものなのか不明ですけれど、同じ環境であっても「線が消える」場合と「消えない」場合はあると考えられます。

ひとつの例として、図形(=線)が作成された際のプロパティが、「セルに合わせて移動やサイズを変更する」になっているかいないかで、セルの削除に伴って図形が削除されるかどうかは変わります。
それぞれのデフォルト設定がどのようになっているかが関係してきます。
例えば、ご提示のように線を作成するだけでのコードを実行した場合、作成された線が黒色だったり赤色だったりと、それぞれの環境によって違いが生じる可能性があります。
線を描く位置も絶対位置で指定していますので、セルの幅や高さの設定がどうなっているかによって、線とセルの位置の関係も変わってきます。

そもそもですけれど、「セルを削除をすることによって図形を削除する」ことを期待しているのであれば、考え方が誤っているとも言えます。
図形とシートのセルはそれぞれ独立した存在なのですから。
ですので、
>1で引いた線が2の範囲をはみ出していたので、~~
のようなことも充分に起こり得ますし、上記のような設定も関係してきますので、ご提示のコードそのものが「環境に依存するコード」になっていると言えます。


基本的な考え方として、「図形を消去したければ、その図形を消去する」のが当然の方法と思いますし、「セルを削除したければ、セルを削除する」というコードの記述方法にしておけば、ご質問のような妙な問題は生じないはずです。

ご提示のコードを例にするならば、
>1.ActiveSheet.Shapes.AddLine(34.5, 163.5, 171.75, 138).Select
  Selection.Delete
>2.Range("A11:D12").Select
>3.Selection.Delete Shift:=xlToLeft
とでもしておけば、環境によらずに図形もセルも削除することが可能なはずです。

とは言っても、描いた図形を削除するのであれば、最初からその図形を描く必要はないはずなので、「意図不明」なコードではありますけれど・・
    • good
    • 1
この回答へのお礼

細かな説明、ありがとうございます。
内容が分かっていなかったのですが、
線の削除ではなく、セルの削除だったのですね、
説明されて良く分かりました。

知人に聞いたところ、
このセル範囲にいろいろな線を引くので、
それの特定方法が分からず、
セルごと消したということです。

セル範囲に在る線すべてを知ることが出来れば解決できると思います。
例示で頂いたように『線全体を指定するようなコード』を
教えて頂けるとありがたいです。

お礼日時:2023/07/20 18:09

Excel 2003 には 32bit版 と 64bit版 があります。

Win 7 と Win 10 は同じものをインストールしていますか?それによる違いがあるかも知れません。

Excel 2003 は古すぎるので、正常に動作しなくても不思議ではありません。

とりあえず、下記を試してみたらどうですか。

1. スタートメニューから Excel を右クリックして「ファイルの場所を開く」
2. Excel のショートカットを右クリックして「プロパティ」
3. 互換性タブで「互換モードでこのプログラムを実行する」にチェックを入れて、Windows 7 を選択
4. 適用ボタンをクリック
5. Excel のショートカットを実行して、ファイルを開く
    • good
    • 0
この回答へのお礼

互換性タブの回答、ありがとうございました。
win7にしてやってみましたが、
代わり有りませんでした。

お礼日時:2023/07/20 18:03

Excel2003のサポート期限は2014年の春(だったかな?)で切れています。


したがってそれ以降はどのOS環境でも動作保証はありません。
「向こうのWindows7パソコン上のExcel2003で動作するマクロが、こっちのWindows10パソコンのExcel2003では正しく動作しない」ということがあっても何の不思議もありません。
一方ではたまたま動くし、もう一方ではたまたま動かないだけのことです。
ちなみにどちらのExcel2003も最終更新情報を適用してあったとしてもOSが異なるとインストールされている中身は微妙に異なる可能性があります・・・というかそう考えるのが妥当です。特にMicrosoft製品の場合は。(^^;

それよりももう一方ではどうすれば動くかを探る方が大切かと。
    • good
    • 0

そもそもwin7でもwin10でも、Excel2007以前はバージョンでは、動作は保証されていません。


win7では、たまたま動いたけれどwin10では動かなかったというだけのことです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!