Access VBA質問箱 IV

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

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


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

【6696】Excelへエクスポートするときに上書きを回...
質問  haramama  - 05/10/31(月) 15:56 -

引用なし
パスワード
   はじめまして。
AccessVBA初心者です。
マクロを実行して、日付別のデータをExcelファイルのシート別
にエクスポートをしたいと思っていますが、うまくいきません。
パラメータを利用して日付を入力し、その日付のデータを
Excelファイルにエクスポートまではできますが、
次の日付のデータをエクスポートすると前のデータに
上書きされてしまいます。
何かいい方法はありませんでしょうか?
本当に困っています。
どなたかお助け下さい。。。
・ツリー全体表示

【6695】Re:最大日
回答  小僧  - 05/10/31(月) 15:03 -

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

IIf 関数 を使って複雑になってしまうのが嫌でしたら、
ユーザ定義関数を作って回避する方法もあるかと思います。

Function MaxDate(ParamArray MyDate()) As Date
Dim i As Long
  For i = 0 To UBound(MyDate) - 1
    If MaxDate = 0 Then
      MaxDate = MyDate(i)
    Else
      If MaxDate < MyDate(i) Then
        MaxDate = MyDate(i)
      End If
    End If
  Next
End Function

この関数をクエリの中から

MaxDate([A],[B],[C])のように呼び出して使ってみて下さい。
・ツリー全体表示

【6694】Re:複数設定の主キーの差分データを追加す...
発言  小僧  - 05/10/31(月) 14:29 -

引用なし
パスワード
   ▼山田さん、Gin_II さん:
こんにちは。

>不一致クエリを作成してください。

という方法の他に Seek メソッドで複数フィールドの検索が可能な模様です。
・ツリー全体表示

【6693】Re:複数設定の主キーの差分データを追加す...
回答  Gin_II  - 05/10/31(月) 13:55 -

引用なし
パスワード
   テーブルA
テーブルB
を元に、不一致クエリを作成してください。

で、そのクエリを元に、追加クエリを作成すればいいと思います。
・ツリー全体表示

【6692】Re:最大日
質問  ???  - 05/10/31(月) 12:54 -

引用なし
パスワード
   ▼小僧 さん:
>▼??? さん:
>こんにちは。
>
>UPDATE Table1 SET Table1.D = IIf([A]>[B] And [A]>[C],[A],IIf([B]>[C],[B],[C]));
>
>後々の事を考えると、ユニークとなるフィールドを作っておいた方が良いと思います。

ありがとうございます。ところで、この場合は3つのフィールドですが、10こ以上のフィールドがある場合の簡単な方法はありませんか?
・ツリー全体表示

【6691】複数設定の主キーの差分データを追加する...
質問  山田  - 05/10/31(月) 11:58 -

引用なし
パスワード
   WinXP
Access2002のADOの場合です。

教えて下さい。
テーブルAには
フィールドA
フィールドB
フィールドC
フィールドD
の4つのフィールドに主キーを設定しています。

テーブルBにも同じく
フィールドA
フィールドB
フィールドC
フィールドD
の4つのフィールドに主キーを設定しています。

テーブルAにテーブルBの差分の(主キーが重複しない)データ
を追加したいのですが
この場合一般的にはどのようなメソッドを使用して
作成するものなのでしょうか。

FINDを使用しても複数のフィールドを対象にはできないようなので
困っています。
・ツリー全体表示

【6690】Re:最大日
回答  小僧  - 05/10/31(月) 11:46 -

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

UPDATE Table1 SET Table1.D = IIf([A]>[B] And [A]>[C],[A],IIf([B]>[C],[B],[C]));

後々の事を考えると、ユニークとなるフィールドを作っておいた方が良いと思います。
・ツリー全体表示

【6689】Re:クエリで質問があります
回答  TOMO  - 05/10/31(月) 11:36 -

引用なし
パスワード
   お返事遅くなり申し訳御座いません。
以下の内容で宜しいでしょうか。
もし誤っておりましたらご指示下さいませ。
宜しく御願い致します。

SELECT 電化製品.件数, 電化製品.購入累計, 電化製品.オーダーNo, 電化製品.顧客名, 電化製品.英語名, 電化製品.[No], 電化製品.本体No, 電化製品.電化製品No, 電化製品.電化製品.入荷日, 電化製品.出荷日, 電化製品.再出荷日, [電化製品].電化製品の寿命 AS 式1, 電化製品.故障日, 電化製品.故障箇所, 電化製品.記号, 電化製品.備考
FROM 電化製品
WHERE ((([電化製品].[電化製品の寿命])=Int(Date()-IIf(IsNull([再出荷日]),[出荷日],[再出荷日]))));

▼YU-TANG さん:
>こんにちは、YU-TANG です。
>
>>早速試みてみたのですが、以下の様に式を入れてデータシートビューで
>>確認したところリストが一つも挙がってきませんでした。
>>何か問題があるのでしょうか。
>
>現状の SQL 文と、関連フィールドのデータ型を提示していただけますか。
>もし↑の意味が分からなければ、そう言ってください。
>別の説明を試みますので。
・ツリー全体表示

【6688】Re:レコード件数の取得について
発言  小僧  - 05/10/31(月) 9:40 -

引用なし
パスワード
   ▼NK さん:
おはようございます。

>『今開いているレコードのNo』を返す場合と
>『開いているテ−ブルのレコード総数』を返す場合があります。

Help で、RecordCount プロパティ を確認されてみて下さい。


機械翻訳のためちょっと読みづらいのですが、MS の技術情報にも載っています。

http://support.microsoft.com/default.aspx?scid=kb;ja;207652
・ツリー全体表示

【6687】最大日
質問  ???  - 05/10/31(月) 9:00 -

引用なし
パスワード
   テーブル: Table1
フィールド: A、B、C、D(日付型)
があり、各レコードのA、B、Cの日付の最大日をDに出力(更新)するクエリーを教えてください。
・ツリー全体表示

【6686】Re:トグルボタンのイベントについて
お礼  ウラヌス  - 05/10/31(月) 7:59 -

引用なし
パスワード
   おはようございます。
たびたびのアドバイス誠にありがとうございました。
教えていただいた方法で設定できました。
・ツリー全体表示

【6685】Re:レコード件数の取得について
発言  NK  - 05/10/31(月) 4:27 -

引用なし
パスワード
   投稿者名が漏れていました。すみません。
・ツリー全体表示

【6684】Re:レコード件数の取得について
質問  [名前なし]  - 05/10/31(月) 3:06 -

引用なし
パスワード
   ▼小僧 さん:
こんばんは。ありがとうございました。
記載したコードはサブフォームのLOAD時のコードです。
という事を書くのを忘れていました。すみません。

教えていただいたコードで上手くいきました。

ところで、よろしければもう1つ教えていただけないでしょうか?
  Me.RecordsetClone.RecordCount
なのですが、『今開いているレコードのNo』を返す場合と
『開いているテ−ブルのレコード総数』を返す場合があります。
(最初の質問に書いたように、他のデータベースでは
 Movelastを使わずとも総数が返ってきていました)
どちらもコードは同じ上記の1文なのですが・・・
どういった場合に違いが発生するのでしょうか?
・ツリー全体表示

【6683】Re:ホームページに接続
回答  まさ7251  - 05/10/30(日) 22:11 -

引用なし
パスワード
   ▼よし さん:
>アクセス2003を使用してます。
>フォームのコマンドボタンをクリックするとinternet Explorerが起動して
>指定したアドレス(下記)
>例「http://www.vbalab.net/vbaqa/c-board.cgi?cmd=psn;id=access
>に接続して表示するようにしたいのです。
>宜しくお願い致します。

Shellを使えば出来ると思います。
InternetExplorerのEXEを指定し、
引数としてURLを指定すれば良いかと思います。
Shellの使い方は、ヘルプをご参照ください。
・ツリー全体表示

【6682】ホームページに接続
質問  よし  - 05/10/30(日) 21:46 -

引用なし
パスワード
   アクセス2003を使用してます。
フォームのコマンドボタンをクリックするとinternet Explorerが起動して
指定したアドレス(下記)
例「http://www.vbalab.net/vbaqa/c-board.cgi?cmd=psn;id=access
に接続して表示するようにしたいのです。
宜しくお願い致します。
・ツリー全体表示

【6681】Re:レコード数を制御して、Excelへ吐き出し
回答  まさ7251  - 05/10/30(日) 20:32 -

引用なし
パスワード
   >質問とは、出力したファイルのFilenameはKwの後ろに「元kw.xls」の登録
>日時を入れてほしいです。
>イメージ
>元kw.xlsの登録日時→20051030 19:33の場合は、
>Kw200510301933となってほしい。

>HinaName = "C:\KW_Hina.xls"

>  xName = "C:\KW.xls"    ====>ここです

FileDateTime関数で、ファイルの更新日を求めることが出来ます。
Format関数で、変換が出来ます。
この2つの関数でご希望の処理は出来るかと思います。
・ツリー全体表示

【6680】Re:レコード数を制御して、Excelへ吐き出し
質問  Saiyama  - 05/10/30(日) 19:41 -

引用なし
パスワード
   小僧さん
 こんばんわ、何度も質問しまいまして、すみませんでした。
 以下のコードを使って、走らせて見ました。思った通りの結果になりましたので、
本当にありがとうございます。
 最後の質問になりますが、よろしくお願いします。
質問とは、出力したファイルのFilenameはKwの後ろに「元kw.xls」の登録
日時を入れてほしいです。
イメージ
元kw.xlsの登録日時→20051030 19:33の場合は、
Kw200510301933となってほしい。

Function ExcelExport20Recort()
'要参照 Microsoft DAO x.x Object Library
Dim xlsApp As Object
Dim xlsWkb As Object
Dim xlsSht As Object
Dim xName As String
Dim RS As DAO.Recordset
Dim QName As String
Dim i As Long
Dim j As Long
Dim LastRow As Long
Dim HinaName As String
HinaName = "C:\KW_Hina.xls"
Const lngMaxRow As Long = 20
  xName = "C:\KW.xls"    ====>ここです
  QName = "クエリ名"
  LastRow = DCount("*", QName)
 
  Set RS = CurrentDb.OpenRecordset(QName, dbOpenSnapshot)

  Set xlsApp = CreateObject("Excel.Application")
  
   Set xlsWkb = xlsApp.Workbooks.Open(HinaName)
    With xlsWkb.Sheets("Sheet1")
      Do Until RS.EOF
        For i = 0 To RS.Fields.Count - 1
          .Cells(j * (lngMaxRow + 1) + 1, i + 1).Value = RS(i).Name
        Next
        .Cells(j * (lngMaxRow + 1) + 2, 1).CopyFromRecordset RS, lngMaxRow
        j = j + 1
        Loop
        End With
  RS.Close: Set RS = Nothing
  xlsWkb.SaveAs xName
  xlsWkb.Close True: Set xlsWkb = Nothing
  xlsApp.Quit: Set xlsApp = Nothing
  MsgBox "エクスポート終了"
End Function
・ツリー全体表示

【6679】Re:コンボボックスでの検索方法
発言  まさ7251  - 05/10/30(日) 1:00 -

引用なし
パスワード
   こんばんは、まさ7251です。

> メインフォームにあるコンボボックスのリストから(オプション)を選択すると
> フィルターオプションフォームが開き、○○と等しい、○○と等しくない
> を検索する事ができます。

> ここに、○○を含む ○○を含まない を加えたいのですが
> どのようにしたらよいか分かりません。

> たぶん
> フィルタ文字列の取得
> '----------------------------------------------------------------------
> Public Function GetFilter(ByVal FilterControlName As String) As String
> End Function
> ここの部分に少し修正が必要みたいなのですが…。

修正が必要と思われる部分の見当がついているのでしたら、
まずはご自分で試行錯誤しながら修正してみてはどうでしょうか。
その上で、”どのようにして、どううまく行かなかったのか”を
書き込むべきかと思います。

また、これだけの説明およびコードを書き込まれましても、
これを再現するのにはだいぶ時間がかかります。
回答してもらう人にそこまで要求するのはどうかと思います。
本来なら、問題のある部分だけを抜粋して書き込むのが
筋かと思います。

それが出来ないのでしたら、せめてmdbを圧縮して見てもらうことが
出来るようにする等の配慮があっても良いかと思いますが、
どうでしょうか。

PS.本質問は、以前に他の掲示板にて質問していたものの続きですよね。
 コードもその際に提示してもらったものかと思います。
 なぜ、他の掲示板にて新たに質問するのかよくわかりません。
・ツリー全体表示

【6678】コンボボックスでの検索方法(7)
質問  チャラ  - 05/10/30(日) 0:01 -

引用なし
パスワード
   見難くて申し訳ありません。

メインフォームにあるコンボボックスのリストから(オプション)を選択すると
フィルターオプションフォームが開き、○○と等しい、○○と等しくない
を検索する事ができます。

ここに、○○を含む ○○を含まない を加えたいのですがどのようにしたらよいか
分かりません。

たぶん


フィルタ文字列の取得
'-------------------------------------------------------------------------Public Function GetFilter(ByVal FilterControlName As String) As String
End Function

ここの部分に少し修正が必要みたいなのですが…。
・ツリー全体表示

【6677】コンボボックスでの検索方法(6)
質問  チャラ  - 05/10/29(土) 23:49 -

引用なし
パスワード
   '-----------------------------------------------------------------------------------------------
'コンボボックス [値(条件2)] - 更新後処理イベントプロシージャ
'-----------------------------------------------------------------------------------------------
Private Sub CmbValues2_AfterUpdate()

'値(条件2)の設定を更新
With Me.AutoFilterSetting
.Item(.CurrentFilterControl.Name).FilterValues2 = Me.CmbValues2.Value
End With
End Sub

'-----------------------------------------------------------------------------------------------
'コンボボックス [比較方法(条件1)] - 更新後処理イベントプロシージャ
'-----------------------------------------------------------------------------------------------
Private Sub CmbCompare1_AfterUpdate()

'比較方法(条件1)の設定を更新
With Me.AutoFilterSetting
.Item(.CurrentFilterControl.Name).FilterCompare1 = Me.CmbCompare1.ListIndex
End With
End Sub

'-----------------------------------------------------------------------------------------------
'コンボボックス [比較方法(条件2)] - 更新後処理イベントプロシージャ
'-----------------------------------------------------------------------------------------------
Private Sub CmbCompare2_AfterUpdate()

'比較方法(条件2)の設定を更新
With Me.AutoFilterSetting
.Item(.CurrentFilterControl.Name).FilterCompare2 = Me.CmbCompare2.ListIndex
End With
End Sub

'-----------------------------------------------------------------------------------------------
'コマンドボタン [実行] - クリック時イベントプロシージャ
'-----------------------------------------------------------------------------------------------
Private Sub CmdExecute_Click()

'オブジェクト変数
Dim clsElement As dbsProject1.ClsAutoFilterControlSetting

'その他の変数
Dim strFilter As String
Dim strText As String

'コンボボックスの選択状況の検査 - 不正な選択状況の場合は処理中止
If Not (IsNull(Me.CmbValues2.Value)) And IsNull(Me.CmbValues1.Value) _
Or Not (IsNull(Me.CmbValues1.Value)) And Me.CmbCompare1.ListIndex < 1 _
Or Not (IsNull(Me.CmbValues2.Value)) And Me.CmbCompare2.ListIndex < 1 Then
VBA.MsgBox _
Prompt:="入力ラインにエラーがあります。" & VBA.vbNewLine _
, Buttons:=VBA.vbCritical Or VBA.vbOKOnly
Me.CmbCompare1.SetFocus
Exit Sub
End If

'フィルタ文字列の生成
For Each clsElement In Me.AutoFilterSetting.Items

'フォーカスを取得しているコントロールの場合
If clsElement.FilterControlName = Me.AutoFilterSetting.CurrentFilterControl.Name Then
Let strText = Me.GetFilter(FilterControlName:=clsElement.FilterControlName)
If Not (Len(strText) = 0) Then
Let strFilter = strFilter & " AND " & strText
End If

'それ以外でフィルタ文字列が設定されているコントロールの場合
ElseIf Not (Len(clsElement.Filter) = 0) Then
Let strFilter = strFilter & " AND " & clsElement.Filter
End If
Next
Let strFilter = Mid(strFilter, Len(" AND ") + 1)

'結果表示用フォームにフィルタ適用
Let Me.AutoFilterSetting.DisplayForm.Filter = strFilter
Let Me.AutoFilterSetting.DisplayForm.FilterOn = True

'フォーカスを取得しているコントロールのフィルタ文字列を更新
With Me.AutoFilterSetting
.Item(.CurrentFilterControl.Name).Filter = strFilter
End With

'フォームを閉じる
Application.DoCmd.Close ObjectType:=acForm, ObjectName:=Me.Name, Save:=acSaveNo
End Sub

'-----------------------------------------------------------------------------------------------
'コマンドボタン [取消] - クリック時イベントプロシージャ
'-----------------------------------------------------------------------------------------------
Private Sub CmdCancel_Click()

'フォームを閉じる
Application.DoCmd.Close ObjectType:=acForm, ObjectName:=Me.Name, Save:=acSaveNo
End Sub

'-----------------------------------------------------------------------------------------------
'フィルタ文字列の取得
'-----------------------------------------------------------------------------------------------
Public Function GetFilter(ByVal FilterControlName As String) As String

'オブジェクト変数
Dim clsElement As dbsProject1.ClsAutoFilterControlSetting
Dim strOperator As String
Dim strFilter As String

'初期設定
Set clsElement = Me.AutoFilterSetting.Item(Index:=FilterControlName)

'演算子の設定
Select Case Me.FraFilterOption.Value
Case Me.OptAnd.OptionValue
Let strOperator = Space(1) & Me.OptAnd.Controls(0).Caption & Space(1)
Case Me.OptOr.OptionValue
Let strOperator = Space(1) & Me.OptOr.Controls(0).Caption & Space(1)
End Select

'値(条件1)が指定されていない場合
If IsNull(Me.CmbValues1.Value) Then
Let strFilter = ""

'条件1が指定されている場合
Else

'条件1からフィルタ文字列を生成
Let strFilter _
= Application.BuildCriteria( _
Field:=clsElement.FieldName, FieldType:=clsElement.FieldType _
, Expression:=Me.CmbCompare1.Column(1) & Nz(Me.CmbValues1.Value, ""))

'条件2で比較方法のみ指定されている場合
If IsNull(Me.CmbValues2.Value) And Me.CmbCompare2.ListIndex > 0 Then
Let strFilter = ""

'条件2が指定されている場合
ElseIf Not (IsNull(Me.CmbValues2.Value)) Then
Let strFilter _
= strFilter _
& strOperator _
& Application.BuildCriteria( _
Field:=clsElement.FieldName, FieldType:=clsElement.FieldType _
, Expression:=Me.CmbCompare2.Column(1) & Nz(Me.CmbValues2.Value, ""))
End If
End If

'オブジェクト変数の解放
Set clsElement = Nothing

'戻り値の設定 - フィルタ文字列
Let GetFilter = strFilter
End Function
・ツリー全体表示

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