2014-04-02 80 views
1

这是我的场景。我想从Excel工作表“Sheet2”中的数据读取值。我如何将特定单元格的值读入可用于计算的变量等等?这是我的,但我没有得到它的工作。我错过了什么吗?值未正确返回

Private Sub CommandButton1_Click() 
'Worksheets("Sheet2").Select 
Range("A1").Select 

Dim i, iHdr, iLine, sOutStr 
Dim sDatum, sVerskaf As String 
Dim sNr, sBoL, sPOOrder, sStockCode, sOrder, sVragbief, sNommer, sBondel, sLotNum, sKaartjie, sKode, sM3Hash, sStukke, sLengte, sBreedte, sDikte, sM3At, sM3, sEen 
Dim sXML 

i = 3 

For Each sCellA In Sheets("Sheet2").Range("B" & i & ":B10") 
    i = i + 1 
    sDatum = Cells(i, 1).Value 
    sVerskaf = Cells(i, 2).Value 
    sNr = Cells(i, 3).Value 
    sBoL = Cells(i, 4).Value 
    sPOOrder = Cells(i, 5).Value 
    sStockCode = Cells(i, 6).Value 
    sXML = "<Info><Date>" & sDatum & "</Date>" 
    sXML = sXML & "<Supplier>" & sVerskaf & "</Supplier>" 
    sXML = sXML & "<Number>" & sNr & "</Number>" 
    sXML = sXML & "<BoL>" & sBoL & "</BoL>" 
    sXML = sXML & "<PurchaseOrder>" & sPOOrder & "</PurchaseOrder>" 
    sXML = sXML & "<StockCode>" & sStockCode & "</StockCode></Info>" 
Next 
'MsgBox sXML, vbInformation 

End Sub 

回答

1

有几件事情:

  1. 您不能使用For Each这样。 For Each遍历而不需要一个分度的值(如i)的范围内的物体,常规For循环用于使用Sheet.Cells(i,j)选项通过细胞迭代

  2. 而且因为你正在引用值的单个列你不“甚至不需要一个for循环可言,只是直接进入细胞Sheets("Sheet2").Cells(3,1)ActiveSheet.Cells(3,2)

  3. 而且最后不用指定这些值的变量,你可以使用简单的XML形成的单元格的值直接:sXML = "<Info><Date>" & Sheets("Sheet2").Cells(3,1).Value & "</Date>"

+0

另一个愚蠢的问题:我是否需要将变量声明为String或将一个dim变量存储任何值? –

+0

假设您使用的是较新版本的vba,请从Excel 2007+中说出,您可以将变量声明为他们需要的任何类型。 VBA相当宽容,从范围值到变量的隐式转换 – fnostro

+0

@ user3180965您可以将其声明为字符串或变体,但VBA程序员建议不要始终使用变体数据类型来捕获意外的编程错误。 – L42