Access VBA質問箱 IV

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

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


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

【10277】Re:サブフォーム内の検索
回答  VBWASURETA  - 08/3/3(月) 9:22 -

引用なし
パスワード
   ▼enigma さん:
おはようございます。
以下のように入れてみても同じでしたら名称が間違っていると
思われます。
半角全角に問題ないか確認してください。
ウィザードを使って入れて見るのも良いかも知れません。

サブフォーム指定例:
Forms![メインフォーム名]![サブフォーム名].Form![コントロール名]
・ツリー全体表示

【10276】Re:サブフォーム内の検索
質問  enigma  - 08/3/3(月) 0:04 -

引用なし
パスワード
   回答ありがとうございます。
おっしゃるとおり、メインフォーム内のサブフォームを検索しようとしています。
ご回答を参考にやってみましたが、ダメでした。

Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFist "サブフォーム名.Form.コントロール名 Like'*検索文字列*'"

を実行しましたが、やはりメッセージは
'サブフォーム名.Form.コントロール名'を有効なフィールド名、または式として認識できません。
でした。
根本的に何かを間違っているのでしょうか?
・ツリー全体表示

【10275】Re:同じテーブル名の結合方法
質問  vba初心者  - 08/3/2(日) 1:30 -

引用なし
パスワード
   >YU-TANGさんのサイトより
>外部 Jet データベースとの接続方法
>
>h tp://x7net.com/~access/AcTipsGnrlHowToAttachExternalMdb.html
>
上記サイト確認しましたが、難しいく書かれているため
ほとんど分かりませんでした。具体的に記載していただけると
いいのですが・・・
・ツリー全体表示

【10274】Re:既存エクセルへの出力
回答  小僧  - 08/3/1(土) 13:21 -

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

>エクセルのセル設定は、改行で全体表示です。

「折り返して全体を表示する」で宜しいでしょうか。


>出力する文字数(改行含む)が多いと、
>エクセルでは、#####と表示されてしまいます。


##### となるのは数値型のものですよね。
文字列ですと大丈夫な模様です。


Sub 折り返してセルを表示のテスト()
Dim xlsApp As Object
Dim xlsWkb As Object
Dim xlsPath As String

  xlsPath = CurrentProject.Path & "\折り返しテスト.xls"
  On Error Resume Next
    Kill xlsPath
  On Error GoTo 0
  
  Set xlsApp = CreateObject("Excel.Application")
  Set xlsWkb = xlsApp.Workbooks.Add
    With xlsWkb.Sheets("Sheet1")
      
      .Columns("A:A").ColumnWidth = 4
      .Range("A1:A3").WrapText = True
      .Range("A1").Value = "AAAAAAAAAAAAAAAAAAAA"
      .Range("A2").Value = "99999999"
      .Range("A3").Value = "'99999999"
    End With
  xlsWkb.SaveAs xlsPath
  xlsWkb.Close: Set xlsWkb = Nothing
  xlsApp.Quit: Set xlsApp = Nothing
  
End Sub


上記コードを実行すると、Accessと同じフォルダに
「折り返しテスト.xls」ができ、確認できると思われます。

>デザインされたシート

という事ですが、改行される事によってデザインが崩れる事は
大丈夫なのでしょうか。
・ツリー全体表示

【10273】Re:既存エクセルへの出力
質問  TARO  - 08/3/1(土) 10:17 -

引用なし
パスワード
   小僧さん、返信ありがとうございます。

既に完成されたデザインのシートの項目に
データを出力したかったのです。

現状のコードですと、
新たにシートを追加していたため、
デザインされたシートに出力していませんでした。
(.Worksheets.Addが原因ですね)

現在は、.Worksheets.Addをコメントアウトしたので、
完成されたデザインに出力することが出来ました。
ですが、新たな問題が発生しました。

出力する文字数(改行含む)が多いと、
エクセルでは、#####と表示されてしまいます。
エクセルのセル設定は、改行で全体表示です。

データの内容をそのまま出力することは出来ないでしょうか。
よろしくお願い致します。
・ツリー全体表示

【10272】Re:サブフォーム内の検索
回答  VBWASURETA  - 08/2/29(金) 17:52 -

引用なし
パスワード
   ▼enigma さん:

こんにちは。

それは、メインのフォーム内にあるサブフォームでしょうか?

それであれば、最近回答しました以下のURLを参照して
サブフォーム名を入れて下さい。

//www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=10247;id=access
・ツリー全体表示

【10271】Re:EXCEL書き出ししたいのですが
お礼  NEMO  - 08/2/28(木) 17:27 -

引用なし
パスワード
   皆さんありがとうございました。
おかげさまで自分のやりたいことができました。
・ツリー全体表示

【10270】Re:EXCEL書き出ししたいのですが
質問  NEMO  - 08/2/28(木) 15:55 -

引用なし
パスワード
   ▼neptune さん:
だいたい自分の使用としてことができています。
教えていただきたいのですが
Objsheet.Select
Objsheet.COYP Aftre:Objsheet
と記載すると
EXCELシートに
偶数月の後に偶数月(1)とシートができます。
このとき偶数月(1)を2月としたい場合はどう記載すればいいのでしょうか?
よろしくお願いします。
・ツリー全体表示

【10269】Re:EXCEL書き出ししたいのですが
発言  NEMO  - 08/2/28(木) 15:51 -

引用なし
パスワード
   ▼neptune さん:
いろいろありがとうございます。
VBAは自分なりに調べてやっています。
neptune さんの言うとおり自分でも実際理解していません。(>¥<)
だから実際にモジュールを作成するときも書斎やインターネットをみてパズルのような感覚で作成してみてデバックで値をみなから処理しています。
ですので自分で作成したものはわかるのですが、他人が作成したモジュールはぜんぜんといいほどわかりません。
本当は時間をかけて勉強すればもっともっといいものができると思います。
ただいいわけかもしれませんが今の状態があまりにも悪いので・・・・
とりあえず作成してうまくいけばいい状態なのです。
本当に感謝しています。
・ツリー全体表示

【10268】Re:EXCEL書き出ししたいのですが
回答  neptune  - 08/2/28(木) 15:40 -

引用なし
パスワード
   みなさんこんにちは

VBWASURETA さんフォローありがとうございます。

>いろいろ参考にしてわからないのと丸投げは同じでしょうか?
ですが、参考にしているのは良いのですが、
私は、それをある程度理解し、自分で調べてみて、その上でするのが
質問と思っています。ですから、ある程度、質問内容も絞り込んだものか、
手法そのものの問いになりますし漠然としたものにはなりません。

私はおっさんなので、そのような教え方をされましたし、その教え方
が長い目で見ると本人の役に立つと思っていますし、役立ちました。

ですから、サンプルは書いても、そのまま使えるようなソースは殆ど
このような掲示板では書いた事ありませんし、書きません。
・・・・と言うような意味でした。

 なので、前回のResでは手法を示唆しました。

関係無いですが、私は何度も聞き返してまでResを付けようとも思いません。
何故なら、そのような質問をする方は自分のしようとする事も理解してないし、
調べてもないからそのような質問になると思うからです。

気づいた点を書きます。
>Set DB = OpenDatabase("C:\test.mdb")
>Set rst = DB.OpenRecordset("T_data", dbOpenTable)
>
>
>Set objExcel = New Excel.Application
>objExcel.Workbooks.Open ("C:\Book1.xls")
ここでvisible=trueとしておいた方が良い。場合によっては
Bookか、WorkSheetに不可視の属性がついたままになってしまう恐れがある。
(その場合、次回そのBookをExcelで開いた時不可視となる)

>objExcel.Worksheets("T_data").Select
バージョン(97とか)によってはSelectしなければならないものも
あったような気がするがSelectしなくても良いものはしない。
(画面遷移など無駄な処理を伴う事が多い。)

>objExcel.Cells(1, 1).CopyFromRecordset rst
objExcel.Worksheets("T_data").Cells(1, 1).CopyFromRecordset rst
で、出来ませんかね?

>はどのような意味を表しているのか教えてください。
rstの全てのレコードをA1セルを左端上として、Fieldを右方向に
recordを縦方向にコピーしなさい。

別方法ですが、
ExcelをOLEで扱わないでも、直接、DAOやADOで追加出来ませんでしたっけ??
削除は出来ませんが、追加変更はできたと思います。
但し、頻繁に行うようなら、お勧めしません。
(これもまた、リソース開放のバグの絡みが会ったと思いますので。
詳しくはMSのサポート技術情報で調べてみて下さい。)

参考不具合情報
h tp://support.microsoft.com/kb/414048/ja
・ツリー全体表示

【10267】サブフォーム内の検索
質問  enigma  - 08/2/28(木) 15:17 -

引用なし
パスワード
   サブフォームにあるテキストボックスから特定の文字列を検索しようとしていますが上手くいきません。

rs.FindFirst "(サブフォーム名)!(テキストボックス名) Like '(検索文字列)*'"

実行すると、'(サブフォーム名)!(テキストボックス名)'を有効なフィールド名、または式として認識できません
のメッセージが出てしまいます。
どう対処してよいか、まったく検討がつきません。どなたか、ご教授お願いします。
・ツリー全体表示

【10266】Re:EXCEL書き出ししたいのですが
質問  NEMO  - 08/2/28(木) 14:53 -

引用なし
パスワード
   ▼VBWASURETA さん:

こんにちは。
私も
Excelの自動マクロ登録で保存したときのソースを参考にしたりします。
でも実際に使用できるときと使用できないときがあります。
イメージ的にはわかるのですか・・・・

CopyFromRecordsetについても調べてみました。

Set DB = OpenDatabase("C:\test.mdb")
Set rst = DB.OpenRecordset("T_data", dbOpenTable)


Set objExcel = New Excel.Application
objExcel.Workbooks.Open ("C:\Book1.xls")
objExcel.Worksheets("T_data").Select

objExcel.Cells(1, 1).CopyFromRecordset rst

objExcel.Quit

rst.Close
DB.Close

Set DB = Nothing
Set rst = Nothing
Set objExcel = Nothing

の参考にしているんですが
objExcel.Cells(1, 1).CopyFromRecordset rst
はどのような意味を表しているのか教えてください。
・ツリー全体表示

【10265】Re:EXCEL書き出ししたいのですが
発言  VBWASURETA  - 08/2/28(木) 14:07 -

引用なし
パスワード
   ▼NEMO さん、neptune さん:

こんにちは。

横からすみません。ちょっと丸投げについて記載します。
丸投げというのは質問した方が理解していなくても
そのまま使えてしまうソースを回答することだと思いますよ。

それだと、何故解決したのかわからないままなので
意味がないですよね。

調べてもわからなかったことの経緯と質問するのは別です。

わからなくても良いので回答だけを欲しいというような方に
丸々解決の回答をしたとします。
で、もしそのソースに問題が発生したとしても理解していないと
解決の糸口もわからない状態になりますから。


後、neptune さん回答されてますが、それは参考にされてますか?
Excelの自動マクロ登録で保存したときのソースを見るとわかりますよ。

因みに自分もExcelをAccessで操作する場合はそれで覚えました。


逆に回答がわからなければそれについてレスで質問してください。
・ツリー全体表示

【10264】Re:EXCEL書き出ししたいのですが
発言  NEMO  - 08/2/28(木) 11:31 -

引用なし
パスワード
   ▼neptune さん:

ご指摘ありがとうございます。
いろいろ参考にしてわからないのと丸投げは同じでしょうか?

いろいろがんばって見ます。
ありがとうございます
・ツリー全体表示

【10263】Re:EXCEL書き出ししたいのですが
回答  neptune  - 08/2/27(水) 23:27 -

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

ExcelのRangeオブジェクトにCopyFromRecordset メソッドってのがあります。
ExcelのHelpに使用例もありますから、ご覧になって下さい。
但し、DAOでの使用はレコード数に制限があるのでMSのサポート情報を
探してみて下さい。

ワークシートの追加ですが、Excelにはマクロの記録と言う強力な
サポート機能が用意されていますので、それで基本コードは出来上がります。
それを参考に少し改造すれば良いです。
名前も保存も同様です。

少し気になる点
・Set objExcel = CreateObject("Excel.Application")
が複数記述されているが、1つで十分。
OLEでExcel扱う場合は、常に暗黙の参照が発生しないように気を付けないと
インスタンスが消えないバグを抱え込みます。selectionとか、Activeなんたら
等は使ってはいけません。

Accessの板でデビューでした。

#不明な点で判る所は協力しますが、丸投げには対応しませんので悪しからず。
・ツリー全体表示

【10262】EXCEL書き出ししたいのですが
質問  NEMO  - 08/2/27(水) 16:09 -

引用なし
パスワード
   データを読み込んでD:\一般\91業務部\積無定期預金顧客管理表(原本).xls
書き込みしているのですが、このシートを30件ごとにシートを追加していき違う名前で保存したいのですがどのような記載をすればいいのかよくわかりません。
丸投げかもしれませんけどどうしていいかわかりません。
よろしくお願いします。

Public Function T明細作成()
Dim objExcel As Object
Dim objBook As Object
Dim objSheet As Object
Dim Db As DAO.Database
Dim INRs As DAO.Recordset
Dim A As String
Dim B As String
Dim 行カウント As Integer

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True

Set objBook = objExcel.WorkBooks.Open("D:顧客管理表(原本).xls")
Set objSheet = objBook.Worksheets("偶数月")

Set Db = CurrentDb
Set INRs = Db.OpenRecordset("顧客情報テーブル", dbOpenDynaset)

行カウント = 5

objSheet.RANGE("M4").Value = INRs!店名

Do Until INRs.EOF

If 行カウント > 30 Then


  objBook.Close False
  objExcel.Quit
  Set objExcel = Nothing
 
  Set objExcel = CreateObject("Excel.Application")
  objExcel.Visible = True
  Set objBook = objExcel.WorkBooks.Open("顧客管理表(原本).xls")
  Set objSheet = objBook.Worksheets("偶数月")
  行カウント = 5
End If

行カウント = 行カウント + 1

A = "A" & 行カウント
B = "B" & 行カウント

objSheet.RANGE(A).Value = INRs!漢字氏名
objSheet.RANGE(B).Value = INRs!住所
 
INRs.MoveNext
Loop

INRs.Close
Set INRs = Nothing

objBook.Close False
objExcel.Quit

Set objExcel = Nothing

End Function
・ツリー全体表示

【10261】Re:空白の行までインポート?
お礼  ts  - 08/2/27(水) 11:11 -

引用なし
パスワード
   小僧 さん

クエリを使って削除することができました。
ありがとうございました。

▼小僧 さん:
>▼ts さん:
>こんにちは。
>
>>空白行をインポートしない方法はありますか?
>>宜しくお願い致します。
>
>うろ覚えで申し訳ないのですが
>書式などが設定されていると
>空白行でも取り込んでしまった様に思われます。
>
>
>> マクロで
>
>となると難しいかもしれませんが、
>クエリ等を使って取り込んだ後に空白行だけ削除するような処理が
>一番やりやすいのではないかと思われます。
・ツリー全体表示

【10260】Re:ひらがなとカタカナの区別の方法を教...
お礼  たけ  - 08/2/27(水) 10:23 -

引用なし
パスワード
   ▼Gin_II さん:

StrComp 関数を使用してできました。
ありがとうございました。
・ツリー全体表示

【10259】Re:同じテーブル名の結合方法
回答  小僧  - 08/2/27(水) 9:49 -

引用なし
パスワード
   ▼vba初心者 さん:
こんにちは。

>なんとかVBAで別データベースの同じテーブル同士を結合したいのですが
>よく分かりません。


YU-TANGさんのサイトより
外部 Jet データベースとの接続方法

h tp://x7net.com/~access/AcTipsGnrlHowToAttachExternalMdb.html


上記サイトが参考になるかと思われます。
・ツリー全体表示

【10258】Re:既存エクセルへの出力
質問  小僧  - 08/2/27(水) 9:34 -

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

>Dim xlApp As New Excel.Application
>xlApp.Workbooks.Open "C:\temp\Book1.xls"
>
>xlApp.Worksheets("sheet1").Activate
>
>With xlApp
> .Worksheets.Add
> .Range("H2").Value = Me.Txt_記入日
> .Range("B2").Value = Cmb_報告者コード
>End With
>Set xlApp = Nothing

現状が良く解らないのですが
上記のコードで何か問題があるという事でしょうか。

もうちょっと具体的に「何が」「どう」解らなくてご質問されているのかを
明確にすると、回答がつきやすくなるかもしれませんね。
・ツリー全体表示

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