Access VBA質問箱 IV

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

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


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

【3268】Re:エクセルインポートの方法
発言  こもれび  - 04/8/19(木) 9:13 -

引用なし
パスワード
   こもれびです

わからない点がありますので、教えてください。
Excel側ではデータ行の行数によって、データ行下の文章はデータとの間を
移動するような全体のフォーマットなのでしょうか?
(データ行が50行であれば、文章はExcel行番号の65からスタートし、
 データ行が100行であれば、文章はExcel行番号の115からスタートする
 というイメージ)
それとも下の文章のスタート行は固定で、例えば115から動かないと考えれば
よいのでしょうか?

それと、気になるのが「選択範囲の制御」と書かれたところです。
これはAccessでExcelをオブジェクトとしてデータのある部分を
名前定義して、データインポートを自動化するということなのでしょうか?

最初に本文を読ませていただいたときは、見込まれる最大のデータ行を
名前定義してインポートして、SQLでデータの有る行を取り込めばよい
と考えていたのですが、どうもDONTAさんのお考えのものはそんな単純な?
ものではなさそうな気がしてきました。
・ツリー全体表示

【3267】ありがとうございます。
お礼  AI  - 04/8/19(木) 8:13 -

引用なし
パスワード
   こもれびさんありがとうございました。
夏休みで実家に帰省していました。早速試してみます。お礼が遅くなりすみませんでした。
・ツリー全体表示

【3266】Re:文字の形態別に全半角の変換を変える
発言  こもれび  - 04/8/18(水) 23:49 -

引用なし
パスワード
   いろいろ原因を考えておりますが…

もしかすると、この投稿にソースをコピペしたときに1行あたりの文字数制限で
強制的に或る行が改行されてしまい、「迷子」の行が出来てしまった可能性が
あります。

中身を変えず、1行あたりの文字数を短くしたソースを掲載しますので
差し替えてみてください。

Public Function KonzaiConv(KonzaiStr) As String

  Dim i As Integer
  Dim j As Integer
  Dim k As Integer
  Dim l As Integer
  Dim OutStr(1, 49) As String
  Dim h1 As String
  Dim HenkanData As String
  
  HenkanData = KonzaiStr
  HenkanData = Trim(HenkanData)
  i = Len(HenkanData)
  j = 1
  Do Until j > i
  h1 = Mid(HenkanData, j, 1)
  If Val("&H" & Hex(AscB(MidB(h1, 2, 1))) & _
  Hex(AscB(MidB(h1, 1, 1))) & "&") > Val(&H7F&) Then
   If Val("&H" & Hex(AscB(MidB(h1, 2, 1))) & _
   Hex(AscB(MidB(h1, 1, 1))) & "&") > Val(&H30F6&) Then
    If Val("&H" & Hex(AscB(MidB(h1, 2, 1))) & _
    Hex(AscB(MidB(h1, 1, 1))) & "&") > Val(&HFF5A&) Then
     If i > j Then
      If Asc(Mid(HenkanData, j + 1, 1)) = _
      Val(&HDE&) Or Asc(Mid(HenkanData, j + 1, 1)) = _
      Val(&HDF&) Then
       j = j + 1
       h1 = h1 & Mid(HenkanData, j, 1)
      End If
     End If
     h1 = StrConv(h1, vbWide)
     OutStr(1, k) = h1 ' 半角カタカナ
    Else
     h1 = StrConv(h1, vbNarrow)
     OutStr(1, k) = h1 ' 2byte alpha
    End If
   Else
     OutStr(0, k) = h1 ' ひらがな,カタカナ(全角)
   End If
  Else
   OutStr(0, k) = h1 ' 1byte ASCII
  End If
  j = j + 1: k = k + 1
  Loop
  For l = 0 To k
   KonzaiConv = KonzaiConv & OutStr(0, l)
   KonzaiConv = KonzaiConv & OutStr(1, l)
  Next

End Function
・ツリー全体表示

【3265】Re:コンボボックスのリスト
発言  こもれび  - 04/8/18(水) 22:40 -

引用なし
パスワード
   こもれびです

横レスごめんなさい。

イメージは次のような感じですか?

次のA、Bの内から一つを選び入力する
A:野菜
B:果物

Aが入力されたら次をコンボボックスにリストアップ
 じゃがいも
 ぴーまん
 きゅうり
 とまと
 きゃべつ
Bが入力されたら次をコンボボックスにリストアップ
 すいか
 グレープフルーツ
 りんご
 なし
 ぶどう

saikoroさんの本文からですと、AとBが同じレコードセット
若しくはテーブルなのか違うレコードセット若しくはテーブルなのか
そのあたりが読めないです。

いずれにしても選ばれたデータを元に「Select case文」で分岐して
それぞれ用のレコードセットをSQLでつくり、コンボボックスの
ソースとしてしまわれてはいかがでしょうか。
・ツリー全体表示

【3264】Re:文字の形態別に全半角の変換を変える
回答  こもれび  - 04/8/18(水) 22:20 -

引用なし
パスワード
   こもれびです こんばんは

>Public Function KonzaiConv(KonzaiStr) As String
>のソースをコピーして、
>
>コマンドボタンを押した時に下記が実行されるようにしましたが、

ひょっとして標準モジュールにコピペしたソースの変数を変更
されていませんか?
例えば、冒頭の「Public Function... (KonzaiStr) As... 」を
「Public Function...(Me!Client?name1.value) As...」に変えたとか。

あと、考えられるのは Public FunctionをPublic Subに変えて、
As以降を取っちゃったとか…

サンプルと書きましたが、標準モジュールには全くそのまま
コピペすればよいように作ったのですが…
よく関数でつまづくのは受け渡しのところです。
Function関数の括弧の中に書かれる変数は関数内で使用される
変数です。これを変更してしまうと関数は受け付けてくれなくなってしまいます。
・ツリー全体表示

【3263】Re:コンボボックスのリスト
質問  saikoro  - 04/8/18(水) 20:45 -

引用なし
パスワード
   phoo 様:
レスして頂きありがとうございます。
聞いて貰えるとうれしいですm(_ _)m。

>まとを外していたらゴメンナサイ。
>
>クエリ1のb とクエリ2のbをコンボボックスに表示させるには、
>集合値ソースに、
>SELECT [クエリ1].[b], [クエリ2].[b] FROM クエリ1, クエリ2;
>とすればいいかと思います。

申し訳ございません。自分の質問が悪すぎですね。。
えーと、上記だと、コンボボックスに、クエリ1とクエリ2の両方が
一度に表示されてしまう?ような感じです。

やりたい事として、
他のテキストボックスなどで1か2を決定して、その値を見て
1だったらコンボボックスリストにクエリ1を表示させ、
2だったらコンボボックスリストにクエリ2を表示させたいのです。
(同じコンボボックスにて)
このような事をしようとするとどのような処理にすればよろしいのでしょうか?
もうしわけありません。
・ツリー全体表示

【3262】Re:文字の形態別に全半角の変換を変える
質問  べる  - 04/8/18(水) 17:57 -

引用なし
パスワード
   ▼こもれび さん:

サンプルソースありがとうございました。
ご指示通り、標準モジュールに

Public Function KonzaiConv(KonzaiStr) As String
のソースをコピーして、

コマンドボタンを押した時に下記が実行されるようにしましたが、

Me!Client_name1.Value = KonzaiConv(Me!Client_name1.Value)

”KonzaiConv”に対して

「コンパイルエラー:
 モジュールではなく、変数またはプロシージャを指定してください。」

とのメッセージが出てしまいますが、
原因はわかりますでしょうか?
ご教授の程、よろしくお願いいたします。
・ツリー全体表示

【3261】Re:コンボボックスのリスト
回答  phoo  - 04/8/18(水) 17:06 -

引用なし
パスワード
   まとを外していたらゴメンナサイ。

クエリ1のb とクエリ2のbをコンボボックスに表示させるには、
集合値ソースに、
SELECT [クエリ1].[b], [クエリ2].[b] FROM クエリ1, クエリ2;
とすればいいかと思います。
・ツリー全体表示

【3260】コンボボックスのリスト
質問  saikoro  - 04/8/18(水) 16:54 -

引用なし
パスワード
   コンボボックスのリストにクエリで作った内容を表示させようと思うのですが、
1つのクエリの場合は、プロパティで値集合ソースにそのクエリを書きますが、
その際に、2つクエリを用いて使い分けるといった事は、できるのでしょうか?

他のテキストボックスの内容を見て、コンボボックスに二つのクエリを使い分ける
と、いったことをやろうとおもうのですが。その処理は、どこに書けばよろしいのでしょうか?

初めての質問でわかりにくい文章かと思いますが、よろしくおねがいします。
・ツリー全体表示

【3259】Re:文字の形態別に全半角の変換を変える
回答  こもれび  - 04/8/18(水) 16:07 -

引用なし
パスワード
   こもれびです 

おまたせしました。
サンプルソースができましたので、お試しください。
スペースですが、文字列中のスペースを前後の文字種によって変換することは
やってできないことは無いのですが、今以上に複雑になりそうです。
作製した混在変換関数では半角スペースは半角スペース、全角スペースは
全角スペースで出力します。
こちらでの試験では、ランダムに混在している文字列が規則にのっとって
変換されて戻り値として返ってきました。

関数中の文字列保存用配列の大きさは50文字(0〜49)としています。
大きさが足りないときは、「OutStr」変数の配列上限の49という数字を
適宜変更してください。

下記リストの作製したサンプルは、フォームに設けた「txtstr」という名前の
テキストボックスに入力された文字列を、「CmdKonzai」という名前の
コマンドボタンをクリックした時のイベントプロシージャで標準モジュールの「KonzaiConv」関数を呼び、関数の戻り値(変換した文字列)を「TxtAns」という名前のテキストボックスに入れています。

Private Sub CmdKonzai_Click()
  Me!TxtAns.Value = KonzaiConv(Me!txtstr.Value)
End Sub


標準モジュールに次のFunctionモジュールを作成してください。

Public Function KonzaiConv(KonzaiStr) As String
  Dim i As Integer
  Dim j As Integer
  Dim k As Integer
  Dim l As Integer
  Dim OutStr(1, 49) As String
  Dim h1 As String
  Dim HenkanData As String
  
  HenkanData = KonzaiStr
  HenkanData = Trim(HenkanData)
  i = Len(HenkanData)
  j = 1
  Do Until j > i
  h1 = Mid(HenkanData, j, 1)
  If Val("&H" & Hex(AscB(MidB(h1, 2, 1))) & Hex(AscB(MidB(h1, 1, 1))) & "&") > Val(&H7F&) Then
   If Val("&H" & Hex(AscB(MidB(h1, 2, 1))) & Hex(AscB(MidB(h1, 1, 1))) & "&") > Val(&H30F6&) Then
    If Val("&H" & Hex(AscB(MidB(h1, 2, 1))) & Hex(AscB(MidB(h1, 1, 1))) & "&") > Val(&HFF5A&) Then
     If i > j Then
      If Asc(Mid(HenkanData, j + 1, 1)) = Val(&HDE&) Or Asc(Mid(HenkanData, j + 1, 1)) = Val(&HDF&) Then
       j = j + 1
       h1 = h1 & Mid(HenkanData, j, 1)
      End If
     End If
     h1 = StrConv(h1, vbWide)
     OutStr(1, k) = h1 ' 半角カタカナ
    Else
     h1 = StrConv(h1, vbNarrow)
     OutStr(1, k) = h1 ' 2byte alpha
    End If
   Else
     OutStr(0, k) = h1 ' ひらがな,カタカナ(全角)
   End If
  Else
   OutStr(0, k) = h1 ' 1byte ASCII
  End If
  j = j + 1: k = k + 1
  Loop
  For l = 0 To k
   KonzaiConv = KonzaiConv & OutStr(0, l)
   KonzaiConv = KonzaiConv & OutStr(1, l)
  Next

End Function
・ツリー全体表示

【3258】Re:エクセルインポートの方法
発言  DONTA  - 04/8/18(水) 11:03 -

引用なし
パスワード
   こもれびさん、ありがとうございます。

早速ですが、もう少し詳しい内容です。
Sheetは複数ある中のひとつが対象で、選択範囲を行いたいデータ行が50行になるのか100行になるのか未定です。

データ行の上下には文章(データではない)があります。
選択範囲の制御はできるのでしょうか?
・ツリー全体表示

【3257】Re:フォームを閉じるとデータ競合のエラー
お礼  ことら  - 04/8/18(水) 9:49 -

引用なし
パスワード
   なるほど。わかりました。
ご教授ありかどうございました。
・ツリー全体表示

【3256】Re:エクセルインポートの方法
発言  こもれび  - 04/8/17(火) 21:57 -

引用なし
パスワード
   こもれびです はじめまして。

>Excle側で[挿入]-[名前]-[定義]で、取り込めることはできるのですが、
>Excleのデータが可変(行数が可変)の場合、VBAで制御できるのでしょうか?

何らかの条件に当てはまる範囲に名前を付与されているのではないかと
思うのですが、Sheet単位でインポートしてSQLでデータを抜き出す
という手法は使えないでしょうか?

○ インポートしにくいExcelのSheetの例
  月毎の集計表を一つのSheetで作っている(4月は A列からE列、5月はG列からK列)

このような場合は、インポートする前にExcel側でSheetを分けたほうがよいと思います。

「データ(行)が可変になる」内容をもう少し詳しく教えていただけないでしょうか。
・ツリー全体表示

【3255】メインフォームとサブフォームの関連につ...
質問  KKK E-MAIL  - 04/8/17(火) 21:39 -

引用なし
パスワード
   OS:2000
Access Version:2000

<やりたいこと>
メインフォームの顧客情報にもとづいてサブフォーム(2フォームあり)
の顧客対応履歴にデータを案件対応日付ごとに入力していきたい。
対応する際にその履歴を参照し、新たに入力していく形をとりたい。
※一つのフォームの上でサブフォームをタブコントロールで2フォーム表示させ

それぞれの(サブの)履歴を見れるようにまた新規入力できるようにしたい。

<現状>
サブフォームは単票形式で、タブコントロールの上に貼り付けしてあり、
それぞれの元のレコード(メイン・サブ共に)には顧客IDがあり、
リレーションシップでつなげています。
データを入力したとこ
ろ、サブフォームに入力したデータがレコードを移動する

サブフォーム上から消えてしまい、もとのテーブルを見るとデータは蓄積されて
います。
入力したデータ(履歴)を前後レコードを移動しながら見れるようにするには
どうしたらよいでしょうか?
・ツリー全体表示

【3254】Re:フォームを閉じるとデータ競合のエラー
回答  よろずや  - 04/8/17(火) 19:59 -

引用なし
パスワード
   連結フォームは、黙っていてもレコードの保存が出来ます。
(保存するタイミングの制御がチョットあれですが)
ですから、コードで保存すると処理がダブってしまいます。
・ツリー全体表示

【3253】フォームを閉じるとデータ競合のエラー
質問  ことら  - 04/8/17(火) 17:42 -

引用なし
パスワード
   こんにちは。以下の件、どなたかご教授頂ければ幸いです。
レコードを修正した後にフォームに設けた「閉じるボタン」をクリックすると
「データの競合」というダイアログが出ます。
内容は、「このレコードは他のユーザーによって変更されています。
レコードの保存を選択すると、他のユーザーによる変更を無視し、自分が行
った変更を反映します。」というメッセージです。
ちなみにここで「レコードの保存」を選択すれば特に問題なく終了されますが
何か気になります。
アクセスのバージョンは、2002、OSはWindowsXPです。
記述したコードは、以下の通りです。cmd修正クリックとcmd閉じるクリック
の2つを以下に記載させて頂きます。宜しくお願い致します。

Private Sub cmd修正_Click()

Dim cn As New ADODB.Connection
Dim Rst As New ADODB.Recordset

Set cn = CurrentProject.Connection

Rst.Open "T_PC", cn, adOpenKeyset, adLockOptimistic

Rst.Find "連番 = '" & Me.連番 & "'"
 
    Rst!連番 = Me.連番
    Rst!商品 = Me.商品
     
  Rst.Update
         
  Rst.Close: Set Rst = Nothing
  cn.Close: Set cn = Nothing
     
End Sub


Private Sub 閉じる_Click()

  DoCmd.Close , , acSaveYes
  
End Sub
・ツリー全体表示

【3252】Re:文字の形態別に全半角の変換を変える
質問  べる  - 04/8/17(火) 17:36 -

引用なし
パスワード
   ▼こもれび さん:
>こもれびです
>
>ひとつ教えてください。
>「スペース」(半角:0x20,全角:0x8140)はどちらに統一したらよいのでしょうか?

レス、ありがとうございます。
確かにスペースも含まれている可能性がありました。
希望としましては、
英字 → 半角スペース
カナ → 全角スペース
としたいのですが、可能なのでしょうか?
よろしくお願いいたします。
・ツリー全体表示

【3251】エクセルインポートの方法
質問  DONTA  - 04/8/17(火) 17:22 -

引用なし
パスワード
   初めて質問させていただきます。

Accessを使用してExcelのデータをインポートする処理を作成しています。
Excle側で[挿入]-[名前]-[定義]で、取り込めることはできるのですが、
Excleのデータが可変(行数が可変)の場合、VBAで制御できるのでしょうか?

よろしくお願いいたします。
・ツリー全体表示

【3250】Re:レコードが重複して登録されてしまう。
お礼  ことら  - 04/8/17(火) 17:22 -

引用なし
パスワード
   皆様のお蔭様で解決致しました。
ありがとうございました。
・ツリー全体表示

【3249】Re:文字の形態別に全半角の変換を変える
発言  こもれび  - 04/8/17(火) 15:49 -

引用なし
パスワード
   こもれびです

ひとつ教えてください。
「スペース」(半角:0x20,全角:0x8140)はどちらに統一したらよいのでしょうか?
・ツリー全体表示

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