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 |
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 こんな感じです。 |
▼りん さん: >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 を使用したらだめでした。 なんとかなるでしょうか? |
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 こんな感じです。 |
▼りん さん: いろいろありがとうございました。 根本的にはデータベースのフィールドを追加変更を行ったためのミスでした。 他の面でもご指導いただきありがとうございました。 |