0

ここに投稿するのは初めてです

エラーがあります:

error 91 Object variable or With block variable not set

ラインでr2Val = activSheet.Columns(1).Find...

私はこれを1か月間行ってきましたが、インポート部分に行き詰まりました

これはシート更新リスト です www.mediafire.com/view/?av8skl7e3ry93p3 上記はファイル ブラウザを開き、インポートするシートを含むワークブックを選択します

これは私が埋めたいシートです http://www.mediafire.com/view/?r7y2xfa2s7kc9wx

これは、 http://www.mediafire.com/view/?6wp8ywme1kgehqnからデータを取得する場所です。

これが機能するための私の現在のコード:

' updates data based on excel or csv file uploaded
' This version uses "find" to find similar meterID and billing period between 2 worksheets
Sub Push2Sheets(filePath As String, shtName As String)
    On Error GoTo ErrorHandler
    If filePath = "False" Then Exit Sub

    Dim targetWorkbook As Workbook 'workbook to get data from
    Dim MyWorkbook As Workbook 'this workbook to merge

    Set MyWorkbook = Application.ActiveWorkbook 'sets this workbook for merging
    Set targetWorkbook = Application.Workbooks.Open(filePath) 'copies source workbook to memory

    Dim activSheet As Worksheet
    Set activSheet = MyWorkbook.Worksheets(shtName) 'selects the worksheet to merge with source sheet
    Dim sourceSheet As Worksheet
    If targetWorkbook.Sheets.Count > 1 Then 'checks first if the target workbook has one or many sheets to draw data
        Set sourceSheet = targetWorkbook.Worksheets(1)
        Else
        Set sourceSheet = targetWorkbook.Worksheets(shtName)
    End If

    Dim rw As Long 'used as a counter for reading the first column of the source sheet
    Dim Col As Long 'used as a counter for reading the first row of the source sheet
    Dim rVal As String, r2Val As Range 'row value
    Dim cVal As String, c2Val As Range 'cell value

    For rw = 2 To sourceSheet.Rows.Count
    rVal = sourceSheet.Cells(rw, 1).Value
    Debug.Print rVal
        'this finds if there is a similar meterID in the target sheet (This Workbook)
        r2Val = activSheet.Columns(1).Find(What:=rVal, LookIn:=xlValues, _
                LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False)
        If Not r2Val Is Nothing Then
            For Col = 2 To sourceSheet.Columns.Count
            cVal = sourceSheet.Cells(1, Col).Value
            Debug.Print cVal
                'uses the table headers to find a match and copies the content of source to target sheet if found
                c2Val = activSheet.Rows(1).Find(What:=cVal, LookIn:=xlValues, _
                        LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                        MatchCase:=False, SearchFormat:=False)
                If Not c2Val Is Nothing Then
                sourceSheet.Cells(rw, Col).Copy Destination:=activSheet.Cells(r2Val.Row, c2Val.Column)
                End If
            Next
        Else
            Call UniAutoFiller 'adds a new row at the end of the table if there is a new MeterID
            [addrow].Offset(-1, 0).Value = rVal
        End If
    Next

    targetWorkbook.Close SaveChanges:=False
    Exit Sub

ErrorHandler:
    If Not err.Number = 0 Then Call LogInformation(ThisWorkbook.Name & " has error " & err.Number & " " & err.Description & " on " & Format(Now, "yyyy-mm-dd hh:mm"))
    MsgBox "Something went wrong :?" & vbNewLine & vbNewLine & "Make sure the worksheet name you" & _
     vbNewLine & "are importing match the internal sheet name"
End Sub

エクセルVBAに関してはまだまだ初心者です。

私がやりたいことは:

  1. 完全に完成したワークシートを含む外部ワークブックを開く
  2. 内部シートの meterID と一致する meterID を見つけ、
  3. 見つかった場合は、列の請求期間 (日付) で一致を見つけます。
  4. meterID と請求期間が一致したデータのコピーが見つかりました
  5. テーブルの最後に到達するまで 1 ~ 4 を繰り返します

ソースを見たい場合は、ここから入手してください: www.mediafire.com/?9z924s7wtrb5md3

これは私がインポートしようとしているシートです: www.mediafire.com/view/?i7td9gm336wg6cg

まだ画像とリンクを投稿できないので、mod または mod クラスのユーザーがこれをクリーンアップできる場合は、感謝します

アドバイス、修正、ヒントは本当に役に立ちます

4

1 に答える 1

0

一見すると、91行目のエラーの原因は、範囲を設定しようとしたことですが=Set代わりに次のように使用する必要があります。

Set r2Val = activSheet.Columns(1).Find(What:=rVal, LookIn:=xlValues, _
            LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False)

以下についても同様ですc2Val。最初にこれらを修正してみてください。

于 2013-01-25T16:36:13.913 に答える