Access VBA質問箱 IV

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

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


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

【11991】Re:配列を利用したテーブルのインポート...
回答  hatena E-MAIL  - 11/5/17(火) 18:05 -

引用なし
パスワード
   >  'インポートするとデータが重複するので最初にテーブルのデータを削除
>  For Tcount = LBound(TName) To UBound(TName)
>    DoCmd.RunSQL "DELETE * FROM TName(Tcount)"

TName(Tcount) は、"" の外に出さないと、「TName(Tcount)」という単なる
文字列になり、そのようなテーブルはないのでエラーになります。

   DoCmd.RunSQL "DELETE * FROM " & TName(Tcount)
・ツリー全体表示

【11990】配列を利用したテーブルのインポートにつ...
質問  アクセスVBA初心者  - 11/5/17(火) 7:35 -

引用なし
パスワード
    初めまして今までエクセルを使っていて最近アクセスを使い始めた者なので
すが、質問がありまして投稿させていただきました。既出でしたら申し訳あり
ませんがご容赦ください。

 エクセルのシートをアクセスへインポートするマクロを以下のように作り
ました。
 ※アクセスのテーブルの名前とエクセルのシート名は同じです。後、実際は
もう少しテーブルが多いです。
 ですが、初めのFROM句のところでエラーがでます。また、このようなマ
クロでなく、ADOで書かないと現在開いているデータベース以外にもテーブ
ルを検索して処理を実行してしまうものなのでしょうか。

 ネットなどを調べても、うまくいきません。初歩的な質問ですみませんがも
し、ご存知の方がいらっしゃいまたら、お教え願えませんでしょうか。


Option Compare Database

Function mac()
On Error GoTo mac_Err

  Dim Tcount As Integer
  Dim TName As Variant

  TName = Array("T_01", "T_02", "T_03", "T_04", "T_05")


  'インポートするとデータが重複するので最初にテーブルのデータを削除
  For Tcount = LBound(TName) To UBound(TName)
    DoCmd.RunSQL "DELETE * FROM TName(Tcount)"
  Next


  'エクセルのシート(テーブルと同じ名前)をインポート
  For Tcount = LBound(TName) To UBound(TName)
      DoCmd.TransferSpreadsheet acImport, 8, TName(Tcount), "C:\AS.xls", True, TName(Tcount)
  Next


mac_Exit:
  Exit Function


mac_Err:
  MsgBox Error$
Resume mac_Exit


End Function
・ツリー全体表示

【11989】Re:文字列からHTMLタグを含んだ文字列を...
お礼  SIZU E-MAIL  - 11/5/8(日) 19:04 -

引用なし
パスワード
   ▼よろずや さん:
>Function make_htmltug(Str As String) As String
>  make_htmltug = "<table><tr><td>" & Replace(Str, ",", "</td></tr><tr><td>") & "</td></tr></table>"
>End Function
>
>配列を使いたかったのかな?

いえいえ 無理に配列は不要でした。
こんな方法もあったんですね。
vbaとかperlとかの前に 「目うろこ」 です。(@o@)

これから試してみますが、多分OKかと。
ありがとうございました。m(__)m
・ツリー全体表示

【11988】Re:文字列からHTMLタグを含んだ文字列を...
回答  よろずや  - 11/5/8(日) 17:02 -

引用なし
パスワード
   Function make_htmltug(Str As String) As String
  make_htmltug = "<table><tr><td>" & Replace(Str, ",", "</td></tr><tr><td>") & "</td></tr></table>"
End Function

配列を使いたかったのかな?
・ツリー全体表示

【11987】文字列からHTMLタグを含んだ文字列を生成
質問  SIZU E-MAIL  - 11/5/8(日) 11:02 -

引用なし
パスワード
   区切り記号含みの文字列からHTMLタグを含んだ文字列を生成しようと思っています。
1)文字列を配列化ー>2)HTMLタグを挿入していく
下記のようにPERLで組んだのですが、VBAに組みなおしたいのですが、VBAは初心者でよくわかりません。
お願いいたします。
sub make_htmltug($){
 my ($val)=@_;#区切り記号を含んだ文字列
 my $marker=",";#区切り記号
 my @array=split(/$marker/,$val);
 #データがない場合=0 データがあるがmarkerがない=1
 if(@array <= 1){ return $val; }
 my $totable="<table><tr><td>";
 my $count=1;
 foreach(@array){
  $totable .= $_;
  if($count == @array){
   $totable .= "</td></tr></table>";
  }else{
   $totable.= "</td></tr><td>";
  }
  $count++;
 }
 return $totable;
}
・ツリー全体表示

【11986】Re:インポート後の日付変換
お礼  濱口章徳  - 11/5/8(日) 0:01 -

引用なし
パスワード
   ▼よろずや さん:
Resが遅くなってしまい申し訳ありません。
式1: CDate(Format([日付2],"\h@@\/@@\/@@")) をクエリの
フォームに記入し実行したら、2700すべてのレコードがきれいにyyyy/yy/yyの
カレンダーデータに変換されました。
これで、あとは、自由に抽出できそうです。
この度は、誠にありがとうございました。
感謝のことばもありません。質問がクリア出来ました。
Resをくださったそれぞれの方々に、大変感謝しております。
ちぐはぐな質問のしかたと、Resがいつも2日後だったりと、反省しておりますが、初めての質問でしたが、それ以前にもっと、Accessを勉強しようと思いました。問題は、おかげさまでクリアできました。
ありがとうございました。
・ツリー全体表示

【11985】Re:インポート後の日付変換
発言  濱口章徳 E-MAIL  - 11/5/6(金) 0:26 -

引用なし
パスワード
   このたびは、ちぐはぐな書き込みをしたりマルチポストで質問したりと
、よろずやさんに、不愉快な思いをさせて申し訳ありませんでした。

もう少し、マナーをわきまえて質問出来るように改めます。
お許しください。
・ツリー全体表示

【11984】Re:インポート後の日付変換
お礼  濱口章徳 E-MAIL  - 11/5/2(月) 23:54 -

引用なし
パスワード
   Resをさっそくありがとうございます。
せっかく式をおしえてくださったのに、
いろいろみてみましたが、テーブルのプロパティシートに打ち込めばよいのでしょうか?
帰宅したのが、23時過ぎで返信おそくなってすみません。
こちらのサイトにファイルそのものを投稿しようとしましたが、アップロードが出来ません。よろずやさん。メールをいただけませんか?添付でおくらせていただきますので、みていただきたいのですが。たいそうなお願いを簡単に申し上げてスミマセン。気が向いたら、よろしくお願いします。
私のメールアドレスは、
crystalartsalpha@gmail.com
です。
よろしくお願いします。


▼よろずや さん:
>マルチポストですか...
・ツリー全体表示

【11983】Re:インポート後の日付変換
発言  よろずや  - 11/5/2(月) 15:20 -

引用なし
パスワード
   マルチポストですか...
・ツリー全体表示

【11982】Re:インポート後の日付変換
回答  よろずや  - 11/5/2(月) 14:53 -

引用なし
パスワード
   ▼濱口章徳 さん:
>隣りに新たにフィールドを挿入して式ビルダを使えばできますか?その際の式はどのようなものでしょうか?

こんな感じですかね。
式1: CDate("H" & Mid([テーブル1].[日付],2,2) & "/" & Mid([テーブル1].[日付],5,2) & "/" & Mid([テーブル1].[日付],8,2))
・ツリー全体表示

【11981】インポート後の日付変換
質問  濱口章徳 E-MAIL  - 11/5/2(月) 12:02 -

引用なし
パスワード
   Access初心者です。よろしくおねがいします。受注管理で商奉行を使ってます。
データをCSVで書き出してAccessのテーブルにインポート出来ました。
なんとか使えそうです。
ただひとつ壁が。商奉行で受注日付けが 23年 4月 25日 の形式で入力されており、
インポート後のAccessテーブルフィールドには、「□23□□4□25」の型式テキスト型で
読み込まれております。
(□はスペース)これをyyyy/yy/yyの日付けの型式に一括変換させたいのですが、
隣りに新たにフィールドを挿入して式ビルダを使えばできますか?その際の式はどのようなものでしょうか?
マクロやVBAになれば、知識が全くなくお手上げです。

この日付けの変換問題さえクリアできたら、あとは、購入履歴を抽出して、DM、TELマーケティングフォローに
活用しようとかんがえてます。

どうぞ、お知恵を貸して下さい。
・ツリー全体表示

【11980】Re:複数サブフォームのエクスポート
回答  小僧  - 11/4/27(水) 11:11 -

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

> 2回目以降は、フィールド名だけで、データを持ってきません。。。
> フォームは開いたままの状態です。

こちらでも同じ事象が発生しました。
CopyFromRecordset する前に Recordset を
先頭に持ってくる処理を入れてあげた方が良さそうですね。

rst.MoveFirst
.Range("A2").CopyFromRecordset Data:=rstt


> 記述方法で、改善したほうがいいところなどありましたら

C:\data\test.xls は必ずシートが2枚以上ありますでしょうか。
また、シート名は Sheet1、Sheet2 固定なのでしょうか。

上記の様な箇所がはっきりしないと何とも言えませんが
もうちょっとすっきりしたコードにできるかもしれません。

  For i = 1 To 2
    Select Case i
      Case 1
        Set rst = Me![SubA].Form.RecordsetClone
      Case 2
        Set rst = Me![SubB].Form.RecordsetClone
    End Select
    
    rst.MoveFirst
    With wkb.Worksheets(i)
    '既存データ消去
      .Range("A1").CurrentRegion.ClearContents
    '項目名 & データセット
      For cnt = 1 To rst.Fields.Count
        .Cells(1, cnt).Value = rst.Fields(cnt - 1).Name
      Next
      .Range("A2").CopyFromRecordset Data:=rst
    End With
  Next i
・ツリー全体表示

【11979】Re:複数サブフォームのエクスポート
発言  てん  - 11/4/21(木) 16:07 -

引用なし
パスワード
   前進しました。
ただ、フォームにあるボタンで実行すると、1回目はちゃんとデータが貼りついてきますが、
2回目以降は、フィールド名だけで、データを持ってきません。。。
フォームは開いたままの状態です。

なぜでしょうか。
また、記述方法で、改善したほうがいいところなどありましたら、教えてください。
よろしくお願いします。

Dim xls As Excel.Application
Dim wkb As Excel.Workbook
Dim ws As Excel.Worksheet
Dim rst As DAO.Recordset
Dim cnt As Long
Dim i As Integer
  

Set xls = CreateObject("Excel.Application")
Set wkb = xls.Workbooks.Open("C:\data\test.xls")
        
For i = 1 To 2
Set ws = wkb.Worksheets(i)
    
  Select Case ws.Name
  Case "Sheet1"
    Set rst = Me![SubA].Form.RecordsetClone
  Case "Sheet2"
    Set rst = Me![SubB].Form.RecordsetClone
  End Select
  
  With wkb.Worksheets("Sheet" & i)
    '既存データ消去
    .Range("A1").CurrentRegion.ClearContents
    '項目名 & データセット
    For cnt = 1 To rst.Fields.Count
      .Cells(1, cnt).Value = rst.Fields(cnt - 1).Name
    Next
    .Range("A2").CopyFromRecordset Data:=rst
  End With
  
  Next i
  
  'Excel画面を表示
  xls.Visible = True
  '保存
  wkb.Save
  
  Set wkb = Nothing: Set xls = Nothing
  Set rst = Nothing
・ツリー全体表示

【11978】複数サブフォームのエクスポート
質問  てん  - 11/4/20(水) 18:27 -

引用なし
パスワード
   すみません
どなたか、教えてください。

フォームにサブフォームを設置して それをEXCELにエクスポートする
というところまで出来たのですが、
フォームの中に、サブフォームが複数あって、エクスポート先のExcelのシート分けたい場合 どのような記述をすればいいのでしょうか。

一つ設置した場合はこちらで動かしています↓
  Dim xls As Excel.Application
  Dim wkb As Excel.Workbook
  Dim rst As DAO.Recordset
  Dim cnt As Long
  
  Set rst = Me!SubF.Form.RecordsetClone
  Set xls = CreateObject("Excel.Application")
  Set wkb = xls.Workbooks.Open("C:\data\test.xls")
  
  With wkb.Worksheets("Sheet1")
    .Range("A1").CurrentRegion.ClearContents
    For cnt = 1 To rst.Fields.Count
    .Cells(1, cnt).Value = rst.Fields(cnt - 1).Name
    Next
    .Range("A2").CopyFromRecordset Data:=rst
    
  End With
・ツリー全体表示

【11977】Re:access2007 ドット ()、!演算子、...
お礼  jackpot  - 11/3/28(月) 19:10 -

引用なし
パスワード
   解決したので、報告いたします

問題は’閉じる’のイベントではなく、サブフォームのテキストBOXの
コントロールが違っていました。

失礼しました
・ツリー全体表示

【11976】access2007 ドット ()、!演算子、か...
質問  jackpot  - 11/3/26(土) 17:19 -

引用なし
パスワード
   はじめまして、よろしくおねがいいたします

請求書を作成するプログラムを作成しています
F_請求元帳→F_船便請求明細にはいり、部品価格を計算し
’閉じる’ ボタンをクリックすると、計算結果がF_請求元帳に
反映されるプログラムを作成しています
しかし’閉じる’ボタンをクリックすると、以下のエラーが発生し
うまく動作しません どこが間違っているのでしょうか?

●エラー内容
 ()、!演算子、かっこ()の使い方が正しくありません

●プログラム内容
 Private Sub 閉じる_Click()
On Error GoTo Err_閉じる_Click
  Me.Refresh
  Me.Requery
Dim x As String
If IsNull(Forms!F01_船便請求明細.F02_工事明細sub!部品ID.Value) = False Then
   DoCmd.RunSQL "SELECT T_工事明細.ID, T_工事明細.課税SW, Sum(T_工事明    細.金額) AS 金額の合計, " & _
   "Sum(T_工事明細.予算金額) AS 予算金額の合計 INTO W_合計金額 " & _
   "FROM T_工事明細 " & _
   "GROUP BY T_工事明細.ID, T_工事明細.課税SW " & _
   "HAVING (((T_工事明細.ID)='" & Forms!F01_船便請求明細.F02_工事明細sub!SVID.Value & "') AND ((T_工事明細.課税SW)=1));"
  
   DoCmd.RunSQL "SELECT T_工事明細.ID, T_工事明細.課税SW, Sum(T_工事明細.金額) AS 金額の合計, " & _
   "Sum(T_工事明細.予算金額) AS 予算金額の合計 INTO W_合計金額課税無 " & _
   "FROM T_工事明細 " & _
   "GROUP BY T_工事明細.ID, T_工事明細.課税SW " & _
   "HAVING (((T_工事明細.ID)='" & Forms!F01_船便請求明細.F02_工事明細sub!SVID.Value & "') AND ((T_工事明細.課税SW)=2));"
  
   DoCmd.RunSQL "SELECT T_工事明細.ID, T_工事明細.課税SW, Sum(T_工事明細.金額) AS 金額の合計, " & _
   "Sum(T_工事明細.予算金額) AS 予算金額の合計 INTO W_合計金額免税 " & _
   "FROM T_工事明細 " & _
   "GROUP BY T_工事明細.ID, T_工事明細.課税SW " & _
   "HAVING (((T_工事明細.ID)='" & Forms!F01_船便請求明細.F02_工事明細sub!SVID.Value & "') AND ((T_工事明細.課税SW)=3));"
     Dim w_kin As Variant
     Dim w_ysn As Variant
     Dim w_kin1 As Variant
     Dim w_kin2 As Variant
     Dim w_ysn1 As Variant
     Dim w_ysn2 As Variant
    
    If IsNull(DLookup("金額の合計", "W_合計金額", "ID = '" & Forms!F01_船便請求明細.F02_工事明細sub!SVID.Value & "'")) Then
    w_kin = 0
    Else
    w_kin = DLookup("金額の合計", "W_合計金額", "ID = '" & Forms!F01_船便請求明細.F02_工事明細sub!SVID.Value & "'")
    End If
   
    If IsNull(DLookup("予算金額の合計", "W_合計金額", "ID = '" & Forms!F01_船便請求明細.F02_工事明細sub!SVID.Value & "'")) Then
    w_ysn = 0
    Else
    w_ysn = DLookup("予算金額の合計", "W_合計金額", "ID = '" & Forms!F01_船便請求明細.F02_工事明細sub!SVID.Value & "'")
    End If
   
       
    Forms!F_請求元帳!合計金額.Value = w_kin * 1.05
    Forms!F_請求元帳!消費税テキスト.Value = w_kin * 0.05
    Forms!F_請求元帳!予算合計.Value = w_ysn
   
    If IsNull(DLookup("金額の合計", "W_合計金額課税無", "ID = '" & Forms!F01_船便請求明細.F02_工事明細sub!SVID.Value & "'")) Then
    w_kin1 = 0
    Else
    w_kin1 = DLookup("金額の合計", "W_合計金額課税無", "ID = '" & Forms!F01_船便請求明細.F02_工事明細sub!SVID.Value & "'")
    End If
   
    If IsNull(DLookup("予算金額の合計", "W_合計金額課税無", "ID = '" & Forms!F01_船便請求明細.F02_工事明細sub!SVID.Value & "'")) Then
    w_ysn1 = 0
    Else
    w_ysn1 = DLookup("予算金額の合計", "W_合計金額課税無", "ID = '" & Forms!F01_船便請求明細.F02_工事明細sub!SVID.Value & "'")
    End If
   
    If IsNull(DLookup("金額の合計", "W_合計金額免税", "ID = '" & Forms!F01_船便請求明細.F02_工事明細sub!SVID.Value & "'")) Then
    w_kin2 = 0
    Else
    w_kin2 = DLookup("金額の合計", "W_合計金額免税", "ID = '" & Forms!F01_船便請求明細.F02_工事明細sub!SVID.Value & "'")
    End If
   
    If IsNull(DLookup("予算金額の合計", "W_合計金額免税", "ID = '" & Forms!F01_船便請求明細.F02_工事明細sub!SVID.Value & "'")) Then
    w_ysn2 = 0
    Else
    w_ysn2 = DLookup("予算金額の合計", "W_合計金額免税", "ID = '" & Forms!F01_船便請求明細.F02_工事明細sub!SVID.Value & "'")
    End If
   
   
    Forms!F_請求元帳!合計課税無.Value = w_kin1 + w_kin2
    Forms!F_請求元帳!予算課税無.Value = w_ysn1 + w_ysn2
    Forms!F_請求元帳!予算総合計.Value = w_ysn * 1.05 + w_ysn1 + w_ysn2
    Forms!F_請求元帳!総合計.Value = w_kin * 1.05 + w_kin1 + w_kin2
    Me.Requery
  DoCmd.Close

Else
 x = MsgBox("データーを入力していません,フォームを閉じますか?", vbYesNo, " ")
 If x = vbNo Then
  Exit Sub
 Else
 DoCmd.Close
 End If
End If

Exit_閉じる_Click:
  Exit Sub

Err_閉じる_Click:
  MsgBox Err.Description
  Resume Exit_閉じる_Click


End Sub

非常に見づらいプログラムで申し訳ありません
・ツリー全体表示

【11975】Re:リストボックスのデータ取得
お礼  亜矢  - 11/3/22(火) 16:51 -

引用なし
パスワード
   ▼小僧 さん:
>▼亜矢 さん:
>こんにちは。
>
>> リストボックスをクリックしたときに、
>> そのデータをテキストボックスに入れたいと思いますが、
>
>リストボックスをリスト0、
>テキストボックスをテキスト2とすると、
>
>Private Sub リスト0_Click()
>
>  Me.テキスト2.Value = Me.リスト0.Column(0)
>
>End Sub
>
>の様な記述でお望みのような動作になるかと思われます。
>
>リストボックスが複数列の時は
>Column(x) の値を変えてみて下さい。
返事が遅くなってすみませんでした。
 解決しました。
ありがとうございました。
・ツリー全体表示

【11974】Re:カレンダーコントロールとファイル選...
お礼  さつき  - 11/3/19(土) 22:32 -

引用なし
パスワード
   ▼小僧 さん:
こんにちは。
いつもいろいろ教えていただきありがとうございます。

> DoCmd.OpenForm "cal", WindowMode:=acDialog
>cal が閉じるまで、この行で命令が止まるので
>ファイルダイアログが開く処理を待ってくれるでしょう。
教えていただいたとおりに書きましたら、すんなり上手く行きました。
ありがとうございました。
・ツリー全体表示

【11973】Re:カレンダーコントロールとファイル選...
回答  小僧  - 11/3/19(土) 16:20 -

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

> カレンダーフォームとファイル選択ダイアログが同時に開いてしまいます。
> どのように直したらいいでしょうか?

cal を表示する際にダイアログモードにて起動すると
良さそうな気がします。


> DoCmd.OpenForm "cal"
 DoCmd.OpenForm "cal", WindowMode:=acDialog

cal が閉じるまで、この行で命令が止まるので
ファイルダイアログが開く処理を待ってくれるでしょう。
・ツリー全体表示

【11972】テーブル作成について
質問  MIMI  - 11/3/17(木) 10:58 -

引用なし
パスワード
   作成した、選択クエリから、テーブルを作成するマクロを作りましたが、
どうしても、一列だけデータが入ってこないフィールドがあって、
どう回避すればよいのか分からず、ココに来ました

クエリ名が、Q_情報追加 というものが有り、このクエリを
T_情報 というテーブル名でテーブルを作成したいのですが、
他のデータはうまく入っているのですが、
どうしても、【場所】というフィールド名があるのですが、それだけは、
作成したテーブルに反映されないのです。
フィールド名は項目に存在して、作成されたテーブルに載ってきているのですが、
内容のデータが全く入ってきてくれません
原因が全く分からず困ってます


今のコード記述です

Sub TBL作成()

On Error GoTo エラー

Dim cn As New ADODB.Connection
Dim Cmd As New ADODB.Command
Dim mySQL As String

Set cn = CurrentProject.Connection

mySQL = "SELECT * "
mySQL = mySQL & "INTO T_情報 "
mySQL = mySQL & "FROM Q_情報追加;"


Cmd.ActiveConnection = cn
Cmd.CommandText = mySQL
Cmd.Execute mySQL

cn.Close: Set cn = Nothing

Exit Sub

エラー:
  
  If Err.Number = -2147217900 Then
    DoCmd.DeleteObject acTable, "T_情報" '削除します。
    Resume
  Else
    MsgBox Err.Number & " : " & Err.Description
  End If

End Sub

どうか、ご教授願います
・ツリー全体表示

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