2017-06-07 13 views
0

If ... Thenループは、SQLレコードセットの値をVBA値に割り当てて、Excelセルに割り当てることができるForループ内にネストされています。私は、レコードセットに値があることを確認しました。ForとIf..Thenループがなければ、私がやろうとしていることを実行できます。ただし、ループが実行されるたびに値が空であるように見えます。IF THENループが値を正しく設定しない

は、ここでは、コードの私のブロックです:これが実行された後

Dim counter as Integer 
Dim fieldName1, fieldName2, etc. As String 
Dim fieldName() As Variant 

fieldName = Array("fieldName1", "fieldName2", "etc.") 
counter = 0 

For I = 0 To UBound(fieldName()) 
     If Not IsNull(recordSet.Fields(counter)) Then 
      fieldName(I) = recordSet.Fields(counter).Value 
      counter = counter + 1 
     Else : fieldName(I) = "" 
      counter = counter + 1 
     End If 
Next I 

、それはエラーなしに成功し、そして私は、セルに値を代入しようとすると、それは空白文字列です。

これは、空の文字列になります:

Range("C8").Select 
    With Range("C8") 
     Range("C8").Value = fieldName1 
    End With 

しかし、これが成功のセルに値を入力します:シッダールタから

Range("C8").Select 
    With Range("C8") 
     Range("C8").Value = recordSet.Fields(4).Value 
    End With 
+3

「fieldName1」は、二重引用符が文字列のように動作する場合に表示されます。ここでは宣言されたり割り当てられたりしなかった変数のように振る舞います。コードの先頭に 'Option Explicit'を使うのがベストです。 。 Value = fieldName(1) '配列から値を取得したいと思いますか? –

+0

ああ、私は何か重要なものを残しました。それに注意を払ってくれてありがとう。 fieldName1、fieldName2などをStringとして宣言しました。配列はそれらの値の名前を反復して、それぞれがレコードセットから引き出された値に設定されるようにします。だから、配列からデータを取り出すのではなく、配列を使って値を設定しています。これを反映するために私のコードを更新するために1秒を私に与えてください。 – JayRyGeo

+0

これで 'fieldName1'にはどこに値を割り当てますか? –

答えて

1

私はfieldName1宣言しています、fieldName2などを文字列として返します。配列はそれらの値の名前を反復して、それぞれがレコードセットから引き出された値に設定されるようにします。

あなたは、ループ内で変数を宣言傾ける:)

0

を私はあなたが達成しようとしている正確にわからないけど、目的はただシートをExcelにレコードセットの値をコピーしている場合、それが簡単に行うことができます

Dim i As Long 
Dim ws As Worksheet 
Dim rng As Range 

Set ws = ThisWorkbook.Worksheets("My_Sheet") 'your target sheet 
Set rng = ws.Range("A1") 'target location 

' This block copies field names to worksheet 
For i = 0 To rs.Fields.Count - 1 
    rng.Cells(1, i + 1) = rs.Fields(i).Name 
Next 

' This block copies recordset values to worksheet, one row below field names 
rng.Cells(2, 1).CopyFromRecordset rs 
+0

私がやろうとしていたのは、レコードセットの値を使って配列から値を割り出すことでした。レコードセットから値を引き出すことは問題ではなく、fieldName(I)を設定する値にすることが問題でした。 ので、ループは、私はそれになりたかった走ったとき: fieldName1 = recordSet.Fields(0).Valueの fieldName2 = recordSet.Fields(1).Valueの fieldName3 = recordSet.Fields(2).Valueのなど等々。 – JayRyGeo

関連する問題