アプリ版:「スタンプのみでお礼する」機能のリリースについて

アクセスでテーブル内の全セルに入っている改行コードを削除したいのですが、ネット上を検索しても中々解決に至らないので質問させてください。

例えば【http://q.hatena.ne.jp/1156520575】の様なスクリプトは様々な物が検索にヒットするのですが、このコードをVBエディターの標準モジュールに入力した後、どのように実行すればいいのでしょうか。
エクセルであれば分かるのですがアクセスは初めてまだ1ヶ月足らずのため、なかなか理解できません。

クエリを使う方法【http://www.accessclub.jp/bbs3/0038/superbeg15657 …】も参考にしたのですが、この方法は対象とするフィールドが少なければ実効に成功しましたが、私の扱っているテーブル(40以上のフィールドが存在し2万行近いデータがある)では検索結果に何もヒットせず実行できませんでした。

この他にもいろいろな方法を検索し検証してみましたが、やはり解決には至りませんでした。

上記の方法の補足をお願いしたいのですが、他によい方法があれば教えて頂きたいです。

理想はテキストエディタの様に置換で解決できれば簡単で良いのですが^^;どうも無理のようです・・・

環境は
ACCESSバージョン:ACCESS 2002(10.2627.2625)
Windowsバージョン:WindowsXP Proffessional Version2002 Service Pack 2

よろしくお願いいたします。

A 回答 (4件)

ADO,DAO を全く知らなければ、No1さんの回答では辛いでしょうから


比較的、簡単な方法で。
(1)フォーム、新規作成で、元になるテーブルを選択し
  オートフォーム:表形式でフォームを作成します。
  使い捨てですから、デザインは気にせずに。
(2)デザインビューにして
  フォームフッターまたはフォームヘッダーに
  ラベルを追加(コマンドボタンのように使いますが、
  (フォーカスの関係でラベルにするのがポイントです。)
  表示する文字は何でも良い。
(3)ラベルのクリック時のイベントプロシージャに
-------------------------------------------------------------
Private Sub ラベル1_Click()
  Dim fld As String
  Dim pos As Long

  Do While True
    DoCmd.FindRecord Chr(13) & Chr(10), acAnywhere, False, , False, acAll, False
    If Me.ActiveControl.Name = fld And Me.Recordset.AbsolutePosition = pos Then
      Exit Do
    Else
      Me.ActiveControl = Replace(Me.ActiveControl, vbNewLine, "")
      fld = Me.ActiveControl.Name
      pos = Me.Recordset.AbsolutePosition
    End If
  Loop
  MsgBox "終了しました"
End Sub
--------------------------------------------------------------
  のように。
  Private Sub ラベル1_Click()
  の「ラベル1」の部分は実際のラベルの名前で。
(4)一応、保存してから、フォームを開き、
  1行目の左端のフィールドにカーソルがある状態で
  ラベルをクリック。
  クリックしても、ボタンと違って見た目は無反応ですが
  正常にできれば、終了メッセージが表示されます。
    • good
    • 0

あーすいませんbugありました。

・・英語でテストしてたもので
日本語にすると文字化けします。

ac = Asc(Mid(st, i, 1))の部分を
ac = AscW(Mid(st, i, 1)) に変更してください。

どうぞ宜しく!!
    • good
    • 0

一例ですが変換関数を書いてみました参考にどうぞ。




Public Function mozihennkann(mozi As String) As String

'Sub test()
Dim st As String
Dim ac As String
Dim bc As String
Dim i As Integer

For i = 1 To 1000

st = CStr(mozi)

ac = Asc(Mid(st, i, 1))

If ac = (ac = 13) Or (ac = 10) Then

Else

bc = bc & ChrW(ac)
End If

On Error GoTo kill:
'Debug.Print ac

Next i

kill:
'Debug.Print "結果" & bc
mozihennkann = bc

End Function
    • good
    • 0

SQLを使うとか高等な方法でなく、一番小回りが効く、ADOに戻って考えれば、なんと言うこともない問題では無いでしょうか。


アクセスのモジュールに
Sub ADO001()

Dim cn As ADODB.Connection
Set cn = CurrentProject.Connection

MsgBox cn.Version
strPass = CurrentProject.Path
strname = CurrentProject.Name

MsgBox strPass & "\" & strname
Set rs = New ADODB.Recordset

rs.Open "社員2", cn
fn = rs.Fields.Count

Do Until rs.EOF
  ' MsgBox rs!氏名 & "-" & rs!住所 & "-" & rs!電話番号
For i = 0 To fn - 1
MsgBox Nz(rs.Fields(i))

Next
rs.MoveNext
Loop

rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub
を張り付け
例データ テーブル名 社員2
ID氏名住所電話番号重複
1山田 三郎東京都大田区03-2345-6543a
2大島 義男東京都品川区042-2345-2345
3下田 茂仙台市青葉区0720-34-3456a
4小出 健二名古屋市緑区042-345-2345
5中田 卓福岡市北区07523-23456a
に対し実行すると、全てフィールド(フィールド数は上記例にある)はを捉えられました。
後は、Mgboxの行に
各フィールドで、削除のためのReplceを行い、Edit、Updateでレコードを更新すれば良いのでは。処理時間はかかるかも知れないが。
ーー
ADOが初耳なら
http://www.accessclub.jp/ado/
など読んでください。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A