Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


94 / 500 ページ ←次へ | 前へ→

【11415】Re:excel出力先をデスクトップに指定する
回答  VBA初心者  - 10/1/22(金) 12:04 -

引用なし
パスワード
   ▼超初心者 さん:
こんにちは。
 自分なりに修正して

sub
 
Dim objWShell As Object 'WScript.Shell
Dim strDesktopPath As String 'デスクトップの場所

'Windows Script Hostのオブジェクトを作成する
Set objWShell = CreateObject("WScript.Shell")

'スペシャルフォルダ(特殊フォルダ)の場所を返す
strDesktopPath = objWShell.SpecialFolders("Desktop")

Set DB = CurrentDb
  xlsFileName = "strDesktop" & Format(Date, "yyyy_mm_dd") & "履歴データ一覧.xls"
   Debug.Print xlsFileName 
        .
        .
        .(途中省略)
xlsWkb.SaveAs xlsFileName, FileFormat:=56
  xlsWkb.Close: Set xlsWkb = Nothing
  xlsApp.Quit: Set xlsApp = Nothing
        
end sub

 としましたがユーザのデスクトップに書き出されません。
デバックプリントで出力してもどこをどのように修正するのか
わかりません。
どうかご教授をお願いします。 

>▼VBA初心者 さん:
>>  「xlsFileName = "SpecialFolders("Desktop"):\" & Format
>>  (Date, "yyyy_mm_dd") & "ホストデータ.xls"」として、
>> 使用しているユーザのデスクトップに保存されるでしょうか。
>
>Debug.Print xlsFileName
>にて、xlsFileNameのデータの中身を確認してみると良いです。
>きちんとしたファイル名(フルパス)になっていたら出力されます。
>
>
>余談ですが、私のAcc2000では、デスクトップパスは、
>CreateObject("WScript.Shell").SpecialFolders("Desktop")
>このようにして取得します。
>
>2007から(?)の機能でCreateObjectなしでも使えるように
>なっているのかもしれませんが、一応、参考までに。。。
・ツリー全体表示

【11414】Re:ADOによるオラクルDB接続についての...
発言  小僧  - 10/1/22(金) 11:44 -

引用なし
パスワード
   VBA初心者さん:
こんにちは。

Oracleの知識はありませんのでご勘弁を…。


> 1.Accessのメニューフォームを開いたときに、オラクルサーバに接続
> 
> 2.次のフォームを開きコマンドを実行して「Select文」などを実行
>
> 3.mdbを閉じたら、オラクルサーバから抜ける(閉じる)

基本的な設計についてですが
VBAとしては一般論としては余り望ましいものではありません。

(あくまで一般論ですので、
 目的に沿っている場合は例外もありだと思われます。
 h tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=11120;id=access
 (こちらの掲示板は直リンクが禁止ですので、補完して下さい)
 の投稿の前半部をお読みになって下さい。)


> 実際にちゃんとオラクルDBに接続されているのかを確認できなく
> 困っております。

[11390] でお答えしたVBA初心者さんと同じ方でしょうか。

回答の下部に記載しましたが
デバッグのやり方を覚えて頂くと
ご自分で確認できますね。

「VBA」「ステップ実行」「ローカルウィンドウ」等をキーワードに
Web検索すると、色々やり方が見つかるかと思われます。
・ツリー全体表示

【11413】Re:複数条件での抽出について教えて下さい
発言  小僧  - 10/1/22(金) 11:07 -

引用なし
パスワード
   ▼ken さん:
こんにちは。

> Ck1のチェックボックス

> Select Case Ck1
> Case 1
> Case 2

チェックボックスの値で判断する場合は
True(-1) か False(0)で比較する事になると思われます。

ちょっと仕様が解りづらいので整理させて下さい。
Field_A と TextA についての抽出は問題なさそうですので
Field_B の抽出についてお尋ねします。

> Ck1のチェックボックスに応じて複数の語句でOR抽出

Ck1 はチェックボックス名で宜しいでしょうか?
ご提示された文面ですと、チェックボックスが1個に見受けられますが
チェックボックス_1を選択 → 語句Aが抽出対象
チェックボックス_2を選択 → 語句Bが抽出対象



([Field_B]='語句A' OR '語句B')

という様な仕様ではないのでしょうか。
・ツリー全体表示

【11412】Re:excel出力先をデスクトップに指定する
発言  超初心者  - 10/1/22(金) 11:06 -

引用なし
パスワード
   ▼VBA初心者 さん:
>  「xlsFileName = "SpecialFolders("Desktop"):\" & Format
>  (Date, "yyyy_mm_dd") & "ホストデータ.xls"」として、
> 使用しているユーザのデスクトップに保存されるでしょうか。

Debug.Print xlsFileName
にて、xlsFileNameのデータの中身を確認してみると良いです。
きちんとしたファイル名(フルパス)になっていたら出力されます。


余談ですが、私のAcc2000では、デスクトップパスは、
CreateObject("WScript.Shell").SpecialFolders("Desktop")
このようにして取得します。

2007から(?)の機能でCreateObjectなしでも使えるように
なっているのかもしれませんが、一応、参考までに。。。
・ツリー全体表示

【11411】Re:Access→Excel Versionが95でExportさ...
回答  YU-TANG  - 10/1/21(木) 21:24 -

引用なし
パスワード
   こんばんは、YU-TANG です。

> どこで、ファイル形式を指定しているのでしょうか?

acSpreadsheetTypeExcel9 で、ということになるでしょうね。
定数自体の意味は、下記辺りを参照するか、独自に検索してください。

h tp://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/apr07/hey0403.mspx

ただ、OutputTo メソッドがこの定数をどのように解釈しているのかは、
まったく分かりません。
最初のレスで、

> Undocumented な技なので、いっさい保証しませんが。

と前置きしてあります。
意味は、この用法について MS の公式資料は一切存在しないということです。
もちろん仕様も不明です。試した結果がすべてであって、それが正しいのか
バグなのか、次のバージョンでも使えるのかそれともパッチが当たった
とたんに使えなくなるのか、誰にも分かりません。本来存在しないはずの
機能だからです。
AS IS かつ @Your Own Risk の世界です(Access にはそういう隠し機能が
たくさんあります)。

なので、保証や解説が必要なようでしたら、小僧さんの回答にあるような
真っ当な方法をお勧めします。
それでは。
・ツリー全体表示

【11410】excel出力先をデスクトップに指定する
質問  VBA初心者  - 10/1/21(木) 21:03 -

引用なし
パスワード
   こんばんわ。
VBA初心者です。
OS:XP
office:Access2007

フォームからエクセルファイルでデータを出力しているのですが、
出力先を、使用しているユーザのデスクトップに指定するにはどうしたら
いいでしょうか。
例:c:\document and setting\users\デスクトップ\に出力したいです。
下記に一連のコードを記載しました。
 xlsFileName = "C:\" & Format(Date, "yyyy_mm_dd") & "ホストデータ.xls"
のところを
 「xlsFileName = "SpecialFolders("Desktop"):\" & Format
  (Date, "yyyy_mm_dd") & "ホストデータ.xls"」として、
使用しているユーザのデスクトップに保存されるでしょうか。
お忙しい中申し訳ないですが、どなたかご教授をお願いします。

----------------------------------------------------------------

Private Sub コマンド_Click()
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim strSQL As String
Dim strWhere As String
Dim xlsApp As Object
Dim xlsWkb As Object
Dim xlsFileName As String
Dim i As Long

  Set DB = CurrentDb
  xlsFileName = "C:\" & Format(Date, "yyyy_mm_dd") & "ホストデータ.xls"
  
  'もし Filterプロパティになにも記述されていなかったら
  'フォームに表示されている全データを出力するようにします。
  
  If Me.Filter = "" Then
    strWhere = True
  Else
    strWhere = Me.Filter
  End If

  
  '変数に SQL文を代入します。
  'Filter プロパティに記述されているものを抽出条件とします。
  
  strSQL = ""
  strSQL = strSQL & " SELECT 登録日 "
  strSQL = strSQL & "   , AB_COMM AS 事業所 "
  strSQL = strSQL & "   , NEW_HOSTNAME AS 新PC名 "
  strSQL = strSQL & "   , MEMO5 As 事項 "
  strSQL = strSQL & " FROM " & Me.RecordSource & " "
  strSQL = strSQL & " WHERE " & strWhere

  'レコードセットに対象のデータを代入します
  Set RS = DB.OpenRecordset(strSQL, dbOpenSnapshot)
    
  '以下Excelの操作------------------------------------------
  Set xlsApp = CreateObject("Excel.Application")
    xlsApp.Visible = True
  
  Set xlsWkb = xlsApp.workbooks.Add
    With xlsWkb.Sheets("Sheet1")
    
    For i = 0 To RS.Fields.Count - 1
      .Range("A1").Offset(0, i).Value = RS.Fields(i).Name
    Next i
    
    .Range("A2").CopyFromRecordset RS
    .Columns("A:H").AutoFit
    End With
    
    xlsWkb.SaveAs xlsFileName
  xlsWkb.Close: Set xlsWkb = Nothing
  xlsApp.Quit: Set xlsApp = Nothing
  
  MsgBox "出力が終了しました"
    
End Sub
・ツリー全体表示

【11409】ADPのテーブルをMDBにインポートしたい
質問  pon  - 10/1/21(木) 17:54 -

引用なし
パスワード
   こんにちはよろしくお願いいたします


ADPのDTを操作するのは怖いのでMDBで利用したいと思っています

Access のすべてのデータベース オブジェクトをインポートするサンプル コード
tp://support.microsoft.com/kb/298174/ja


  Set db = DBEngine.Workspaces(0).OpenDatabase(strPath, True) ←ココ

   'Import tables from specified Access database.
   For Each td In db.TableDefs
   strTDef = td.Name
   If Left(strTDef, 4) <> "Msys" Then
   DoCmd.TransferDatabase acImport, "Microsoft Access", strPath, acTable, _
   strTDef, strTDef, False
   End If
   Next
でMDBからMDBへのTBLのインポートは出来ました


ADPからMDBにインポートしようとすると

  Set db = DBEngine.Workspaces(0).OpenDatabase(strPath, True) ←ココ

実行時エラー '3343':
データベースの形式 'C:\hoge\fuga.adp' を認識できません。
となってしまいます

どうすればインポートできるでしょうか
アドバイスよろしくお願いいたします
・ツリー全体表示

【11408】Re:読取専用ADPの作成方法
お礼  pon  - 10/1/21(木) 17:43 -

引用なし
パスワード
   ▼YU-TANG さん:
大変遅くなりました m(_ _)m

>プロパティ等見てみましたが
>その違いがどこにあるかわかりませんでした

見落としていました
プロパティの全般タブ
属性
に、読取専用のチェックがついていました

これをはずしたら
普通に開けるようになりました

エクセルファイルでも同様なんですね
初めて気がつきました

ブックが使用中の場合に時折遭遇することがあって
ファイルサーバー の ブックについては
開き放し防止用に時間が来れば自動で閉じるで対応したことはあったのですが・・・

アドバイスありがとうございました
今後もよろしくお願いいたします
・ツリー全体表示

【11407】Re:クエリ結果件数が違う
お礼  pon  - 10/1/21(木) 17:30 -

引用なし
パスワード
   ▼小僧 さん:
大変遅くなりました m(_ _)m

>とりあえずは安定した動作になって何よりです。
ありがとうございました

>何度かコピー&ペーストされてお気づきかと思われますが
>こちらの掲示板では投稿時に半角スペースが2個並ぶと
>全角スペース1個に変換されてしまう様です。
なんか変・・・・
とは思っていたのですが、
こういう掲示板の仕様もあるんですね
勉強になりました

>両方に半角スペースを入れております。
>(せこいですよね…)
テクニックのご紹介ありがとうございます
利用させて頂きたいと思います


ADPなんか理解が進みません・・・ (T_T)
今後もご指導よろしくお願いいたします  m(_ _)m
・ツリー全体表示

【11406】Re:Excelの出力について
お礼  坂井  - 10/1/21(木) 14:20 -

引用なし
パスワード
   ご回答をいただき、ありがとうございます。

 その後、Accessを何回か動いてみたら、

通常に戻りました。


・ツリー全体表示

【11405】ADOによるオラクルDB接続についてのご...
質問  VBA初心者  - 10/1/21(木) 13:54 -

引用なし
パスワード
   こんにちわ。VBA初心者です。

OS:XP Sp3
Access 2007を使ってます。

ACCESSを利用してvbaによりオラクルデータベースに接続して
selectやupdate、insert、delete文などを発行できるように
しようとしております。
 参考書などを利用して標準モジュールで記載したのですが、
実際にちゃんとオラクルDBに接続されているのかを確認できなく
困っております。
 やりたい事としては、
1.Accessのメニューフォームを開いたときに、オラクルサーバに接続
 
2.次のフォームを開きコマンドを実行して「Select文」などを実行

3.mdbを閉じたら、オラクルサーバから抜ける(閉じる)

を作成したいと考えております。
 最終的には、接続先サーバ名やユーザ名・パスワードは
フォームに入力したオラクルサーバに接続するようにしたいです。

*もちろん「tnsnames.ora」には接続先サーバ名を記入済みにしております。


下記のコードにてオラクルDBに接続しようと記述しました。
サーバ名ABC0032/ユーザ名SPS111/パスワードSPS111
'Set objADORS = objADOCON.Execute("SELECT * FROM ABC")
コメントで潰してますが、select文を組み込みました。

' ADOを使いORACLEのDBを閉じます 
  OraCN.Close
  Set OraCN = Nothing
オラクルDBを閉じる記述です。

どうかお時間のあるときご教授をお願い致します。
  
______________________________________________________________________________
Public Const DB_USER As String = "SPS111"
Public DB_CONNECT_OBJECT As New ADODB.Connection

Sub prcAdoOracleDB()

 
  Dim adoCON As New ADODB.Connection
  Dim objADORS As ADODB.Recordset


  '1.ADOを使いORACLEのDBを開きます

  strCN = "Provider=OraOLEDB.Oracle.1;" _
    & "Data Source=ABC0032;" _
    & "User ID=SPS111;" _
    & "Password=SPS111;"
  DB_CONNECT_OBJECT.Open strCN
  
  'Set objADORS = objADOCON.Execute("SELECT * FROM ABC")
  
  
  ' ADOを使いORACLEのDBを閉じます 
  OraCN.Close
  Set OraCN = Nothing
  

End Sub
・ツリー全体表示

【11404】Re:フォームで抽出したデータをExcel出力
お礼  VBA初心者  - 10/1/21(木) 11:48 -

引用なし
パスワード
   ▼小僧 さん:
 こんにちわ。
>業務が忙しく、
>なかなか返答できなくて申し訳ありません。
 お忙しい中ご回答ありがとうございます。

>プログラムを実行してみて下さい。
 実行した後にイミディエイトをみたら、フィールド名
が表示されておりました。
 今まで、プログラムを実行しないでイミディエイト
上で記載して何も表示できないと思っておりました。
 知識不足でした。

とても助かりました。有難うございます。
 今後とも何卒よろしくお願いします。


>▼VBA初心者 さん:
>こんにちは。
>
>業務が忙しく、
>なかなか返答できなくて申し訳ありません。
>
>>> For i = 0 To RS.Fields.Count - 1
>>>  .Range("A1").Offset(0, i).Value = RS.Fields(i).Name
>>>  Debug.Print RS.Fields(i).Name
>>> Next i
>
>> とフォームプロシージャに記載して、
>
>プログラムを実行してみて下さい。
>
>> Debug.Print
>
>という構文が、
>イミディエイトウィンドウへ書き出す命令となっております。
・ツリー全体表示

【11403】Re:Access→Excel Versionが95でExportさ...
お礼  cocoa  - 10/1/21(木) 11:47 -

引用なし
パスワード
   ▼小僧 様

いつもお世話になります。

DoCmd.OutputTo acOutputQuery, "Q_shohin", acSpreadsheetTypeExcel9, xlsFileName, False

上記を記述する事により、エクスポートする際の形式の問題は回避できそうです。
※回避されているかどうかはわからないですが、実際欲しい結果となっております。

on error goto で検索したところ、理解できました。
err.Descriptionで表示できる事がわかりました。

ありがとうございました。
・ツリー全体表示

【11402】Re:Access→Excel Versionが95でExportさ...
質問  cocoa  - 10/1/21(木) 11:28 -

引用なし
パスワード
   ▼YU-TANG様

>Undocumented な技なので、いっさい保証しませんが。

>DoCmd.OutputTo acOutputQuery, "Q_shohin", acSpreadsheetTypeExcel9, xlsFileName, False
試した結果、Excel2003形式として保存されているかどうかはわからないのですが、
上書き保存した際に、警告がでなくなりました。
まずお礼申し上げます。ありがとうございました。

あと、もう一つ質問なのですが。
acSpreadsheetTypeExcel9について、調べました。
インポートするデータのファイル形式を指定する定数です。とありました。

どこで、ファイル形式を指定しているのでしょうか?
それとも、acSpreadsheetTypeExcel9を記述すると、インストールされいるVersionを汲み取ってエクスポートされるのでしょうか?

宜しくお願い致します。
・ツリー全体表示

【11401】複数条件での抽出について教えて下さい
質問  ken  - 10/1/21(木) 10:45 -

引用なし
パスワード
   初めて投稿します。

フォームから複数条件での抽出を行いたいと考えているのですが、以下のような条件での抽出は可能でしょうか?

・Field_A、Field_BをANDで抽出(いずれも抽出条件は数種類の定型語句)

・Field_Aの抽出条件はTextAのコンボボックスから1つの語句を選択
・Field_Bの抽出条件はCk1のチェックボックスに応じて複数の語句でOR抽出

Select Case Ck1
 Case 1
  Filter="([Field_A]=" & '"TextA"' &) AND ([Field_B]='語句A' OR '語句B')"
 Case 2
  :

上記のようなFilterを作成したのですが、うまく抽出できませんでした。

ANDとORが混在するような抽出はできないのでしょうか。
・ツリー全体表示

【11400】Re:Access→Excel Versionが95でExportさ...
回答  YU-TANG  - 10/1/20(水) 20:52 -

引用なし
パスワード
   こんばんは、YU-TANG です。

> 元から、Excel2003形式でエクスポートする指定方法はないものでしょうか?

Undocumented な技なので、いっさい保証しませんが。

DoCmd.OutputTo acOutputQuery, "Q_shohin", acSpreadsheetTypeExcel9, xlsFileName, False

それでは。
・ツリー全体表示

【11399】Re:Access→Excel Versionが95でExportさ...
回答  小僧  - 10/1/20(水) 17:16 -

引用なし
パスワード
   ▼cocoa さん:
こんにちは。

>元から、Excel2003形式でエクスポートする指定方法はないものでしょうか?

残念ながら OutputTo メソッドでは難しいです。


当方とVBA初心者さんとのやり取りでもありますが、
h tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=11370;id=access

TransferSpreadsheet メソッドを使うと
Excelのタイプ指定ができますが、
データをエクスポートするだけの機能ですので
見た目等があまり宜しくありません。

Excelへの細かい操作が必要な場合には
オートメーションと呼ばれる操作が必要となってきます。


> 再度実行してくださいと、
> こちら側より警告を出すようにできないでしょうか?

OutputTo メソッドを使うかどうかで変わってくるのですが
Excelが開いてるかどうかを確認してから実行する方法と
とりあえず実行してからエラー内容で切り分ける方法があります。

前者は(まずありえないと思いますが)確認の際には開いてなかったのに
OutputTo メソッドが実行される時に誰かがExcelを開く可能性が
ありえます。

後者は「On Error GoTo」「エラートラップ」などの語句で
Web検索を行うと色々方法が探せるかと思われます。
・ツリー全体表示

【11398】Re:Excelの出力について
回答  小僧  - 10/1/20(水) 16:52 -

引用なし
パスワード
   ▼坂井 さん:
こんにちは。

ざっとコードを見た限りでは問題がなさそうに思われます

>現象:Excel003.xlsへの出力結果は、
>   一行しか出力されていない、その以外のデータは全く出力されていない。

1行は見出し行だけという事でしょうか。

一番問題がありそうなのが クエリ Table_003 の様に思われます。
クエリを普通に開いてみて、中身は入っておりますでしょうか。

・ツリー全体表示

【11397】Re:フォームで抽出したデータをExcel出力
回答  小僧  - 10/1/20(水) 16:50 -

引用なし
パスワード
   ▼VBA初心者 さん:
こんにちは。

業務が忙しく、
なかなか返答できなくて申し訳ありません。

>> For i = 0 To RS.Fields.Count - 1
>>  .Range("A1").Offset(0, i).Value = RS.Fields(i).Name
>>  Debug.Print RS.Fields(i).Name
>> Next i

> とフォームプロシージャに記載して、

プログラムを実行してみて下さい。

> Debug.Print

という構文が、
イミディエイトウィンドウへ書き出す命令となっております。
・ツリー全体表示

【11396】Access→Excel Versionが95でExportされる
質問  cocoa  - 10/1/20(水) 10:57 -

引用なし
パスワード
   お世話になります。

Private Sub Export_Click()
  Dim xlsFileName As String
    xlsFileName = "c:\" & Format(Date, "yyyymmdd") & ".xls"
  
    DoCmd.OutputTo acOutputQuery, "Q_shohin", acFormatXLS, xlsFileName, False
    MsgBox "出力完了"
End Sub

1.
上記を実行すると、エクスポートはされるのですが、保存形式がExcel95のようで、
上書き保存しようとすると、最新の形式に更新しますか?と警告されます。
元から、Excel2003形式でエクスポートする指定方法はないものでしょうか?

2.エクスポートした、yyyymmdd.xlsを開いている際に、上記vbaを実行すると、
 実行時エラーとなり、ファイルを保存できませんとなります。
 実行時エラーを出さないようにし、MsgBoxでファイルを閉じてから、
 再度実行してくださいと、こちら側より警告を出すようにできないでしょうか?

宜しくお願い致します。
・ツリー全体表示

94 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1082694
(SS)C-BOARD v3.8 is Free