- ベストアンサー
ブラウザ経由でエクセルVBAを実行するとエラーになる
- ブラウザからエクセルファイルを表示してコードを実行するとエラーになる問題が発生しています。
- エクセル単体では問題がないため、ブラウザ経由でのエラーが気になります。
- unprotectの行でエラーが発生しているため、ブラウザ上での保護解除に問題がある可能性があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
遅くなって大変すみません。ふだんは、このようなことはないのですが、掲示板上でゴタゴタが続いて、集中出来なく、こちらにレスをすることを忘れていました。お詫びいたします。 >エラーメッセージは「実行時エラー1004 worksheetsメソッドは失敗しました_Globalオブジェクト」となります。 このエラーは、あまり記憶にはないのですが、確か、外部オブジェクト上で使う時には、上位オブジェクトからブロパティを全部書かないと、そのようなエラーが発生します。手抜きをするとエラーが発生します。たぶん、グローバルオブジェクトとして、Worksheets がないということです。 だとすると、これはダメですね。 >Sub Test() >With Worksheets("Sheet1") 標準モジュールに入れることには間違いありません。しかし、正式に上部オブジェクトから全部書きますと、こうなります。 Public Sub Test() Dim xlApp As Excel.Application Set xlApp = Excel.Application With xlApp.ThisWorkbook.Worksheets("Sheet1") .Select .Unprotect .Range("A2").Select End With Set xlApp = Nothing End Sub また、ボタン側は、 Private Sub CommandButton1_Click() Call Module1.Test 'モジュール名から書きます。 End Sub
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
>なぜブラウザ経由ではエラーになるのか?というコード上の矛盾点みたいななのを知りたいのです、 すべてが書かれているとは思えませんから、回答にまで結びつくかは分かりませんが、 >commandbotton1_click わざわざ、名前を変えているのでしょうか? 普通の綴りとは違いますね。 CommandButton1_Click >'sheet1にコマンドボタン1を設置してある。標準モジュールに記述 >private sub commandbotton1_click() >userform1.show >end sub ActiveX ツールのCommandButton は、「標準モジュールに記述」ではなく、シートモジュールです。標準モジュールで、Private ステートメントでは、ボタンでは呼び出せません。 >activesheet.unprotect の行で停止します。 この原因が分かりません。 >sheet1は最初に保護されている状態で、 Sheet1 だけなら、以下でもよいかもしれません。 Sub Test() With Worksheets("Sheet1") .Select .Unprotect .Range("A2").Select End With End Sub
補足
>CommandButton1_Click ミスタイプでした。Buttonですね。 >CommandButton は、「標準モジュールに記述」ではなく、シートモジュールです sheet1に記載でしたね。 >すべてが書かれているとは思えませんから おっしゃるとおりです。 手写しでコード書き写しているのと、根本的な原因が判らないので1つづつ問題を解決したいと思いこのような形にしました。 えっとですね、もう1回やりたい事を整理しますと、 1.sheet1上の「コマンドボタン1」をクリック 2.フォーム1上の「コマンドボタン2」出現 3.フォーム1上の「コマンドボタン2」クリックすると 4.sheet1でアクションを起こしたい。 この場合、シート保護解除→A2セレクト ※自分なりの検証なのですが、「フォーム上のコマンドボタン」から シートに対して何らかアクションを起こそうとするとエラーになるみたいです。 実際止まるのは、標準モジュール sub test() の1行目みたいです。Wendy02さんのコードでも一緒でした。 但し、エラーメッセージは「実行時エラー1004 worksheetsメソッドは失敗しました_Globalオブジェクト」となります。 sheet1に別のコマンドボタンを設置し、フォームを呼び出さずに、直接に標準モジュールのsub test()を実行するとすんなりいきます。 どうやらフォーム上のボタンからはうまく命令が伝わらないようです。 あと、エクセル単体で実行すればWendy02さんのコードでも、自分のコードでも問題なく動きます。 IEを経由したときだけ変になるみたいなんですよね、、、。
お礼
>こちらにレスをすることを忘れていました。お詫びいたします。 いえいえ、わざわざ解答をしてくれてるのにお詫びだなんて、 Wendy02さんの様な方がいるのは助かります。 で、質問の方ですが少し前進しました。 しかし .Range("A2").Select で止まります。 「実行時エラー1004 RangeクラスのSelectメソッドの失敗」 となります。 .Unprotect までは行われるので、 .Range("A2").Select 行を削除するとコードは完結します。 どうやら("A2")のSelectがうまくいってません。 でも、 .Range("A2").Value = 1 だとアクションを起こしてくれます。 一応、これで自分的には半分OKな感じですが、 いちいち動かないパターンがあるのがイライラしますね。 やはりIEでやることに無理があるのでしょかね、、、。 解答ありがとうございます