![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
ブラウザからエクセルを表示してコードを実行するとエラーになる
htmlでエクセルのファイルにリンクさせてあるのですが、
ブラウザからエクセルファイルを表示してコードを実行するとエラーになります。
エクセル単体で実行すれば問題ありません。
ちなみにhtml側は、
同一フォルダに<a href="test.xls">テスト</a>と記述して、ファイル名がテスト.htmlです。
-----
WinXP、エクセル2003、IE6、です
各々バージョンアップ不可です、これらの対応は却下です。
以下にコードを記載します。
ファイル名がtest.xlsで、sheet1に記載。
sheet1は最初に保護されている状態で、パスワード無しです。
--------
'標準モジュール
sub test()
activesheet.unprotect
range("a2").select
end sub
ーーーーー
'sheet1にコマンドボタン1を設置してある。標準モジュールに記述
private sub commandbotton1_click()
userform1.show
end sub
-----------------
'userform1にコマンドボタン2を設置してある。userform1に記述
private sub commandbotton2_click()
call test
end sub
--------------
でsheet1のコマンドボタン1を実行すると、
実行時エラー'91':
オブジェクト変数またはwithブロック変数が設定されていません
となります。
activesheet.unprotect の行で停止します。
-----
こうすればブラウザからでも出来るよという回答をお願いします。
上の記述ではunprotectが書いてありますが、
別に保護解除が目的ではなく、なぜブラウザ経由ではエラーになるのか?というコード上の矛盾点みたいななのを知りたいのです、
よろしくお願いします。
No.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
>こちらにレスをすることを忘れていました。お詫びいたします。
いえいえ、わざわざ解答をしてくれてるのにお詫びだなんて、
Wendy02さんの様な方がいるのは助かります。
で、質問の方ですが少し前進しました。
しかし .Range("A2").Select で止まります。
「実行時エラー1004 RangeクラスのSelectメソッドの失敗」 となります。
.Unprotect までは行われるので、
.Range("A2").Select 行を削除するとコードは完結します。
どうやら("A2")のSelectがうまくいってません。
でも、 .Range("A2").Value = 1 だとアクションを起こしてくれます。
一応、これで自分的には半分OKな感じですが、
いちいち動かないパターンがあるのがイライラしますね。
やはりIEでやることに無理があるのでしょかね、、、。
解答ありがとうございます
No.1
- 回答日時:
>なぜブラウザ経由ではエラーになるのか?というコード上の矛盾点みたいななのを知りたいのです、
すべてが書かれているとは思えませんから、回答にまで結びつくかは分かりませんが、
>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を経由したときだけ変になるみたいなんですよね、、、。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/10 14:24
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA フォームShowでオ...
-
VBAが得意な方 助けてください...
-
vbaでmsgboxの位置を指定
-
【Excel】BeforeCloseを毎回呼...
-
エクセルVBAでNumLockキーの状...
-
エクセル2003のマクロでコマン...
-
Application.Runエラー(1004)
-
別シートのマクロを実行する方法
-
エクセルのマクロボタンが編集...
-
Access終了時にマクロまたはVBA...
-
エクセルVBAで、ボタンの文字を...
-
今日の日付の範囲を指定して印...
-
マクロが登録できません
-
InputBox内の表示について
-
別シートのトグルボタンを指定...
-
access2010 コマンドまたはアク...
-
AccessでExcelファイルを印刷
-
マクロ 戻るボタンを押したらシ...
-
エクセル マクロを勉強したい...
-
ExcelのVBAでDisplayalertsで警...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaでmsgboxの位置を指定
-
エクセルVBAでNumLockキーの状...
-
エクセルVBA フォームShowでオ...
-
【Excel】BeforeCloseを毎回呼...
-
VBAが得意な方 助けてください...
-
Excel:アドイン(ThisWorkbook)...
-
ラウザ経由でエクセルVBAを実行...
-
smartvisionで録画失敗が頻発
-
エクセル2003のマクロでコマン...
-
HULFT完了コードについて
-
フォームを作成すると同時にイ...
-
エクセルのダブルクリックで
-
Pic16f690でpwm信号を作る。c言...
-
ExcelのVBでタイピングゲームも...
-
エクセルのマクロボタンが編集...
-
別シートのマクロを実行する方法
-
Application.Runエラー(1004)
-
Access終了時にマクロまたはVBA...
-
access2010 コマンドまたはアク...
-
シート保護を掛けたまま並べ替...
おすすめ情報