2013-01-21 27 views
0

我试图在Access 2003中运行一个需要Excel文件的模块,如果单元格中有信息,然后复制A1,B1等字段标题和单元格......它循环遍历每一行。单元格中还有需要复制数据的注释。从Access 2003 VBA排序/操纵Excel数据

因此,在一个完美的场景中,代码会遍历每行,逐个单元格,并抓取用户,日期,单元格的数据和注释,并在现有访问表中创建新记录。如果该单元格是空的,那么它将被绕过。我有4张工作表,我知道如何让代码循环,我根本无法访问从excel中拉出。

我不想只导入数据,它需要按照机智评论排序。

任何意见将不胜感激。谢谢!

下面是最接近我想我已经得到了BTW:

Sub copy3() 

Dim rs2 As New ADODB.Recordset 
Dim cnn2 As New ADODB.Connection 
Dim cmd2 As New ADODB.Command 

With cnn2 
.Provider = "Microsoft.Jet.OLEDB.4.0" 
.ConnectionString = "Data Source=C:\FilePath.xls;" & "Extended Properties=Excel 8.0;" 
.Open 
End With 

Set cmd2.ActiveConnection = cnn2 
cmd2.CommandType = adCmdText 
cmd2.CommandText = "SELECT * FROM [Jan-Mar$] Where [Name] IS NOT NULL" 
rs2.Open cmd2 

While Not rs2.EOF 
...Not sure what to write here but I got a msgbox to appear... 
rs2.MoveNext 
Wend 
+2

有点像? http://stackoverflow.com/questions/14285106/formatting-tables-imported-via-a-report/14285559#14285559 – Fionnuala

+0

这是非常接近我在找什么,是的。但不是让它逐行移动,我试图让它逐个单元格地移动,并用数据挑出单元格。 .Rows.Count能做到这一点吗?我正在阅读它,但只理解它的一部分......'如果rng.Cells(i,1)像“Program *”然后'做什么?我熟悉If Then语句,但我从未使用过Like。谢谢 – Grant

+0

没关系,我想通了。我只需要更多地混淆它。但是为了移动逐个单元格以检查是否为空值或包含值,我应该使用一个在到达每行结尾后重置为1的整数吗? – Grant

回答

2

感谢Remou的建议和帮助。这是最后为我工作的:

Set rs = db.OpenRecordset("TestTable") 
xl.Visible = False 

Set ws = xl.Workbooks.Open("C:\file.xls").Sheets("Jan-Mar") 
Set rng = ws.UsedRange 

'Row 1 is all dates so start at Row 2 
For i = 2 To rng.Rows.Count 
    'Column A contains names so start at Column B 
    For j = 2 To rng.Rows(i).Cells.Count 
     If rng.Cells(i, j) = "" Or rng.Cells(1, j) = "Total" Then 

    Else 
     On Error Resume Next 
     rs.AddNew 
     rs!EmployeeName = rng.Cells(i, 1) 
     rs!Date = rng.Cells(1, j) 
     rs!PointValue = rng.Cells(i, j) 
     str = rng.Cells(i, j).Comment.Text 
     str = Right(str, Len(str) - 14) 
     'MsgBox str 
     rs!Comments = str 
     rs.Update 
    End If 
Next 
Next 
Set rs = Nothing 
Set rng = Nothing 
ws.Parent.Close 
xl.Quit