http://oshiete1.goo.ne.jp/qa4071588.htmlを参考に
Excel→Accessのプロシージャを実行させることはできるのですが、
Access→Excelができません。
回答者:KenKen_SPさまの方法を
逆にしてVBEコードに記載してみたのですが
エラーになってしまいます。
●アクセス側に●
Sub Excelのプロシージャを呼び出す()
Dim ExApp As Object
Set ExApp = GetObject("D:\up\エクセルファイル名.xls")
If Not ExApp Is Nothing Then
ExApp.Run "TestProcedure"
End If
Set ExApp = Nothing
End Sub
●エクセル側に●
Sub TestProcedure()
MsgBox "Call されました"
End Sub
で、実行すると、
「ExApp.Run "TestProcedure"」
の部分で
「オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438)」
というエラーになります。
Excel→Accessなら問題はないのに、
Access→Excelだとエラーになるのはなぜでしょう?
(2003です。)
A B C D
1 日付 部門 支店 氏名 金額
2 21/12/1 製造 東京 山田 1000
3 21/12/3 営業 大阪 宮崎 500
上セルと同一内容を簡単に入力する際、Ctrl キー+Shift+"で上セルの内容をコピーし編集状態になりEnterで確定しますよね?それをもっと簡単に空白セルの時Enterで上セルをコピーし編集状態でもう一度Enterで確定というマクロを組みたいので教えてください。初心者です。
なお、皆さんに教えてもらってA1:A600まで以下のマクロを設定し正常に動作しています。
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim r As Range
Dim flg As Long
flg = 0
If Intersect(Target, Range("A4:A600")) Is Nothing Then Exit Sub 'A列のみを対象 最初につなげるところ
ActiveSheet.Unprotect
flg = 1
For Each r In Target
Dim a As Long
Dim b As String
With r
If Not .NumberFormatLocal = "ge.m.d" Or .Value = "" Then .NumberFormatLocal = "G/標準" 'セルの書式設定がH00.m.d形式だったら標準に戻す
'セルが 数字 且 整数 且 101以上 且 991231以下 の場合
If IsNumeric(.Value) And Int(.Value) = .Value And .Value >= 101 And .Value <= 1111231 Then
b = Str(Val(Left(.Value, 2)) + 1988) & "/" & Mid(.Value, 3, 2) & "/" & Right(.Value, 2)
If IsDate(b) Then 'もしbがDateの形なら
.Value = CDate(b) 'データ型を日付にする
'ここにつなげる。 変数はtmpからbに直す
.NumberFormatLocal = "ggg" & _
IIf(Format(b, "e") > 9, "e年", "_0e年") & _
IIf(Month(b) > 9, "m月", "_1m月") & _
IIf(Day(b) > 9, "d日", "_1d日")
ActiveSheet.Protect
End If
End If
End With
Next
End Sub
どうかよろしくお願いします。
いつも楽しく勉強させていただいております。
今度、Access(2000)の大量のクエリとマクロでできているシステムをリライトすることになりました。
mdbファイルの数は数千、それぞれ数百のクエリとマクロから成り立っています。VBAはほとんど使っていません。システム部に頼らずにに各ユーザー(非システム系)が自分で使うツール的なものを作っていった結果こうなりました。もちろん使われていないシステムが多いですが、もはやどれが生きているのかすら誰も把握できていない状態ですので、少しずつ統合していこうということになりました。
問題は、あまりに数が多いのでマクロもクエリもいちいちデザインビューで開いて読んでいると訳がわからなくなることです。
下記は同僚にもらったコードですが、mdbファイル内のクエリの内容(SQL文)をテキストファイルに書き出します。これが結構役に立ってくれます。
Sub b()
Dim fs As Object, a As Object
Dim db As Database
Dim qdf As QueryDef
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\hoge.txt", True)
Set db = CurrentDb
For Each qdf In db.QueryDefs
a.WriteLine qdf.Name
a.WriteLine qdf.SQL
Next
a.Close
End Sub
私が知りたいのは、これを応用してマクロの中身を出力する方法です。
おそらく、
Dim qdf As QueryDef
と
qdf.SQL
あたりを変更すると可能なのじゃないかと・・・。
どなたかご存知でしたら、教えてください。
VB2008を使っています。WebBrowserのコンポーネントを使って
ホームページにGET形式でパラメータを渡して画面のBODY部分を読み取る
ものを作っているのですが、サーバーのレスポンスにもよりますが
1分間に20回で5分(100回程度)連続アクセスをするのですが、
以下のルーチンの場合何か不安を感じまして、
ネットでこれを使えばOKというものが無くて
確実に読み取る方法が知りたくて質問いたしました。
やはり、2つ目のイベントを用いる方が安心でしょうか?
正しいWebBrowserの使い方(ループ判定)をご存知の方教えてください。
'***** WebBrowser1.ReadyState *****
WebBrowser1.Navigate(URL)
Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete Or WebBrowser1.IsBusy = True
Application.DoEvents()
Loop
data = WebBrowser1.DocumentText
'***** DocumentCompletedイベントまでループ *****
public wait_flag as Boolean
wait_flag = True
WebBrowser1.Navigate(URL)
Do While (WebBrowser1.IsBusy = True) Or (wait_flag = True)
Application.DoEvents()
Loop
data = WebBrowser1.DocumentText
'---- イベント -----
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
wait_flag = False
End Sub