Access VBA質問箱 IV

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

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


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

【11911】Re:Excelファイルのオートシェイプ上のテ...
お礼  さつき  - 11/1/15(土) 13:03 -

引用なし
パスワード
   雅さん、ご回答ありがとうございます。

>こっちはShapeではなくコレクションを列挙しようとしているのでShapesかと
>思われます。
Shapesに直しましたら、無事動作しました。ありがとうございました。

>試してないんで確証はないですがたぶんOpenのほうは
>「FileName:=FileName」の「FileName:=」が悪さをしていると思います。
ネットで「FileName:=」を使わない下記のような例題があったので貼り付けて実行してみましたが、やはり同じエラーがでました。ファイル形式の変換が悪さしているようです。

Dim WSH As Object
Dim sDesktop As String
Set WSH = CreateObject("WScript.Shell")
' // Desktop のパスを取得する
sDesktop = WSH.SpecialFolders("Desktop")
 MsgBox sDesktop
' // Desktop 上の Book1.xls を開く
WSH.Run Chr(34) & sDesktop & "\Book1.xls" & Chr(34)
Set WSH = Nothing
・ツリー全体表示

【11910】Re:Excelファイルのオートシェイプ上のテ...
回答    - 11/1/15(土) 10:30 -

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

試してないんで確証はないですがたぶんOpenのほうは
「FileName:=FileName」の「FileName:=」が悪さをしていると思います。

>For Each Obj_Shape In .Workbooks("Test.xls").Worksheets(1).Shape
>excelの参照設定をしてみたり、

こっちはShapeではなくコレクションを列挙しようとしているのでShapesかと
思われます。
・ツリー全体表示

【11909】Re:Excelファイルのオートシェイプ上のテ...
質問  さつき  - 11/1/15(土) 1:56 -

引用なし
パスワード
   雅さん、再びご質問です。

>>objExcel.Workbooks.Open FileName:=FileName
>ちなみに、ここな気がするけど。
上記のご指摘を参考に、「Workbooks.Open FileName」
で検索して調べているうちに気がついたのですが、
以前、そのaccessファイルは、データベース変換で
access2002-2003ファイル形式の変換を行なっていました。
新しいファイルを作成して、同じコードを貼り付けたら、
「イベントプロパティに指定した式クリック時でエラーが発生しました。
ユーザー定義型は定義されていません。」
というエラーは出なくなりました。
ところが今度は、下記の行で、
「オブジェクトはこのプロパティまたはメソッドをサポートしていません」
と出ます。
For Each Obj_Shape In .Workbooks("Test.xls").Worksheets(1).Shape
excelの参照設定をしてみたり、
Dim Obj_Shape As Object に変更してもだめでした。
どう直したらいいでしょうか?
ご教示お願いいたします。
・ツリー全体表示

【11908】Re:Excelファイルのオートシェイプ上のテ...
質問  さつき  - 11/1/14(金) 21:54 -

引用なし
パスワード
   雅さん、レスありがとうございます。
あきらめて、別の切り口で質問し直そうと思っておりました。
というのは、オートシェイプに関わらず、
エクセルのファイルを開くだけのコードに置き換えて見ても
同じエラーが出ます。
>>objExcel.Workbooks.Open FileName:=FileName
>ちなみに、ここな気がするけど。
問題がある部分は、雅さんのご指摘の通りのような気がしています。

>どこでエラーが出るか書くといいかも?
申し訳ありません、正確に書くべきでした。
エラーは、クリック時にでます。「イベントプロパティに指定した式クリック時でエラーが発生しました。ユーザー定義型は定義されていません。」
と表示されます。

参照設定などについても調べてみましたが、わかりませんでした。
バージョンの問題でしょうか?
どうぞ、引き続きご教授お願いいたします。
・ツリー全体表示

【11907】Re:Excelファイルのオートシェイプ上のテ...
回答    - 11/1/14(金) 12:52 -

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

どこでエラーが出るか書くといいかも?

>objExcel.Workbooks.Open FileName:=FileName
ちなみに、ここな気がするけど。
・ツリー全体表示

【11906】Re:サブフォームのデータをExcel出力
回答    - 11/1/14(金) 12:50 -

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


> 'サブフォーム1のデータを出力
> Set wks = wb.WorkSheets("Sheet1")
> Set Rcs = Forms!F_MainForm![F_SubForm1].Form.RecordsetClone

Rcs.MoveLast

> cntGyo = Rcs.RecordCount
>
> r = 2

でどうでしょ?
(2つ目も同じ)
・ツリー全体表示

【11905】サブフォームのデータをExcel出力
質問  かぼす  - 11/1/11(火) 21:08 -

引用なし
パスワード
   はじめまして。かぼすです。

Accessでメインフォームで抽出条件を設定し、
その結果をサブフォームに表示しています。

そのサブフォームの結果をExcelに出力するVBAを書いたのですが、
時々出力結果がおかしくなってしまいます。

VBAはこんな感じです。

Public xls As Excel.Application
Public wb As WorkBook
Public wks As WorkSheets
Public cntGyo

'--------------------------------------------------------------
Sub 結果出力()

 Dim Rcs As DAO.Recordset
 Dim r

 'サブフォーム1のデータを出力
 Set wks = wb.WorkSheets("Sheet1")
 Set Rcs = Forms!F_MainForm![F_SubForm1].Form.RecordsetClone

 cntGyo = Rcs.RecordCount

 r = 2
 If cntGyo<>0 Then
  Rcs.MoveFirst
  Do Until Rcs.EOF
   .Cells(r,2) = Rcs(1)
   .Cells(r,3) = Rcs(2)
   Rcs.MoveNext
   r = r+1
  Loop
 EndIf

 '罫線
 Keisen  '別のSubをCall(Sheet2も同様に使う)

 End With

 Rcs.Close
 Set Rcs = Nothing
 Set wks = Nothing

  'サブフォーム2のデータを出力
 Set wks = wb.WorkSheets("Sheet2")
 Set Rcs = Forms!F_MainForm![F_SubForm2].Form.RecordsetClone

 cntGyo = Rcs.RecordCount

 r = 2
 If cntGyo<>0 Then
  Rcs.MoveFirst
  Do Until Rcs.EOF
   .Cells(r,2) = Rcs(1)
   .Cells(r,3) = Rcs(2)
   .Cells(r,4) = Rcs(3)
   Rcs.MoveNext
   r = r+1
  Loop
 EndIf

 '罫線
 Keisen  '別のSubをCall(Sheet1も同様に使う)

 End With

 Rcs.Close
 Set Rcs = Nothing
 Set wks = Nothing
End Sub

'--------------------------------------------------------------
Sub Keisen()

 With Wks
  With .Range(.Cells(1,1),.Cells(cntGyo+1,3)).Borders
   .LineStyle = xlsContinuous
   .Weight = xlThin
  End With

  .Cells(cntGyo+4, 1) = "コメント"
  .Cells(cntGyo+5, 1) = "〇:変更する"
  .Cells(cntGyo+6, 1) = "×:変更なし"
 End With

End Sub

具体的な現象は、Sub Keisenで罫線が描かれる行、コメントが書かれる行が
Sub 結果出力で出力されたデータ行と異なってしまいます。
(データ行より罫線行が少ない、コメントがデータ行にかぶってしまう)

この現象がうまくいく時、いかない時があり
何が原因なのかわからず困っています。

どなたか教えてください。

環境:WindowsXP、Accss2002
足りない情報があれば遠慮なく言って下さい。

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

【11904】Excelファイルのオートシェイプ上のテキ...
質問  さつき  - 11/1/10(月) 17:35 -

引用なし
パスワード
   こんにちは、さつきと申します。
こちらのトピック番号2135
でExcelファイルのオートシェイプ上のテキストの値を取得する方法が載っていたので、下記のようにして動かしてみましたが、「ユーザー定義型は定義されていません」というエラーがでます。他にもあちこち探して見ましたが、わかりません。
どなたかご教授お願いいたします。accessのバージョンは2003です。

Private Sub コマンド15_Click()

Dim Obj_Shape    As Variant
Dim FileName    As String
Dim wk_Applicant  As String
Dim wk_ApplicantDay As Date

' ファイル名取得
FileName = "C:\Documents and Settings\My Documents\Test.xls"

' Excel起動
Set objExcel = CreateObject("Excel.Application")
' ファイルオープン
objExcel.Workbooks.Open FileName:=FileName

With objExcel
  For Each Obj_Shape In .Workbooks("Test.xls").Worksheets(1).Shape
    If Obj_Shape.Name = "テキスト 1" Then
      wk_Applicant = Obj_Shape.TextFrame.Characters.Text
    ElseIf Obj_Shape.Name = "テキスト 2" Then
      wk_ApplicantDay = Obj_Shape.TextFrame.Characters.Text
    End If
  Next

   Excel終了
  .Quit
End With

End Sub
・ツリー全体表示

【11903】Re:アクセスからエクセルファイルを扱う...
お礼  かな  - 11/1/7(金) 9:41 -

引用なし
パスワード
   ▼よろずや さん:

アドバイスありがとうございました
ドットが抜けてるだけでした・・・
ポカミスでした
すみません・・・
ドットを入れたら、普通にいきました

どうもありがとうございました


>>    ’★問題の箇所です↓
>>      ”オブジェクトがありません”
>>      とエラーメッセージがでてしまいます
>>       
>>       MaxR = .Range("B" & rows.Count).end(xlup).row
>
>Access には、rows も xlup も有りません。
>AccessVBA に対して、Excel のプロパティであることを明示する必要があります。
>rows に関しては . (ドット) が抜けているだけですね。
>xlup に関しては、定数宣言するとか、.Application.XlDirection.xlup とか。
・ツリー全体表示

【11902】Re:アクセスからエクセルファイルを扱う...
回答  よろずや  - 11/1/6(木) 21:03 -

引用なし
パスワード
   >    ’★問題の箇所です↓
>      ”オブジェクトがありません”
>      とエラーメッセージがでてしまいます
>       
>       MaxR = .Range("B" & rows.Count).end(xlup).row

Access には、rows も xlup も有りません。
AccessVBA に対して、Excel のプロパティであることを明示する必要があります。
rows に関しては . (ドット) が抜けているだけですね。
xlup に関しては、定数宣言するとか、.Application.XlDirection.xlup とか。
・ツリー全体表示

【11901】アクセスからエクセルファイルを扱う方法
質問  かな  - 11/1/6(木) 16:38 -

引用なし
パスワード
   アクセスから指定エクセルファイルを開きます

エクセルには、アクセスにインポートさせたいファイル名の一覧情報があります
それを配列に入れて、情報取得します

順番に、アクセスのテーブルへインポートさせる

というマクロを組んでいますが、
どうしても、

一箇所だけうまくいかなくて困っています
どうかアドバイスをいただけるとありがたいです


Dim myFolder As String         'パス格納
Dim myName As String          '検索条件格納
Dim tmpName As String
Dim objE As Object
Dim FileKey()    ’ファイル名の配列
Dim MaxR As Integer ’最終行の取得

 Set objE = CreateObject("Excel.Application")
 objE.Visible = True
 objE.UserControl = True

  
  myName = "test"    'ファイル名の一部指定
  myName = "*" & myName & "*.xls"     'Excelファイル指定
  
  With Application.FileSearch
    .NewSearch             '前回の条件をクリア
    .LookIn = "C:\TEST1\"         '検索フォルダ指定
    .SearchSubFolders = True      'サブフォルダも含む
    .FileName = myName
    If .Execute() > 0 Then
      For i = 1 To .FoundFiles.Count
        objE.Workbooks.Open FileName:=.FoundFiles(i)
        MyFile = objE.activeworkbook.Name
      Next i
    
      With objE.Workbooks(MyFile).sheets(1)
    ’★問題の箇所です↓
      ”オブジェクトがありません”
      とエラーメッセージがでてしまいます
       
       MaxR = .Range("B" & rows.Count).end(xlup).row
       
     ’ しかし、変数"MaxR"の代わりに、数字を指定して進めると、
       下記の部分からは、うまく処理ができるのです
     ’ 何がよくないのでしょうか? 
     ’ 下記も、同じように
     ’ .Range  と記述しているのですが・・・ 


       ReDim FileKey(MaxR - 5, 1)

       For i = 5 To MaxR
        If .Range("B" & i).Value Like "-9_Sec43" & "*" Then
         FileKey(i - 5, 0) = Left(.Range("B" & i).Value, Len(.Range("B" & i).Value) - 6)
         FileKey(i - 5, 1) = .Range("C" & i).Value
        End If
     Next i
    
     End With

     objE.Workbooks(MyFile).Close False
     
      For i = 0 To UBound(FileKey, 1)
     ' 指定フォルダ内のExcelワークブックのファイル名を参照する(1件目)
        strFILENAME = Dir("C\10_マスター\" & FileKey(i, 0) & "\" & FileKey(i, 1) & "\" & FileKey(i, 0) & "_" & FileKey(i, 1) & ".xls", vbNormal)       ' 2.
        If strFILENAME = "" Then
           MsgBox FileKey(i, 0) & "\" & FileKey(i, 1) & Chr(10) & Chr(13) & _
           "このフォルダにはExcelワークブックは存在しません。"

        Else

           DoCmd.TransferSpreadsheet acImport, 8, FileKey(i, 0) & "_" & FileKey(i, 1), "C:\マスター\" & FileKey(i, 0) & "\" & FileKey(i, 1) & "\" & strFILENAME, True, "SH1!A:BN"
        End If
     Next i
    
    Else
      MsgBox "該当するファイルが見つかりませんでした", vbOKOnly
    End If
  End With

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

【11900】Re:ACCESS VBA 印刷の遅さ
お礼  大熊  - 11/1/4(火) 16:50 -

引用なし
パスワード
   ▼よろずや さん:
>こんな記事がありました。
>果たしてお望みのものかどうか。
>www.tsware.jp/tips/tips_288.htm
ご返信、有難う御座います。当方、ACCESS 2000 という古い
バージョンの為か、上手くいきませんでした。
Reports(strRptName).Printer.Copies = Me!txtCopies
の部分が、エラーとなりました。
私の力不足かと思いますが、申し訳有りません。//
・ツリー全体表示

【11898】Re:ACCESS VBA 印刷の遅さ
回答  よろずや  - 11/1/4(火) 0:12 -

引用なし
パスワード
   こんな記事がありました。
果たしてお望みのものかどうか。
www.tsware.jp/tips/tips_288.htm
・ツリー全体表示

【11897】ACCESS VBA 印刷の遅さ
質問  大熊  - 11/1/3(月) 15:59 -

引用なし
パスワード
   お願いします。

1. VBA で Docmd.PrintOut,,,,S (S は、部数の変数)で印刷
2. レポートを開いて、ファイル(F) → 印刷(P) で、S部印刷

同じレポートであっても、1.の方が、スプールに時間が掛かかっています。
S=50 の場合、プリンターを用紙切れ状態にしてスプール状態を見た結果、
1. ページ数 5/50、サイズ 1.08MB/8.43MB
2. ページ数 5/1、 サイズ 252KB/252KB
どうも、1.の方が、ファイルサイズが大きい様です。

もちろん、VBA で、2.と同等の処理速度になる事を望んでいます。
お助けくださいませ。//
・ツリー全体表示

【11896】Re:2行を1行にするには
お礼  にしもり  - 10/12/30(木) 9:49 -

引用なし
パスワード
   ▼よろずや さん:
>2行以下ならクエリで簡単にできます。
>3行、4行だと面倒。
>それ以上になる可能性があるなら、VBAを勉強しましょう。
アドバイスどうもありがとうございました。
・ツリー全体表示

【11895】Re:2行を1行にするには
回答  よろずや  - 10/12/29(水) 18:43 -

引用なし
パスワード
   >同じSEQ NOのレコードが必ず2行ずつある訳ではありません。
>1回に処理するレコード数は20個くらいで、
>大半は1行なのですが、同じSEQ NOのレコードが2行だったり、3行だったりすることがありえるのです。

>クエリだけで実現可能でしょうか。
>VBAを組まないとできないでしょうか。(小生には一寸厳しいです。)
2行以下ならクエリで簡単にできます。
3行、4行だと面倒。
それ以上になる可能性があるなら、VBAを勉強しましょう。
・ツリー全体表示

【11894】Re:2行を1行にするには
質問  にしもり  - 10/12/29(水) 9:15 -

引用なし
パスワード
   ▼よろずや さん:
同じSEQ NOのレコードが必ず2行ずつある訳ではありません。
1回に処理するレコード数は20個くらいで、
大半は1行なのですが、同じSEQ NOのレコードが2行だったり、3行だったりすることがありえるのです。
・ツリー全体表示

【11893】Re:2行を1行にするには
発言  よろずや  - 10/12/28(火) 19:14 -

引用なし
パスワード
   必ず2行ずつあるのですか?
・ツリー全体表示

【11892】Re:2行を1行にするには
質問  にしもり  - 10/12/28(火) 11:21 -

引用なし
パスワード
   ▼よろずや さん:

ありがとうございます。
記入される文字列にはたとえば次のようなものがあります。
1から始まり体系的になっているわけではないのですが
左端の数字は2ケタです。

29_CM 広告
35_CP コンプレイン
32_AZ 安全
27_BS 基本情報
28_US 使用法
30_PK 包装
33_BR 店紹介

アドバイス是非宜しくお願いします。
・ツリー全体表示

【11891】Re:2行を1行にするには
発言  よろずや  - 10/12/27(月) 23:16 -

引用なし
パスワード
   >11  12/27 TEL リンゴ 富士 1_苦情  味    一般  東京  東京都新宿区 xx yy zz
>11  12/27 TEL リンゴ 富士 2_生産地 誤記載 一般  東京  東京都新宿区 xx yy zz

1_苦情 、 2_生産地 というように頭に必ず
1 や 2 が付いてるなら簡単に出来ますけど
実際はどうなんでしょう?
・ツリー全体表示

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