
はじめまして。
仕事でAccessVBAを使ってExcelのデータを操作するプログラムを作っています。
やりたいこと
(1)日付と店番・店名が入力されているExcelを開く
(2)削除日=C列からオートフィルで空白(日付が入力されていないもの)を絞りだす
(3)日付=B列からオートフィルで本日の日付より1ヶ月前の日付を搾り出す
(4)もし本日より1ヶ月前の日付があれば、C列の削除日に本日の日付を入れる
(5)印刷
問題点
・動作が不安定
・Excelのメモリ解放がおかしいのか、プログラム終了後別件でエクセルを開くと
ビジー状態になり「応答なし」になってしまう
・プログラム内でAccessテーブルのデータを既存のExcelファイルの最終行に
追加で出力したいが、なぜかAccessテーブルの名前で新規シートが作られ、そこに
データが入ってしまう
色々なサイトを見ましたが、どこがおかしいのか分からず。
どなたか知恵をお貸しいただけますでしょうか。
Private Sub cmd_insert_Click()
On Error GoTo Error
Dim App As Object ' Application Object
Dim Wkb As Object ' Excel.Workbook Object
Dim Wsh As Object ' Excel.WorkSheet Object
Dim Kensu As Integer ' 削除データ件数格納
Dim cnt As Integer ' 件数カウント
Dim lngYLine As Long ' 対象となる列の番号
Dim intXLine As Integer ' 対象となる行の番号
Dim strac As String ' Accessテーブル名
Dim strxls As String ' 出力先ファイルのパス
Dim strmsg As String ' メッセージボックスへのメッセージ格納
Dim strans As String ' 削除対象日付格納
'Excelファイルをセット
Set App = CreateObject("Excel.Application")
App.Visible = True
Set Wkb = App.WorkBooks.Open("C:\Downloads\記録.xls") ←わざと変なURLにしています
Set Wsh = Wkb.Worksheets("HP")
'出力先ファイル指定
strxls = "C:\Downloads\記録.xls"
'Accessテーブルに入力したデータをExcelファイルへ出力
strac = "tbl_募集データ"
strmsg = strac & " を、Excelファイルへ出力します。" & Chr(13) & _
"出力先は" & strxls & "、 シート名はHPです。" & _
Chr(13) & "よろしければ、OKをクリックして下さい。"
'★★excelシートの最終行に追加でデータを入れたい★★
' If MsgBox(strmsg, vbOKCancel) = vbOK Then
'
'
' '最初のデータをフィールド名として使う
' DoCmd.TransferSpreadsheet acExport, _
' acSpreadsheetTypeExcel9, strac, strxls, True
' MsgBox "データ入力正常完了!"
'
' End If
'オートフィルで「削除日」の行が空白のものを選択 ※削除日はC行目固定とする
Wsh.Range("C1").CurrentRegion.AutoFilter Field:=3, Criteria1:="="
'本日分の削除データのチェック(本日より1ヶ月前の日付のものを搾り出す)
strans = Format(DateAdd("d", -30, Date), "mm/dd")
Wsh.Range("B1").CurrentRegion.AutoFilter Field:=2, Criteria1:=strans
If Wsh.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count = 1 Then
MsgBox "本日は削除データがありません"
Else
'削除データ件数取得
Kensu = (Wsh.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count) - 1
MsgBox "削除データあり、件数は" & Kensu & "件でした"
lngYLine = Wsh.Cells.Find(strans).Row
intXLine = Wsh.Cells.Find(strans).Column
For cnt = 1 To Kensu
'削除日の列に本日の日付を入力
Wsh.Range("C" & CStr(lngYLine)).Value = Format(Date, "mm/dd")
lngYLine = lngYLine + 1
Next
'削除対象範囲を印刷
If MsgBox("印刷しますか?", vbQuestion + vbYesNo) = vbYes Then
'シートの指定
Wsh.Activate
App.Visible = False
Wkb.Application.ScreenUpdating = False
Wsh.Visible = True
Wsh.PrintOut
Wsh.Visible = False
End If
End If
'オートフィルを元に戻す
If Wsh.FilterMode = True Then
Wsh.ShowAllData
End If
MsgBox ("正常終了しました!")
'上書き保存
Wkb.Save
'Only XL 97 supports UserControl Property
On Error Resume Next
'App.UserControl = True
Wkb.Close SaveChanges:=False
App.Quit
Set Wsh = Nothing
Set Wkb = Nothing
Set App = Nothing
Exit Sub
Error:
If Err.Number = 3044 Then
MsgBox "パスの指定が誤っている可能性があります。", vbCritical
Else
MsgBox "予期せぬエラーが発生しました。", vbCritical
End If
App.UserControl = True
Wkb.Close
App.Quit
Set Wsh = Nothing
Set Wkb = Nothing
Set App = Nothing
End Su
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
問題なさそうな気がしますけど・・・
分かんね。。
という時に、もし影のExcel プロセスが立ち上がっているために問題発生なら。
私は、タスクマネージャを立ち上げ、オプションの「常に手前に表示」して
プロセスタブで、Excel が新たに表示されないかを確認しています。
アナログ的ですが他に方法を知らないので。。
コードの方は適当なところにブレークポイントをいくつか設定し
F8 や F5 でステップ実行します。
Excel が増えたらそこが原因です。
ここはご存知かもしれませんが
Excel のタスクを正常に終了できない現象
http://hanatyan.sakura.ne.jp/vbhlp/ExcelErr.htm
(VB6もVBAも変わりありません)
原因が分かりましたら、私メにも教えてください。
>追加で出力したいが、なぜかAccessテーブルの名前で新規シートが作られ、そこにデータが入ってしまう
CopyFromRecordset も考えてみてください。
http://www.sanryu.net/acc/tips/tips252.htm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
AccessVBAでのExcelメモリ解放
-
batでレジストリキーから読み取...
-
Excel VBAでフォルダ内の全テキ...
-
【C#】textBoxの指定行のデータ...
-
C# DataTableに最後に追加した...
-
COBOL数値転記の仕様
-
VBAでアクセスDBからデータの取...
-
ListViewで表示されたデータの...
-
「Nullの使い方が不正です」の...
-
XMLでデータとして画像を指定す...
-
VBAコンボボックスの内容が反映...
-
アクセスでウェブ上のデータを...
-
Excel VBAで1週間毎にカテゴリ...
-
『列名 '担当者CD' があいま...
-
VBA 変数名に変数を使用したい。
-
エクセルでXY座標に並べられた...
-
2つ目のレコードの値を取得す...
-
配列のペースト出力結果の書式...
-
複数のテーブルからのデータ取...
-
C#,繰り返し処理での最大値の取...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# DataTableに最後に追加した...
-
【C#】textBoxの指定行のデータ...
-
VBAコンボボックスの内容が反映...
-
VBAでアクセスDBからデータの取...
-
【VB.NET】Excelの最終行までの...
-
XMLでデータとして画像を指定す...
-
VB2010で、選択した系列を最前...
-
Excel VBAで1週間毎にカテゴリ...
-
COBOL数値転記の仕様
-
【ExcelVBA】値を変更しながら...
-
非同期のプロセス間通信(パイプ...
-
「Nullの使い方が不正です」の...
-
エクセルのマクロ コンボボッ...
-
ExcelVBAで戻り値を返すには
-
Excel VBAでフォルダ内の全テキ...
-
ListViewで表示されたデータの...
-
クリスタルレポートでレコード...
-
Excel VBA で日付を4ケタの数値...
-
ActiveReportのdetailをデータ...
-
アクセスでウェブ上のデータを...
おすすめ情報