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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
ExcelVBAでのエラー回避
Visual Basic(VBA)
-
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
accessの代わりになるもの
Access(アクセス)
-
5
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
-
6
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
7
Accessのことで教えてください。一行のデータしかない前提のテーブルがあるとして、もしそのテーブル
Access(アクセス)
-
8
VBAコードが作動しません。修正したいのですが何処に原因かあるか教えて下さい。
Visual Basic(VBA)
-
9
Accessでテーブルからテーブルにデータをコピーしたい
その他(データベース)
-
10
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
11
Accessを開くと「排他モードじゃないので変更しても保存できない」との旨の表示が出てしまう。
Access(アクセス)
-
12
基本情報技術者の擬似言語プログラム このプログラムの答えは(ウ)です。でも配列に格納されてる順番が良
Visual Basic(VBA)
-
13
自動VBAマクロって会社の中で禁止なんですか?
Visual Basic(VBA)
-
14
リスト形式の表とデータベースの違いはなんでしょうか?
その他(データベース)
-
15
AccessのDBを理解するコツは?
Access(アクセス)
-
16
これの対応OSを教えて下さい。php-8.3.0-src.zip
PHP
-
17
VBAの高速化について
Excel(エクセル)
-
18
Excelの共有ファイルについて質問です。
Excel(エクセル)
-
19
Access VBA でHTML文を表示したい
Access(アクセス)
-
20
QRコードとバーコードについて
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS2007 フォーム 「バリア...
-
Access VBA [リモートサーバー...
-
Oracleデータベーストリガーの...
-
ユニオンクエリで繋げられるテ...
-
ACCESSのODBCリンクテーブルに...
-
SQL Serverのテーブルってどう...
-
Win XP で SQlServer Enterpris...
-
大きなテーブルに対する問い合...
-
PhpMyAdminで作成して実行せよ...
-
実行時エラー3086 削除クエリ...
-
VBAの実行時エラー'2522'について
-
「マスタ」と「テーブル」の違...
-
ACCESSのSQLで、NULLかNULLでな...
-
SELECT時の行ロックの必要性に...
-
sqlserverで集計結果をUPDATEし...
-
2つの項目が重複するレコード...
-
数百万件レコードのdelete
-
Accessのリンクテーブルについて
-
accessテーブル作成クエリを実...
-
accessのエクスポートエラーに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access VBA [リモートサーバー...
-
ACCESS2007 フォーム 「バリア...
-
Accessでクエリを完了できませ...
-
実行時エラー3086 削除クエリ...
-
ACCESSのODBCリンクテーブルに...
-
SQL Serverのテーブルってどう...
-
VBAの実行時エラー'2522'について
-
ユニオンクエリで繋げられるテ...
-
Select ~ into ~ で作成した...
-
TRY CATCHでシステムエラーを検...
-
accessでSQL実行時のテーブル名...
-
Oracleデータベーストリガーの...
-
AccessのテーブルをSQL Server...
-
SSIS 変数の値をSQL実行タスク...
-
Access Update文の副問い合わせ
-
勤続年数の求め方
-
DB2 create tableコマンドでエ...
-
結合テーブルクエリPrimaryKey...
-
PhpMyAdminで作成して実行せよ...
-
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 「リモートサーバーがないか使用できる状態ではありません」
です
ご紹介のサイトもよく見て参考にさせていただきます