オブジェクトが必要です・・・・・
すみません、判りません、丸投げです(爆)、申し訳ありませんがどなたか完成していただけませんか?;;
また、この辺りをサルでも判るように解説してくれていて勉強し易いサイトがあったら教えてください・・・
Private Sub コマンド1_Click()
Dim xlsApp As Excel.Application
Dim xlsBook As Excel.Workbook
Dim xlsSht As Excel.Worksheet
Set xlsApp = CreateObject("Excel.Application")
Set xlsBook = xlsApp.Workbooks.Open("■■■■■.xls")
Set xlsSht = xlsWkb.Sheets(■■■■)
If xlsBook.ReadOnly Then
xlsBook.Close
MsgBox "そのファイルは既に開かれています。"
xlsApp.Quit
Else
xlsBook.Close
End If
Set wkb = Nothing: Set xls = Nothing
Exit_exOpenEditC:
Exit Sub
Err_exOpenEditC:
MsgBox Err.Number & " - " & Err.Description
Resume Exit_exOpenEditC
End Sub
accessからexcelファイルをシートを指定して開き、重複の場合は開かない様にし、メッセージボックスを表示させたいのです・・・
No.5ベストアンサー
- 回答日時:
No2 です。
> ※前回コメントした後に気が付きましたがxlsBook.Closeが2つあるのが間違いでした、Elseの所はxlsApp.Visible = Trueに修正しました
正解です。
> 結果現状では、作ったコードでファイル重複防止は成功していますがシートの指定が出来てない状態です
Set xlsSht = xlsBook.Sheets("シート名") ' (1)
xlsSht.Activate ' (2)
(2) は 「重複ではない」 場合に記述。
何をするプログラムかはっきりしませんが
ブックを開くだけで、あとはユーザーまかせ
ということなら
上記 (1) は 不要で、 単に
xlsBook.Sheets("シート名").Activate
で済みますね。
>piroin654さんへ
> なお慎重を期すならば、私の提示したコードの最後は、
>
> Err_コマンド0_Click:
> MsgBox Err.Description
> Resume Exit_コマンド0_Click
> wkb.Close
> Set wkb = Nothing
> oApp.Close
> oApp.Quit
> Set oApp = Nothing
> End Sub
>
> のように、Quitを追加してください。
Resume ステートメントの後に何を記述しても
実行されることはないと思いますが。
> Set xlsSht = xlsBook.Sheets("シート名") ' (1)
> xlsSht.Activate ' (2)
まさにこの2行が今回たどり着けなかった答えでした、他にも教えて頂いた事もありますのでその限りではないのですが、この2行、本当に助かりました、ありがとうございます
正しいコードを見てどうしてそれが必要なのかではなく「正しいコードに書いてあるから必要」と言う風にしか覚えていけない私にとっては、特に2行目は完成させられないコードでした、答えを導き出すヒントすら見えてませんでしたorz
これから勉強をしていって果たしてコードを理論的に組めていくのかは不安な所でありますが、出来るだけこちらで質問しないように頑張ります・・・
No.4
- 回答日時:
>このシートの指定部分を教えてください
Set wkb = oApp.Workbooks.Open(filename:=CurrentProject.Path & "\myDD.xls", ReadOnly:=False)
の後に、
oApp.Worksheets("Sheet2").Select
を挿入。
>拝見したところファイルの存在確認など精度の上がっている
>所も有りますが、結果として目的に対してこのコードと同じ
>ものが出来るように見受けられるのですが・・・・
見ただけでわかるようなら、
>すみません、判りません、丸投げです(爆)、
のようなことを書くようなレベルの方では
ないような気がしますが?
追加説明として、
「オブジェクトが必要です」
というエラーが出るのは参照設定が正確ならば、
>Set xlsSht = xlsWkb.Sheets(■■■■)
のところに対してエラーが発生しています。
このエラーが発生すると指定のファイルを
単独で開こうとしても開きません。
一度、空のExcelを開いてそれから当該の
ファイルをクリックすれば開きます。
ひょっとしたら生成したインスタンス
ほど開き直しがでるかもしれません。
理由は「オブジェクトが必要です」だからです。
つまり、オブジェクトの指定が中途半端に
なっているからで、一度失敗するとインスタンス
が生成されてシステムがメモリを開放しないためです。
一度、開きなおすとインスタンスは開放されると
思いますが。
>あとは、応用です。
と言ったのは、私の提示したコードには
シートの指定はしていません。
つまり、まずは確実にファイルが開くか確認
してください、ということです。それから
シートの指定をするコードを追加する。
それぞれの段階でエラーが発生したら
デバッグする。そこで「オブジェクトが必要です」
というエラーがどの段階で、どういう形で出るか、
ブレークポイントを設定しながらデバッグし、
エラーの箇所を確認する、ということです。
これが、
>あとは、応用です。
といった意味です。順序を踏んでやっていけば
判らないところが見つかると思いますが。
たとえば、エラートラップのところで、
Exit_コマンド0_Click:
' wkb.Close
' Set wkb = Nothing
' oApp.Close
' oApp.Quit
' Set oApp = Nothing
Exit Sub
として、チェックを一つづつはずして
何が起こるか確認してみてください。
エラー処理は組み立てるコードにより違ってきます。
現在は対応できても、この後追加するコードによっては
同じ現象が起きる可能性は十分あります。それだけ
Excelを扱うのは慎重にしなければならない、ということです。
なお慎重を期すならば、私の提示したコードの最後は、
Err_コマンド0_Click:
MsgBox Err.Description
Resume Exit_コマンド0_Click
wkb.Close
Set wkb = Nothing
oApp.Close
oApp.Quit
Set oApp = Nothing
End Sub
のように、Quitを追加してください。
この回答への補足
>見ただけでわかるようなら、
>>すみません、判りません、丸投げです(爆)、
>のようなことを書くようなレベルの方では
>ないような気がしますが?
大体が判っても結果的に完成させられないのですからやはり「その程度のレベル」なんだと思います、皆さんの様に質問に答えられるレベルになるのはハードルが高過ぎです、が、今後も努力はして見ます
>追加説明として、
>「オブジェクトが必要です」
>というエラーが出るのは参照設定が正確ならば、
あ、いえ、ファイルオブジェクトのエラーはbonaronさんのおかげで突破できました、前回の補足に書かせていただきましたが、現状はファイの重複防止は成功していますがシートの指定が出来ない状態なのです
No.3
- 回答日時:
以下のサイトにExcelが開いていたり
使用中の場合に対処する関数を作られて
います。関数名はAleadyOpenedです。
http://www.f3.dion.ne.jp/~element/msaccess/AcRes …
この関数を標準モジュールに貼り付け、
提示のコードを以下のように訂正して
ください。
一応、Excelのファイル名をmyDD.xlsに
しています。必要に応じて変更してください。
このコードはAccess2000のウィザードを利用
してそのコードを作り直しています。他の
バージョンでは生成されるコードが違う
ところもあります。とくに、
oApp.UserControl = True
の部分は違うかもしれません。違えば
変更しておいてください。以下コードです。
Private Sub コマンド0_Click()
On Error GoTo Err_コマンド0_Click
Dim oApp As New Excel.Application
Dim wkb As Excel.Workbook
Dim strFileName As String
strFileName = CurrentProject.Path & "\myDD.xls"
'ここでファイルが開かれているか、存在するかチェックする
Select Case AleadyOpened(strFileName)
Case vbYes
MsgBox "'" & strFileName & "' は使用中です。", vbCritical
Exit Sub
Case vbCancel
MsgBox "'" & strFileName & "' が見つかりません。", vbCritical
Exit Sub
End Select
Set oApp = CreateObject("Excel.Application")
Set wkb = oApp.Workbooks.Open(filename:=CurrentProject.Path & "\myDD.xls", ReadOnly:=False)
oApp.Visible = True
On Error Resume Next
oApp.UserControl = True
Exit_コマンド0_Click:
Exit Sub
Err_コマンド0_Click:
MsgBox Err.Description
Resume Exit_コマンド0_Click
wkb.Close
Set wkb = Nothing
oApp.Close
Set oApp = Nothing
End Sub
あとは、応用です。
この回答への補足
お答えありがとうございます
そちらのサイトも存じていまして、拝見して既に参考にさせていただいて作成したのが今回のコードなのです
piroin654さんのおっしゃられるのは、丸ごとそちらのコードに変えればシートを指定して開くまで修正可能と言う事でよろしいでしょうか?、拝見したところファイルの存在確認など精度の上がっている所も有りますが、結果として目的に対してこのコードと同じものが出来るように見受けられるのですが・・・・
>あとは、応用です。
そこが判らないので今回の質問をさせて頂いているのですが・・・・・
しかも自作関数となると更に輪がかかります
結果現状では、作ったコードでファイル重複防止は成功していますがシートの指定が出来てない状態です
このシートの指定部分を教えてください、おねがいします
それともこのコードを修正してのシートの指定は不可能と言う事なのでしょうか?
※前回コメントした後に気が付きましたがxlsBook.Closeが2つあるのが間違いでした、Elseの所はxlsApp.Visible = Trueに修正しました
No.2
- 回答日時:
> Set xlsBook = xlsApp.Workbooks.Open("■■■■■.xls")
> Set xlsSht = xlsWkb.Sheets(■■■■)
xlsWkb は 上の行で開いたブックのオブジェクト変数 xlsBook の間違いでしょう。
この回答への補足
『xlsWkbをbookに置き換えてSet xlsSht = xlsBook.Sheets(■■■■)にする』
と言うお答えでよろしいでしょうか?
今度は「インデックスが有効範囲内にありません」と言うエラーになってしまいました・・・
引き続きご教授お願いいたします::
すみません、勘違いでした
インデックスが有効範囲内に無い > シート名が無い > シート名を間違えていた
"でシート名を囲うのを忘れていましたorz
お答え頂いたとおりにしたところ、エラーは出ないのですが、
excelファイルが開きませんでした
正確には、タスクのプロセスには一瞬EXCELの文字が表示されるのですが、
直ぐに閉じているようです、どうしたら良いでしょうか
引き続きよろしくお願いします
また、お分かりの方がいらっしゃいましたらご教授下さい・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトに詳しい方!
-
全画面表示のバッチファイル
-
テキストファイルの特定行、特...
-
TeXで図を横に並べる方法について
-
windowsが立ち上がりません。コ...
-
バッチファイルでテトリス
-
net userコマンドでFullname情...
-
コマンドプロンプトからファイ...
-
dirコマンドの場所について
-
コマンドプロンプトで出来ること
-
コマンドプロンプトでコマンド...
-
PowershellでNASの共有フォルダ...
-
DCPの解凍方法?
-
treeコマンドでソートできませ...
-
スイッチを使用して Outlook 20...
-
URLへアクセスするコマンド
-
コマンドプロンプトでシリアル...
-
コマンドプロンプトで『.lnk』...
-
ダブルクォーテーションで囲っ...
-
メールが突然受信できなくなり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトに詳しい方!
-
windowsが立ち上がりません。コ...
-
コマンドプロンプトからファイ...
-
メールが突然受信できなくなり...
-
コマンドプロンプトで『.lnk』...
-
全画面表示のバッチファイル
-
PowershellでNASの共有フォルダ...
-
AS400からPCファイルを実行したい
-
コマンドラインで特定フォルダ...
-
コマンドプロンプトでシリアル...
-
URLへアクセスするコマンド
-
dirコマンドの場所について
-
シンボリックリンクが作れませ...
-
DOSバッチで文字数カウント
-
treeコマンドでソートできませ...
-
FTPコマンドのmdelet...
-
WindowsUpdateで再起動を阻止し...
-
pathが通らない
-
windowsの環境変数設定がうまく...
-
DOSコマンドで共有ファイル...
おすすめ情報