[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/02/27(Sun) 21:49
投稿者名:やばやば
URL :
タイトル:
VBからExcelのオートフィルタを設定
こんばんは。VB初心者ですが、宜しくお願いします。
現在、花ちゃんのサイトを参考にVBからExcelファイルを開き、オートフィルタを設定して
フィルタ結果の件数を取得するというものを作っています。その際、メモリが残らないように
注意などを参考にさせて頂いているのですが、オートフィルタのコードをどう書いていいのか
わかりません。
Excelのマクロ機能では Selection.AutoFilter Field:=DayCol, Criteria1:=zD 
というようなものでした。※DayColは列をzsは日を持たしています。

Set xlsApp = CreateObject("Excel.Application")
xlsApp.Application.Visible = False
Set xlsBook = xlsApp.Workbooks.Open(strfile)
Set xlsSheet = xlsBook.Worksheets(SheetNm)

 ※strfileはファイルのパスを指定する変数です
 ※SheetNmはシート名の変数です

途中のコードは省略しています。以下のオートフィルタのところでエラーになり、
オートフィルタをどう指定していいのかわかりません。
With xlsSheet       '2005/2/25
    .Activate
    'オートフィルタを設定
    xlsApp.AutoFilter.Filters(DayCol).Criteria1 = zD
    .Cells(1, 1).Select
    .Cells(Rows.Count, 1).End(xlUp).Select
    eLoop1 = xlsApp.ActiveCell.Row         '行数
end with

初心者な質問で申し訳ないですが、よろしくお願いします。
尚、VBは6.0 EXCELは2002または2000を利用しています。

投稿時間:2005/02/27(Sun) 23:03
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: VBからExcelのオートフィルタを設定
> オートフィルタのコードをどう書いていいのかわかりません。
> Excelのマクロ機能では Selection.AutoFilter Field:=DayCol, Criteria1:=zD 
> というようなものでした。※DayColは列をzsは日を持たしています。

コードを投稿される場合は、実際に使用しているコードをコピー&ペーストして
投稿して下さい。書き直したコードでは、本当の事が解りません。

又、マクロを取ったのならそのマクロも投稿して下さい。
中途半端なコードを投稿してもらっても何が解らないのか、どうしたいのか
相手に伝わらないかと思いますよ。当然コードを試して見る事もできないし。

エラーがでるならどこでどのようなエラーがでるのか説明しないと。
又、参照設定はどのようにしているとかも記入しないと。
EXCELは2002または2000 どちらなのかも

投稿時間:2005/02/28(Mon) 00:34
投稿者名:やばやば
URL :
タイトル:
Re^2: VBからExcelのオートフィルタを設定
花ちゃん様返信ありがとうございます。

>> コードを投稿される場合は、実際に使用しているコードをコピー&ペーストして
> 投稿して下さい。書き直したコードでは、本当の事が解りません。

確かにおっしゃるとおりですね。失礼致しました。
 --概略--
Excelファイルに既にオートフィルタを設定しています。その先月分のExcelファイルをVBから開けて
日付でフィルタをかけて、その日付のデータ数を取得したいのです。

Public xlsApp As excel.Application
Public xlsBook(1 To 2) As excel.Workbook
Public xlsSheet As excel.Worksheet '.Sheets

Public Const Path As String = "C:\"
Public Const FileNm As String = "DAY.xls"
Public Sub Excel_OPEN()     '2005/2/16
    Set xlsApp = CreateObject("Excel.Application")      
    xlsApp.Application.Visible = False
End Sub

Public Sub BOOK_OPEN(ByVal strfile As String, ByVal Index As Integer)
    Set xlsBook(Index) = xlsApp.Workbooks.Open(strfile)
End Sub

Public Sub Sheet_OPEN(ByVal SheetNm As String, ByVal Index As Integer)
    Set xlsSheet = xlsBook(Index).Worksheets(SheetNm)        
End Sub
Private Sub cmdNEW_Click()
    Dim F2,F3 as string
    Dim YY,MM,DD,zY,zM,zD as integer
    Dim eLoop as integer

    YY = Year(Date):MM = Month(Date)
    DD = Day(Date):zD = 1
    If MM = 1 Then
        zY = YY - 1
        zM = 12
    Else
        zY = YY
        zM = MM - 1
    End If
    
  F2 = Path & FileNm & YY & Format(MM, "00") & ".xls"
  F3 = Path & FileNm & zY & Format(zM, "00") & ".xls"

  'ExcelファイルのOPEN
   Call Excel_OPEN
   Call BOOK_OPEN(F3, 2)
   Call Sheet_OPEN("Sheet1", 2)

  With xlsSheet      
        .Activate  
        'オートフィルタを設定
    '↓(ここでエラーになります)
    xlsApp.AutoFilter.Filters(DayCol).Criteria1 = zD
        
    .Cells(1, 1).Select
        .Cells(Rows.Count, 1).End(xlUp).Select
        eLoop1 = xlsApp.ActiveCell.Row
    End With

  Call Sheet_CLOSE
  Call BOOK_CLOSE(F3, False, 1)
    Call Excel_CLOSE

Public Sub Sheet_CLOSE()         '2005/2/25
    Set xlSheet = Nothing
End Sub


Public Sub BOOK_CLOSE(ByVal strfile As String, ByVal SaveFlg As Boolean, ByVal Index As
Integer)
    If SaveFlg Then
        xlsBook(Index).Save
    Else
        xlsBook(Index).Saved = True
    End If
    xlsBook(Index).Close
    xlsApp.Quit            
End Sub

Public Sub Excel_CLOSE()     '2005/2/16

    Set xlsBook(1) = Nothing
    Set xlsBook(2) = Nothing

End Sub

エラー内容は「オブジェクトはこのプロパティまたはメソッドをサポートしていません」です。
先ほどの質問で『オートフィルタをどう書いていいのかわからない』と書きましたが、ここなのです。
このサイトのExcelの箇所にもありましたように『VBからExcelのプロパティやメソッド・オブジェクト
等を操作する場合は、必ずオブジェクトを指定します。』この場合、オブジェクトが何になり、
どう指定していいのかわかりません。


> 又、マクロを取ったのならそのマクロも投稿して下さい。
> 中途半端なコードを投稿してもらっても何が解らないのか、どうしたいのか
> 相手に伝わらないかと思いますよ。当然コードを試して見る事もできないし。


下記が、エクセルでのマクロ記録した内容です。
2行目より項目、A列に日付で1日を選択しました
Sub Macro6()
' Macro6 Macro
' マクロ記録日 : 2005/2/28  ユーザー名 :
'

'
    Selection.AutoFilter Field:=1, Criteria1:="1"
    Range("A2").Select
    Selection.End(xlDown).Select
    Selection.End(xlDown).Select
    Selection.End(xlUp).Select
End Sub

> エラーがでるならどこでどのようなエラーがでるのか説明しないと。
> 又、参照設定はどのようにしているとかも記入しないと。
> EXCELは2002または2000 どちらなのかも

参照設定はVisual Basic For Application,Visual Basic runtime objects and procedures,Visual
Basic objects and procedures,OLE Automation,Microsoft Excel 10.0 Object Livbrary,Microsoft
ADO Ext.2.8 for DDL and Securityにチェックをつけています。
Excelは2002と2000のどちらとも使っています。(主には2002です)

長くなってしまいましたが、宜しくお願いします。

投稿時間:2005/02/28(Mon) 08:06
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: VBからExcelのオートフィルタを設定
>     Dim F2,F3 as string
>     Dim YY,MM,DD,zY,zM,zD as integer

   上記の使い方が間違っています。ここの変数関係の 1行に複数の変数を
   宣言する時の注意 をご覧下さい。


>     '↓(ここでエラーになります)
>     xlsApp.AutoFilter.Filters(DayCol).Criteria1 = zD

            ↓
         .Range("A2").AutoFilter field:=1, Criteria1:="1"
 
事前バインディングしていればインテリセンス機能が働くので xlsApp. と入力しても
AutoFilter が表示されないので解るかと思うのですが。
又、AutoFilter をポイントして F1 キー を押すとヘルプが表示され使用例等も記載
されていますよ。
後は、自分で同様の要領で調べて下さい。


Private Sub cmdNEW_Click() イベントの End Sub はどこへいったんでしょうかね。
ペーストしても間違いが起きる位ですから。

投稿時間:2005/02/28(Mon) 23:50
投稿者名:やばやば
URL :
タイトル:
Re^4: VBからExcelのオートフィルタを設定
返信が遅くなってしまいましたが、朝早くから返信ありがとうございました。