
No.5ベストアンサー
- 回答日時:
遅くなりました。
コンパイルエラーにはなりませんが、はっきり言って自信はありません。
意図しない結果になるかもしれませんので
バックアップを取ってからお試しを。
Sub copyXLSheetのテスト()
'要参照設定 Microsoft Excel xx.x Object Library
'On Error GoTo Err_copyXLSheet
Dim MyXL As Excel.Application, MyBK As Excel.Workbook, MySHT As Excel.Worksheet
Dim myXLName1 As String
Dim myXLName2 As String
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim P1 As String
Dim P2 As String
Dim B As Variant '?
P1 = DLookup("Path1", "M_kanri")
P2 = DLookup("Path2", "M_kanri")
myXLName1 = P1 & "\01作業員名簿.xls"
myXLName2 = P2 & "\作業員名簿.xls"
'myXLName1 = "e:\tmp\book1.xlsx"
'myXLName2 = "e:\tmp\book2.xlsx"
'---------------作業に入る前のチェック
On Error Resume Next
'err.Raise 11
'myXLName1 のチェック
Name myXLName1 As myXLName1 '同名ファイルで上書きしてエラーになれば使用中
Select Case Err.Number
Case 0
'エラーではないので続行
Case 53
MsgBox "「" & myXLName1 & "ファイルが見つかりません。」", vbOKOnly
Case 75
'当方ではファイル使用中の場合に”パス名が無効です”のメッセージ
MsgBox "「" & myXLName1 & "は使用中です。閉じてね」", vbOKOnly
Case Else
Debug.Print Err.Number, Err.Description
MsgBox "未対応のエラーが発生しました!作業を中断して" & vbCrLf _
& "何もせずに管理者にご連絡ください"
End Select
If Err.Number <> 0 Then
Exit Sub
End If
'myXLName2 のチェック
Name myXLName2 As myXLName2
Select Case Err.Number
Case 0
'エラーではないので続行
Case 70
'当方ではファイル使用中の場合に”書き込みできません”のメッセージ
MsgBox "「" & myXLName2 & "は使用中です。閉じてね」", vbOKOnly
Case Else
Debug.Print Err.Number, Err.Description
MsgBox "未対応のエラーが発生しました!作業を中断して" & vbCrLf _
& "何もせずに管理者にご連絡ください"
End Select
If Err.Number <> 0 Then
Exit Sub
End If
'------------------作業開始
On Error GoTo 0
If MsgBox("Excelへの出力を始めますか", vbOKCancel, "管理者") = vbCancel Then
MsgBox "処理を中止しました", vbOKOnly, "管理者"
Exit Sub
End If
FileCopy (myXLName1), (myXLName2)
Set DB = CurrentDb
Set RS = DB.OpenRecordset("T_01")
Set MyXL = CreateObject("excel.application")
Set MyBK = MyXL.Workbooks.Open(myXLName2)
Set MySHT = MyBK.Worksheets("DATA")
' DoCmd.SetWarnings 0
DoCmd.OpenQuery "Q_meibo" '←これはなに?
MySHT.Cells(3, 2).CopyFromRecordset RS
'sleep必要かも
MyBK.Save
If B = 1 Then 'このBはどこから?
MyBK.Worksheets(1).Activate
Else
MyBK.Worksheets(2).Activate
End If
MyXL.Visible = True
MyXL.UserControl = True '処理を人間に渡します
Set MySHT = Nothing: Set MyBK = Nothing: Set MyXL = Nothing
RS.Close: Set RS = Nothing
Set DB = Nothing
Exit Sub
Err_copyXLSheet:
Debug.Print Err.Number, Err.Description
Stop
'Resume Exit_copyXLSheet
End Sub
ありがとうございます
何度試してもエラーはでず ちゃんと動きました
回答いただいたコードについてさらに理解を深めて
今後に役立てていきます
長い間 丁寧なご回答ありがとうございました
No.4
- 回答日時:
変数宣言部も含めて、Sub ~ EndSubまで欲しかったです。
回答する上で実行時エラーは無理でもコンパイラエラーの
凡ミスは避けられますので、回答をそちらでコピペッタンして
確かめやすくもなります。
ざっと見ですが???な所がありますが
直接的な回答は今日は勘弁してください。
~保存するボタンを押したあとにエラーがでます
はUsercontrolについて調べれば解決するかも?
※エラーの内容を知りたいところですが・・・。
取りあえず、以前にとても参考になったサイトを載せておきます。
VBAはVB6を元にして開発されたので共通する部分があります。
Visual Basic 中学校 > VB6 テクニック >
15.消えないExcelのプロセス
http://rucio.a.la9.jp/main/technique/teq_15.htm
行頭のタブインデントや半角スペースはこのサイトでは無視されてしまいます。
コードのやり取りには向かないですね。
回答するときにタブインデントを全角スペースに変換して
やり取りしたことが何度かあります。
VBAでは行頭に全角スペースがあってもエラーになることは経験ありません。
今日はこの辺で。
ps.
Microsoft Excel xx Object Library に参照設定してますかね?
No.2
- 回答日時:
正確な情報が少ないのでどうしようもありませんね。
この回答の他にもう一つ回答しますので、
それぞれの補足に問題のコードを分割して載せてください。
二つあれば足りる?
その際に個人情報などは適宜書き換えてください。
また、下記確認事項も教えてください。
1・エクセルBookのファイルサイズ
2・BookとAccdbは両方とも自PC内にあるのか
3・エラーになった場合に発生行、Err.number,Err.descriptionの
確認は出来ていますか
4・前回回答の
>※ステップ実行して無事終了しExcelが立ち上がっていない状態で
>タスクマネージャーのプロセスにExcelが無ければ、
はどうなっていますか
以上4件。
No.1
- 回答日時:
三か月ほどはエラーも無く処理できていたことから推測。
1・xlsxファイルのサイズが大きくなり完全に開ききれていない
or ネットワーク上の問題で遅延・・・などにも関わらず
VBAのコードが進むため。
あるいは
2・Excelオブジェクト内の参照が不十分なコードで
今まではAccessVBAが自動的にカバーしていたのが追いつかなくなった。
1の場合はエラーになる前の行で待ち時間を入れれば対症療法的ですが
解決するかもしれません。
Access VBAの標準モジュールの宣言部に
Option Compare Database
Option Explicit
'ミリセカンドで停止
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
としておいて
エラーになる行の前に以下を追加
Sleep 1000 '1秒待機
としてみては?
2の場合は実際のコードを提示してもらわないと話が進まなそう。
※ステップ実行して無事終了しExcelが立ち上がっていない状態で
タスクマネージャーのプロセスにExcelが無ければ、
2の考慮は無用と思います(多分)。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) accessデータを指定したExcel、そして指定したセルへエクスポートするaccess VBAコー 2 2023/05/17 17:02
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Access VBA でHTML文を表示したい 2 2024/01/08 05:56
- Visual Basic(VBA) Access VBAから使用したExcelプロセスを閉じる方法について 4 2022/06/08 17:50
- Access(アクセス) Access DAOのExecuteメソッドのオプション(RecordsetOptionEnum)に 1 2022/09/19 07:34
- Visual Basic(VBA) Excel ファイルを指定し、指定されたファイル内にシートを統合するVBA 8 2023/07/10 10:09
- Excel(エクセル) Excel VBA のdebug(F8キー) がうまく動作しません(超初心者です) 4 2022/02/01 18:47
- Visual Basic(VBA) excel vbaでselenium basic 3 2022/10/02 12:35
- その他(データベース) Microsoft Accessについて 1 2022/06/06 16:20
このQ&Aを見た人はこんなQ&Aも見ています
-
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
ExcelVBAでのエラー回避
Visual Basic(VBA)
-
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
6
ExcelVBAで既に開いてるwordを閉じる
Excel(エクセル)
-
7
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
-
8
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
9
ACCESSのVBAにてExcelのシートをコピーしたい
その他(データベース)
-
10
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
11
Worksheets メソッドは失敗しました。のエラー処理のやり方
Visual Basic(VBA)
-
12
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
13
エクセルマクロエラー「'Cells'メソッドは失敗しました。'_Global'オブジェクト」について
Excel(エクセル)
-
14
Excelで数値→文字列変換で指数表示になったものをいっぺんに直したい
Excel(エクセル)
-
15
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
16
ACCESSVBA からExcelの他ブックへコピーの方法
Visual Basic(VBA)
-
17
OUTLOOKのメールアカウントの受信フォルダーへVBAでアクセスするには。
Visual Basic(VBA)
-
18
VBAでOutlookを終了させたい ExcelVBAで既に起動されているOutlookを終了させる
Visual Basic(VBA)
-
19
カレントレコードが無い事を判定させる方法
Visual Basic(VBA)
-
20
ACCESS側からEXCELの書式を設定するには?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS2007 フォーム 「バリア...
-
Access VBA [リモートサーバー...
-
実行時エラー3086 削除クエリ...
-
accessでSQL実行時のテーブル名...
-
テーブル作成後なんですが、Pri...
-
指定した回数INSERTをしたい
-
SQL SERFVER で外部キーのエラ...
-
ACCESSのODBCリンクテーブルに...
-
VBAの実行時エラー'2522'について
-
アクセスのワークシート変換に...
-
SQL Serverのテーブルってどう...
-
Access Update文の副問い合わせ
-
Accessでクエリを完了できませ...
-
Select ~ into ~ で作成した...
-
結合プロパティを変更して作成...
-
インデックスを調べる方法は?
-
「マスタ」と「テーブル」の違...
-
ACCESSのSQLで、NULLかNULLでな...
-
列名XXXXが無効です
-
SELECT文でのデッドロックに対...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS2007 フォーム 「バリア...
-
Access VBA [リモートサーバー...
-
Accessでクエリを完了できませ...
-
ACCESSのODBCリンクテーブルに...
-
実行時エラー3086 削除クエリ...
-
ユニオンクエリで繋げられるテ...
-
Select ~ into ~ で作成した...
-
VBAの実行時エラー'2522'について
-
accessでSQL実行時のテーブル名...
-
Oracleデータベーストリガーの...
-
大きなテーブルに対する問い合...
-
ACCESSにてテーブルをEXCEL形式...
-
Access Update文の副問い合わせ
-
SQL Serverのテーブルってどう...
-
AccessのテーブルをSQL Server...
-
勤続年数の求め方
-
SSIS 変数の値をSQL実行タスク...
-
Access VBA 読み取り専用かチェ...
-
ジョブでvbsを起動する方法
-
SQL SERFVER で外部キーのエラ...
おすすめ情報
ありがとうございます
1を試してみましたが1回目はうまくいきましたが2回目以降同様のエラーがでます
2だと思います コードを提示したいのですが 多すぎて文字数が超えてしまいましたので
処理の内容をお伝えします
1)まずひな形になるエクセルを別の場所にコピーしています
2)コピーしたエクセルにクエリの内容をエクスポートしています
3)コマンドボタンの種類によって開くシートを判断しエクセルを開きます
これで完了です
1)の部分でエラーが出たケースがありましたのでこの手前で Sleep 1000 '1秒待機を入れました
気になる部分があればコードを提示して解明していただきたいのですが よろしくお願いします
現在は 2)と3)あたりでエラーがでるようです
ありがとうございます
確認事項
1エクセルBookファイルサイズはコピー元 103KB コピー先 111KB
2両方ともPCローカル内
3エラーナンバー 462 「リモートサーバーがないか使用できる状態ではありません」
4タスクマネージャのプロセスにエクセルはあります
補足では400文字までです
コード①
P1 = DLookup("Path1", "M_kanri")
P2 = DLookup("Path2", "M_kanri")
myXLName1 = P1 & "\01作業員名簿.xls"
myXLName2 = P2 & "\作業員名簿.xls"
Sleep 1000
FileCopy (myXLName1), (myXLName2)
strmsg = "MS Excelへデータを出力します"
intmsg = MsgBox(strmsg, 17, "管理者") ②へ続く
コード②
If intmsg = 1 Then
DoCmd.SetWarnings 0
DoCmd.OpenQuery "Q_meibo"
Set DB = CurrentDb
Set RS = DB.OpenRecordset("T_01")
Set objEXE = CreateObject("Excel.Application")
objEXE.Workbooks.Open (myXLName2)
objEXE.Worksheets("DATA").Select
objEXE.Cells(3, 2).CopyFromRecordset RS
objEXE.Quit
If Dir(myXLName2) = "" Then
MsgBox "「" & myXLName2 & "ファイルが見つかりません。」", vbOKOnly
Exit Sub
End If ③へ続く
コード③
On Error Resume Next
Set MyXL = GetObject(, "Excel.application")
If Err.Number <> 0 Then
Err.Clear
Else
On Error GoTo Err_copyXLSheet
For Each objEXE In objEXE.Workbooks
If objEXE.Name = Dir(myXLName2) Then
objEXE.Close SaveChanges:=False
End If
Next objEXE
End If
Set MyXL = Nothing
On Error GoTo Err_copyXLSheet
Set MyXL = CreateObject("Excel.Application")
④へ続く
コード④
Set objEXE = MyXL.Workbooks.Open(myXLName2)
With objEXE
.Application.Visible = True
.Activate
If B = 1 Then
.Worksheets(1).Activate
Else
.Worksheets(2).Activate
End If
End With
Set objEXE = Nothing: Set MyXL = Nothing
Set RS = Nothing
Set DB = Nothing
Else
MsgBox "処理を中止しました", 1, "管理者"
End If
DoCmd.SetWarnings -1
Exit_copyXLSheet:
Exit Sub
⑤へ続く
コード⑤
Err_copyXLSheet:
MsgBox Err.Description
Resume Exit_copyXLSheet
End Sub
以上です
変数の宣言部分は省きました
文字数の関係でインデントを省いたのでかなり見にくくなっております
エクセルの保存のダイアログが出て保存するボタンを押したあとにエラーがでます
宜しくお願いします
ありがとうございます
>Microsoft Excel xx Object Library に参照設定してますかね?
設定しております
>変数宣言部も含めて、Sub ~ EndSubまで欲しかったです。
先にお送りしたコードで前半省いた分を記述します
Sub copyXLSheet()
On Error GoTo Err_copyXLSheet
Dim MyXL As Object
Dim myXLName1 As String
Dim myXLName2 As String
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim objEXE As Object
Dim strmsg As String
Dim intmsg As Integer
Dim P1 As String
Dim P2 As String
>ざっと見ですが???な所がありますが
知識のなさを痛感しております エラーがでるたびに検索して同様のエラーを解決した人のサイトを見つけコピペしてエラーを消していくということを繰り返した結果のコードで恥ずかしい限りです
>※エラーの内容を知りたいところですが・・・。
エラーナンバー 462 「リモートサーバーがないか使用できる状態ではありません」
です
ご紹介のサイトもよく見て参考にさせていただきます