Access VBA質問箱 IV

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

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


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

【10766】Re:質問事項他について
質問    - 08/11/20(木) 10:51 -

引用なし
パスワード
   有難うございます、抽出されるようになって来ました。
現状では、コンボボックスにアルファベットを表示させることは出来ないですか?
・ツリー全体表示

【10765】Re:質問事項他について
回答  Gin_II  - 08/11/20(木) 10:42 -

引用なし
パスワード
   > アルファベット:テキスト型、数値:数値型

・アルファベットフィールド

> (2)コンボボックスの集合値ソース↓
> 「SELECT alfabetコード.ID, alfabetコード.アルファベット FROM alfabetコード;」
> 列数:1、連結列1

コンボボックスの設定が間違っていますね。
現在は、IDフィールドの内容がコンボボックスの値として認識されます。

コンボボックスの値集合ソースを

SELECT alfabetコード.アルファベット FROM alfabetコード
ORDER BY alfabetコード.ID

のように修正すれば、アルファベットでの抽出もできるようになると思います。
ただし、現在は、コンボボックスで数字(1〜3)が表示されていると思いますが、
そこが、アルファベットフィールドの内容が表示されるようになります。


・数値フィールド
 数値型の場合、

> WHERE アルファベット = '3' AND 数値 BETWEEN 0006 AND 0100
 0006 とかは扱えません。
 実際は、Accessが型変換を自動的に行ってくれているのだと思いますが、
 基本的には、抽出対象のフィールドにきちんと型をあわせてやる方が
 いいです。
 
 入力の際に、6 とかを入れるか、VBAでSQL文を生成する際に、変換するか
 ですね。
 
>   If Not IsNull(Me!kazu4) Then
>     strWhere = strWhere & " AND 数値 BETWEEN " & Me!kazu3 & " AND " & Me!kazu4
>   Else
>     strWhere = strWhere & " AND 数値 =" & Me!kazu3
>   End If

この部分を、

  If Not IsNull(Me!kazu4) Then
    strWhere = strWhere & " AND 数値 BETWEEN " & Val(Me!kazu3) & " AND " & Val(Me!kazu4)
  Else
    strWhere = strWhere & " AND 数値 =" & Val(Me!kazu3)
  End If

のように変更してください。
・ツリー全体表示

【10764】Re:エラーが解決できません
質問  初心者  - 08/11/20(木) 9:37 -

引用なし
パスワード
   おはようございます。
昨日、投稿した者です。
ご丁寧な返信ありがとうございました。

ご教授頂いた通りに修正してみましたが、
「実行時エラー`3125`:
"が見つかりません。パラメータや別名が正しいこと、無効な文字や区切り記号が含まれないこと、または名前が長すぎない事を確認してください。」
というエラーメッセージが発生してしまいます。

〜〜省略〜〜
 End If
  
  →Me.Filter = strCrit
   Me.OrderBy = StrOrder


度々の投稿、申し訳ありません。
・ツリー全体表示

【10763】質問事項他について
発言    - 08/11/20(木) 9:21 -

引用なし
パスワード
   昨日いただいたコードはそのままコピペしたので、変更はされてないです。
(1)テーブルのフィールド型について→アルファベット:テキスト型、数値:数値型
(2)コンボボックスの集合値ソース↓
「SELECT alfabetコード.ID, alfabetコード.アルファベット FROM alfabetコード;」
列数:1、連結列1
です。あと、Combo/kazu3/kazu4については特に数値やテキストなどの設定は行っておりません。
・ツリー全体表示

【10762】Re:エラーが解決できません
発言  Gin_II E-MAIL  - 08/11/19(水) 20:13 -

引用なし
パスワード
   追加です。

> Private Function setFilter(strItem As String)

値を返さないのであれば、Function プロシージャではなく、Sub プロシージャの
方がいいですね。
・ツリー全体表示

【10761】Re:エラーが解決できません
回答  Gin_II E-MAIL  - 08/11/19(水) 20:11 -

引用なし
パスワード
   > 上記のVBAで Me.Filter = strCrit で、実行時エラー3125が発生してしまいます。

エラーメッセージは、

'-----------------------------------------------------
'|' が見つかりません。
パラメータや別名が正しいこと、
無効な文字や区切り記号が含まれていないこと、
または名前が長すぎないことを確認してください。
'-----------------------------------------------------

でしょうか?


>   stDocName = ChrW(113) & ChrW(114) & 〜省略〜

分かりづらいので、

stDocName = "qry リース会社クリエ"

に変更した方がいいと思います。
#ちなみに、クリエ→クエリですかね ^^;


> Private Sub cmdあ_Click()
> Private Sub cmdカ_Click()
> Private Sub cmdサ_Click()
    :

オプショングループにすれば、一つのイベントで処理できると思いますが、
何かオプショングループでは不都合があるのでしょうか?


>     strCrit = "部門名フリガナ like `[" & strItem & "]*`"
>     strCrit = "リース会社フリガナ like `[" & strItem & "]*`"

それぞれ、

strCrit = "部門名フリガナ like '" & strItem & "*'"
strCrit = "リース会社フリガナ like '" & strItem & "*'"

のように修正してみてください。
・ツリー全体表示

【10760】Re:クエリ抽出
お礼  とこやさん E-MAIL  - 08/11/19(水) 19:47 -

引用なし
パスワード
   ありがとうございます。まだまだ私には敷居の高い作業かと思います。
データベースの正規化の基礎というのを勉強したいと思います、それから質問箱に来たいと思います、お騒がせしてすみませんでした。
・ツリー全体表示

【10759】エラーが解決できません
質問  初心者  - 08/11/19(水) 19:06 -

引用なし
パスワード
   Private Sub cmd詳細d_Click()

On Error GoTo Err_cmd詳細_Click

  Dim stDocName As String

  stDocName = ChrW(113) & ChrW(114) & ChrW(121) & ChrW(32) & ChrW(12522) & ChrW(12540) & ChrW(12473) & ChrW(20250) & ChrW(31038) & ChrW(12463) & ChrW(12522) & ChrW(12456)
  DoCmd.OpenQuery stDocName, acNormal, acEdit

Exit_cmd リース会社_Click:
  Exit Sub

Err_cmd リース会社_Click:
  MsgBox Err.Description
  Resume Exit_cmd詳細_Click

Private Sub cmdAZ_Click()

    Call setFilter("A-Z")

End Sub

Private Sub cmdあ_Click()

    Call setFilter("ア-オ")

End Sub

Private Sub cmdカ_Click()

    Call setFilter("カ-ゴ")

End Sub

Private Sub cmdサ_Click()

    Call setFilter("サ-ド")

End Sub

Private Sub cmdタ_Click()

    Call setFilter("タ-ド")

End Sub

Private Sub cmdナ_Click()

    Call setFilter("ナ-ノ")
    
End Sub

Private Sub cmdハ_Click()

    Call setFilter("ハ-ボ")
    
End Sub

Private Sub cmdマ_Click()

    Call setFilter("マ-モ")
    
End Sub

Private Sub cmdヤ_Click()

    Call setFilter("ヤ-ヨ")
    
End Sub

Private Sub cmdラ_Click()

    Call setFilter("ラ-ロ")
    
End Sub

Private Sub cmdワ_Click()

    Call setFilter("ワ-ン")
    
End Sub


Private Function setFilter(strItem As String)

  Dim strCrit As String
  Dim StrOrder As String
 
  If Me.フィルタ対象 = 1 Then
    strCrit = "部門名フリガナ like `[" & strItem & "]*`"
    StrOrder = "部門名フリガナ"
   
  Else
    strCrit = "リース会社フリガナ like `[" & strItem & "]*`"
    StrOrder = "リース会社フリガナ"
   
  End If
  
  Me.Filter = strCrit
  Me.OrderBy = StrOrder
  Me.FilterOn = True
  Me.OrderByOn = True

 
End Function

Private Sub cmd詳細_Click()

End Sub

Private Sub 抽出解除_Click()

  Me.Filter = ""
  Me.OrderBy = ""
  Me.FilterOn = False
  Me.OrderByOn = False
  
End Sub


上記のVBAで Me.Filter = strCrit で、実行時エラー3125が発生してしまいます。
初心者で全く分からないので、よければご教授して頂けると嬉しいです。
・ツリー全体表示

【10758】Re:複数条件からのデータ抽出について
回答    - 08/11/19(水) 17:52 -

引用なし
パスワード
   すみません、明日までに整理してご返答いたします。
よろしくお願いいたします。
・ツリー全体表示

【10757】Re:複数条件からのデータ抽出について
発言  Gin_II  - 08/11/19(水) 17:07 -

引用なし
パスワード
   > SELECT * from Sheet1_2クエリ WHERE アルファベット = '3' AND 数値 BETWEEN 0006 AND 0100
> SELECT * from Sheet1_2クエリ WHERE 数値 BETWEEN 0001 AND 0200

・アルファベットの前が、全角スペースになっている。
・コンボボックス:Combo は、複数の列を使っている?
・数値フィールドは、テキスト型?


【10752】Re:複数条件からのデータ抽出について 
で、回答した内容では、半角スペースを使っていますので、何か変更しませんでしたか?

>  Me.RecordSource = strSql & "WHERE " & Mid(strWhere, 5)

ここらへんとか。

あと、次の情報を確認し、教えてください。

(1) 元となっているテーブルの、アルファベット・数値 のフィールド型
(2) コンボボックスの値集合ソース・列数・連結列プロパティの内容

現状のコードでは、

アルファベットフィールド:テキスト型
数値:数値型

として書かれていますが、

Combo 数値?
kazu3 テキスト?
kazu4 テキスト?

で記入されている内容は、逆になっているような気がします。
・ツリー全体表示

【10756】Re:複数条件からのデータ抽出について
回答    - 08/11/19(水) 16:49 -

引用なし
パスワード
   SELECT * from Sheet1_2クエリ WHERE アルファベット = '3' AND 数値 BETWEEN 0006 AND 0100
SELECT * from Sheet1_2クエリ WHERE アルファベット = '3' AND 数値 BETWEEN 0001 AND 0200
SELECT * from Sheet1_2クエリ WHERE アルファベット = '2' AND 数値 BETWEEN 0001 AND 0200
SELECT * from Sheet1_2クエリ WHERE アルファベット = '2' AND 数値 BETWEEN 0001 AND 0200
SELECT * from Sheet1_2クエリ WHERE アルファベット = '2' AND 数値 BETWEEN 0001 AND 0200
SELECT * from Sheet1_2クエリ WHERE 数値 BETWEEN 0001 AND 0200
SELECT * from Sheet1_2クエリ WHERE アルファベット = '2' AND 数値 BETWEEN 0001 AND 0200
SELECT * from Sheet1_2クエリ WHERE アルファベット = '1' AND 数値 BETWEEN 0001 AND 0200
SELECT * from Sheet1_2クエリ WHERE 数値 BETWEEN 0001 AND 0200
SELECT * from Sheet1_2クエリ WHERE 数値 BETWEEN 0001 AND 0080
SELECT * from Sheet1_2クエリ WHERE 数値 BETWEEN 0001 AND 0080

--------------------------------------------------------
↑以上です。
・ツリー全体表示

【10755】Re:複数条件からのデータ抽出について
発言  Gin_II  - 08/11/19(水) 16:42 -

引用なし
パスワード
   >ちなみにコンボボックスに何も入っていないじょうたいで「数値」のみ
>にゅうりょくすると該当の(つまりABCすべての)数値が帰ってきました。

数値・コンボボックスを入力した状態で実行し、

> ・「表示」→「イミディエイトウィンドウ」で、出力されている内容

こちらの内容をアップしてもらってもいいですか?
・ツリー全体表示

【10754】Re:複数条件からのデータ抽出について
質問    - 08/11/19(水) 16:40 -

引用なし
パスワード
   ちなみにコンボボックスに何も入っていないじょうたいで「数値」のみにゅうりょくすると該当の(つまりABCすべての)数値が帰ってきました。
・ツリー全体表示

【10753】Re:複数条件からのデータ抽出について
質問    - 08/11/19(水) 16:35 -

引用なし
パスワード
   エラーはまったくでない代わりに、データが一個も抽出されなくなりました。
・ツリー全体表示

【10752】Re:複数条件からのデータ抽出について
発言  Gin_II  - 08/11/19(水) 16:30 -

引用なし
パスワード
   > Visual Basic Editor についてよくわからないのでそのままコピペしてあげてしまいましたが、お分かりになりますでしょうか...。

現状のコードでも、

> 「コンパイルエラー:End sub,End Function,End Property以降に
> 書き込めるのはコメントのみです」といったエラーが出ます。

になりますか?
とりあえず、以下の状態にばっさりと変更して、

'-----------------------------------------------------
Private Sub cmd1_Click()
'On Error GoTo e
 Dim strSql As String
 Dim strWhere As String

 strSql = "SELECT * from Sheet1_2クエリ "

 If Not IsNull(Me!Combo) Then
  strWhere = strWhere & " AND アルファベット = '" & Me!Combo & "'"
 End If

 If Not IsNull(Me!kazu3) Then
  If Not IsNull(Me!kazu4) Then
    strWhere = strWhere & " AND 数値 BETWEEN " & Me!kazu3 & " AND " & Me!kazu4
  Else
    strWhere = strWhere & " AND 数値 =" & Me!kazu3
  End If
 End If

If Len(strWhere) > 0 Then
 Me.RecordSource = strSql & "WHERE " & Mid(strWhere, 5)
 Debug.Print strSql & "WHERE " & Mid(strWhere, 5)
Else
  Me.RecordSource = strSql
End If

e:
 Exit Sub

End Sub
'-----------------------------------------------------

(1) コンパイルをし、コンパイルエラーが発生しないか?
(2) 実行して、実行時エラーがでないか?

を確認してください。

(1) でエラーが発生するのなら、どの部分で発生したかを。
(2) でエラーが発生したのなら、
 ・どの部分で発生したか
 ・エラーメッセージは何か
 ・「表示」→「イミディエイトウィンドウ」で、出力されている内容

を教えてください。
・ツリー全体表示

【10751】Re:複数条件からのデータ抽出について
質問    - 08/11/19(水) 16:21 -

引用なし
パスワード
   Private Sub cmd1_Click()
On Error GoTo e
 Dim strSql As String
 Dim strWhere As String

 strSql = "SELECT * from Sheet1_2クエリ "

 If Not IsNull(Me!Combo) Then
  strWhere = strWhere & " AND アルファベット = '" & Me!Combo & "'"
 End If

 If Not IsNull(Me!kazu3) Then
  If Not IsNull(Me!kazu4) Then
    strWhere = strWhere & " AND 数値 BETWEEN " & Me!kazu3 & " AND " & Me!kazu4
  Else
    strWhere = strWhere & " AND 数値 =" & Me!kazu3
  End If
 End If

 If Len(strWhere) > 0 Then
  Me.RecordSource = stSQL & "WHERE " & Mid(strWhere, 5)
 Else
  Me.RecordSource = stSQL
 End If

If Len(strWhere) > 0 Then
 Me.RecordSource = stSQL & "WHERE " & Mid(strWhere, 5)
Debug.Print stSQL & "WHERE " & Mid(strWhere, 5)
Else
  Me.RecordSource = stSQL
End If


stSQL = stSQL & stList
Me.RecordSource = stSQL
e:
Exit Sub
End Sub

-----------------------------------------------------
今はこのような状態です。
Visual Basic Editor についてよくわからないのでそのままコピペしてあげてしまいましたが、お分かりになりますでしょうか...。
・ツリー全体表示

【10750】Re:複数条件からのデータ抽出について
回答  Gin_II  - 08/11/19(水) 15:57 -

引用なし
パスワード
   > それは無論消していません。

では、

> Private Sub cmd1_Click()

> End Sub

この間に、すべてコードが入っているということでいいですか?
となると、

> 「コンパイルエラー:End sub,End Function,End Property以降に
> 書き込めるのはコメントのみです」といったエラーが出ます。

このエラーがよく分からないですね。
とりあえず、Visual Basic Editor の画面で、

Ctrl+A 'すべて選択
Ctrl+C 'コピー

で、こちらにコードのすべてをアップできますか?

あと、
> If Len(strWhere) > 0 Then
>   Me.RecordSource = stSql & "WHERE " & Mid(strWhere, 5)
Debug.Print stSql & "WHERE " & Mid(strWhere, 5)
> Else
>   Me.RecordSource = stSql
> End If

のようにしても、同様にエラーになりますか?
・ツリー全体表示

【10749】Re:複数条件からのデータ抽出について
質問    - 08/11/19(水) 15:42 -

引用なし
パスワード
   それは無論消していません。
・ツリー全体表示

【10748】Re:複数条件からのデータ抽出について
回答  Gin_II  - 08/11/19(水) 15:27 -

引用なし
パスワード
   > 「コンパイルエラー:End sub,End Function,End Property以降に
> 書き込めるのはコメントのみです」といったエラーが出ます。

私が回答したものは、

> Private Sub cmd1_Click()
> End Sub

を省略していますが、消していいものではないですよ。
・ツリー全体表示

【10747】Re:複数条件からのデータ抽出について
質問    - 08/11/19(水) 15:23 -

引用なし
パスワード
   書き直し以前は数値だけ抽出されていたのですが、書き直し以降、まったく動かなくなってしまいました。
Debug.Print Me.RecordSource
を追加記述してもそのもの自体がエラーに引っかかるらしく、「コンパイルエラー:End sub,End Function,End Property以降に書き込めるのはコメントのみです」といったエラーが出ます。
・ツリー全体表示

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