過去ログ

                                Page      31
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼データ抽出でのエラー  maeda 02/9/3(火) 9:23
   ┗Re:データ抽出でのエラー  りん 02/9/3(火) 10:33
      ┗Re:データ抽出でのエラー  maeda 02/9/3(火) 14:09
         ┗Re:データ抽出でのエラー  りん 02/9/3(火) 17:06
            ┗Re:データ抽出でのエラー  maeda 02/9/3(火) 21:32

 ───────────────────────────────────────
 ■題名 : データ抽出でのエラー
 ■名前 : maeda <fwhn0621@mb.infoweb.ne.jp>
 ■日付 : 02/9/3(火) 9:23
 -------------------------------------------------------------------------
   以下の記述で「フィールドが不正か、フィールド名がない・・」のエラーが出ます。
他のファイルでは条件の記述でシート名を記述したら上手く言った場合もありました。

'損益データ転記
    Workbooks("損益データ.xls").Sheets("DB").Range("A1:AM50000").AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=Range("c10:c11"), CopyToRange:=Range("ba4:cL4"), Unique:= _
    False

アドバイスをお願いします、以下は全文です。


Private Sub CommandButton1_Click()

Workbooks.Open Filename:="C:\Data\運営資料\新しい報告書\損益報告書Ver2.01.xls"
Workbooks("分析.xls").Activate
Workbooks("損益報告書Ver2.01.xls").Sheets("DB-Soneki").Range("A1:D50000").AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=Range("a10:B11"), CopyToRange:=Range("a40:d40"), Unique:= _
    False
Workbooks("損益報告書Ver2.01.XLS").Close SaveChanges:=False
'------------------
  Dim i, FindWName

  FindWName = "損益データ.xls"
  'Book1.xlsという名前ブックを探します。
  '違うブックを探したい場合は "" の中身をかえてください。

  For i = Workbooks.Count To 1 Step -1
   If Workbooks(i).Name = FindWName Then
   Exit For
   End If
 Next i

  If i <> 0 Then
  'ループが回り切ると0になるため

  'MsgBox FindWName & "は開かれています。"
 Else
  Workbooks.Open Filename:="C:\Data\運営資料\新しい報告書\My\損益データ.xls"
 End If
 
  FindWName = "給与データ.xls"
  For i = Workbooks.Count To 1 Step -1
   If Workbooks(i).Name = FindWName Then
   Exit For
   End If
 Next i
  If i <> 0 Then

 Else
  Workbooks.Open Filename:="C:\Data\運営資料\新しい報告書\My\給与データ.xls"
 End If
 
  FindWName = "振替データ.xls"
  For i = Workbooks.Count To 1 Step -1
   If Workbooks(i).Name = FindWName Then
   Exit For
   End If
 Next i
  If i <> 0 Then

 Else
  Workbooks.Open Filename:="C:\Data\運営資料\新しい報告書\My\振替データ.xls"
 End If
'
FindWName = "運営基準.xls"
For i = Workbooks.Count To 1 Step -1
   If Workbooks(i).Name = FindWName Then
   Exit For
   End If
Next i
If i <> 0 Then

   Else
    Workbooks.Open Filename:="C:\Data\運営資料\新しい報告書\運営基準.xls"
End If
Workbooks("分析.xls").Activate
'--------------------------------

'順番に転記
  Dim コード As Variant
  Count = 0
  Set 欠損現場 = Range("a41").CurrentRegion.Columns(1)
  
  Range("c11").Activate
  
  For Each コード In Range(欠損現場.Address)
    Range("B33") = "0" & コード
    Range("C36") = コード
    Range("F78") = コード
    ActiveCell = コード.Offset(0, 0)
    ActiveCell.Offset(0, 1) = コード.Offset(0, 3)
'損益データ転記
    Workbooks("損益データ.xls").Sheets("DB").Range("A1:AM50000").AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=Range("c10:c11"), CopyToRange:=Range("ba4:cL4"), Unique:= _
    False
'給与データ転記
    Workbooks("給与データ.xls").Sheets("給与データ").Range("A1:AR50000").AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=Range("A32:B33"), CopyToRange:=Range("CQ4:DQ4"), Unique:= _
    False
'振替データ転記
    Workbooks("振替データ.xls").Sheets("furikae").Range("A1:L50000").AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=Range("A35:B36"), CopyToRange:=Range("AJ49:AL49"), Unique:= _
    False
'定員の転記
    Workbooks("運営基準.xls").Sheets("勤怠").Range("A1:P50000").AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=Range("F77:F78"), CopyToRange:=Range("Q46:U46"), Unique:= _
    False
'データ複写
    Range("V47:Ac63").ClearContents
    Range("cR5:cr21").Copy
    ActiveSheet.Paste Range("V47")
        Range("cS5:cT21").Copy
    ActiveSheet.Paste Range("X47")
        Range("cU5:cW21").Copy
    ActiveSheet.Paste Range("Aa47")
        Range("DR5:DR21").Copy
    Range("Z47").Select
      Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
'セルを元の番地へ戻す
    Range("c11").Activate
    Range("AE29") = "No-" & Count
    ActiveSheet.PrintPreview
    'InputBox ("** 確認 **")
    'ActiveSheet.PrintOut
    Count = Count + 1
  Next
  
Workbooks("損益データ.xls").Close SaveChanges:=False
Workbooks("給与データ.xls").Close SaveChanges:=False
Workbooks("振替データ.xls").Close SaveChanges:=False
Workbooks("運営基準.xls").Close SaveChanges:=False
End Sub
 ───────────────────────────────────────  ■題名 : Re:データ抽出でのエラー  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 02/9/3(火) 10:33  -------------------------------------------------------------------------
   maeda さん、こんにちわ。

>以下の記述で「フィールドが不正か、フィールド名がない・・」のエラーが出ます。
>他のファイルでは条件の記述でシート名を記述したら上手く言った場合もありました。
>'損益データ転記
>    Workbooks("損益データ.xls").Sheets("DB").Range("A1:AM50000").AdvancedFilter Action:=xlFilterCopy, _
>    CriteriaRange:=Range("c10:c11"), CopyToRange:=Range("ba4:cL4"), Unique:= _
>    False
 
↓ 上の式を詳細に書くと
 
Workbooks("損益データ.xls").Sheets("DB").Range("A1:AM50000"). _
  AdvancedFilter Action:=xlFilterCopy, _
  CriteriaRange:= ActiveSheet.Range("c10:c11"), _
  CopyToRange:= ActiveSheet.Range("ba4:cL4"), Unique:= False


ActiveSheetとWorkbooks("損益データ.xls").Sheets("DB")が一致してないからではないでしょうか?

With Workbooks("損益データ.xls").Sheets("DB")
  .Range("A1:AM50000").AdvancedFilter Action:=xlFilterCopy, _
  CriteriaRange:= .Range("c10:c11"), _
  CopyToRange:= .Range("ba4:cL4"), _
  Unique:= False
End With

Withでくくって、.Rangeとすることで、Rangeの所属がWithで指定されたシートになります。
他のオブジェクト(ブックなど)も同様です。

ついでに。
○Rangeオブジェクトはそのまま参照
>For Each コード In Range(欠損現場.Address)
  For Each コード In 欠損現場

○連続コピー
  With ActiveSheet
    .Range("V47:Ac63").ClearContents
    .Range("cR5:cr21").Copy Destination:= .Range("V47")
    .Range("cS5:cT21").Copy Destination:= .Range("X47")
    .Range("cU5:cW21").Copy Destination:= .Range("Aa47")
    .Range("DR5:DR21").Copy
    .Range("Z47").PasteSpecial Paste:=xlValues, Operation:=xlNone, _
      SkipBlanks:= False, Transpose:=False
  End With

こんな感じです。
 ───────────────────────────────────────  ■題名 : Re:データ抽出でのエラー  ■名前 : maeda <fwhn0621@mb.infoweb.ne.jp>  ■日付 : 02/9/3(火) 14:09  -------------------------------------------------------------------------
   ▼りん さん:
>maeda さん、こんにちわ。
>
>>以下の記述で「フィールドが不正か、フィールド名がない・・」のエラーが出ます。
>>他のファイルでは条件の記述でシート名を記述したら上手く言った場合もありました。
>>'損益データ転記
>>    Workbooks("損益データ.xls").Sheets("DB").Range("A1:AM50000").AdvancedFilter Action:=xlFilterCopy, _
>>    CriteriaRange:=Range("c10:c11"), CopyToRange:=Range("ba4:cL4"), Unique:= _
>>    False
> 
>↓ 上の式を詳細に書くと
> 
>Workbooks("損益データ.xls").Sheets("DB").Range("A1:AM50000"). _
>  AdvancedFilter Action:=xlFilterCopy, _
>  CriteriaRange:= ActiveSheet.Range("c10:c11"), _
>  CopyToRange:= ActiveSheet.Range("ba4:cL4"), Unique:= False
>
>
>ActiveSheetとWorkbooks("損益データ.xls").Sheets("DB")が一致してないからではないでしょうか?
>
>With Workbooks("損益データ.xls").Sheets("DB")
>  .Range("A1:AM50000").AdvancedFilter Action:=xlFilterCopy, _
>  CriteriaRange:= .Range("c10:c11"), _
>  CopyToRange:= .Range("ba4:cL4"), _
>  Unique:= False
>End With

この事を基に次の動作を試みました。
1.分析.xlsをアクティブにする
2.データベースは、損益データ.xlsにある
3.分析.xlsのRange("c10:c11")に条件を記述
4.分析.xlsのRange("ba4:cL4")に抽出する
このことで with を使用したらだめでした。

なんとかなるでしょうか?
 ───────────────────────────────────────  ■題名 : Re:データ抽出でのエラー  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 02/9/3(火) 17:06  -------------------------------------------------------------------------
   maeda さん、こんにちわ。

>1.分析.xlsをアクティブにする
>2.データベースは、損益データ.xlsにある
>3.分析.xlsのRange("c10:c11")に条件を記述
>4.分析.xlsのRange("ba4:cL4")に抽出する
>このことで with を使用したらだめでした。

 シートおよびブックが異なるのですね。さっきのはシートが同じ場合を想定してました。
 プログラム内でActiveSheet(シート名省略)を多用していますが、分析.xlsを開いたときに必ず同じシートがアクティブになっていますか?

シート固定でエラーを減らす

Set ws1 = Workbooks("損益データ.xls").WorkSheets("DB")
Set ws2 = Workbooks("分析.xls").WorkSheets( 上と同様にシート名を入れる )

ws1.Range("A1:AM50000").AdvancedFilter Action:=xlFilterCopy, _
  CriteriaRange:= ws2.Range("c10:c11"), _
  CopyToRange:= ws2.Range("ba4:cL4"), Unique:= False

こんな感じです。
 ───────────────────────────────────────  ■題名 : Re:データ抽出でのエラー  ■名前 : maeda <fwhn0621@mb.infoweb.ne.jp>  ■日付 : 02/9/3(火) 21:32  -------------------------------------------------------------------------
   ▼りん さん:
いろいろありがとうございました。
根本的にはデータベースのフィールドを追加変更を行ったためのミスでした。
他の面でもご指導いただきありがとうございました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 31