VBA从多选列表框中获取数据并将其保存在其他excel文件中与当天date一栏
首先我会告诉你我正在做什么和我已经做了什么。 我有两个文件:MSS – 从哪里获取数据到我的列表框,我想在列表框中select项目的输出,其次我有用户窗体。 我已经完成了获取数据到列表框并多选了它:
Private Sub UserForm_Initialize() On Error GoTo UserForm_Initialize_Err Dim cnn As New ADODB.Connection Dim rst As New ADODB.Recordset Dim i As Integer cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;;" & _ "Data Source=C:\Users\plkmxm08\Desktop\MMS.xlsm;" & _ "Extended Properties=""Excel 12.0 Xml;HDR=YES;"";" rst.Open "SELECT [LINE], [TASK] FROM fff ORDER BY [LINE];", _ cnn, adOpenStatic rst.MoveFirst i = 0 With Me.ListBox1 .Clear Do .AddItem .List(i, 0) = rst![Line] .List(i, 1) = rst![TASK] i = i + 1 rst.MoveNext Loop Until rst.EOF End With UserForm_Initialize_Exit: On Error Resume Next rst.Close cnn.Close Set rst = Nothing Set cnn = Nothing Exit Sub UserForm_Initialize_Err: MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, "Error!" Resume UserForm_Initialize_Exit End Sub
除了标题问题之外,它工作正常。 即使当我在列表框属性ColumnHeads更改为True时有空白。 我select了我的领域与标题。 但是我可以没有它。
我得到选定的数据值的大问题。 在MSS文件中有两个重要的列:LINE和TASK,之后我得到格式为yyyy / mm / dd的date列。
所以我该做什么是:当列表框中的值被选中时,我点击命令button。 然后在MSS文件中search今天的date,然后在列和行中search与在列表框中select相同的文本。 当它发现这两个值:在正确的date和行的正确值的列写入像“确定”,并从列表框中删除这个值。
什么是重要的:今天已经检查过的值不应该被导入到另一个打开的Excel文件的列表框。 每天上午6点之后,程序应该再次导入所有内容。
这很复杂,所以我希望你能理解我的意思。
我find了一些方法来得到我想要的,但是现在我有一些麻烦。 这是我的代码:
`Private Sub CommandButton1_Click() Dim LDate As Date Dim cnn As New ADODB.Connection Dim rst As New ADODB.Recordset Dim lItem As Long, lRows As Long, lCols As Long Dim bSelected As Boolean Dim lColLoop As Long, lTransferRow As Long Dim Val As Variant Dim MDate As Date If Time > TimeValue("00:00:00") And Time < TimeValue("06:00:00") Then LDate = DateAdd("d", -1, Now) Else LDate = Now End If MDate = DateValue(LDate) cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;;" & _ "Data Source=C:\Users\plkmxm08\Desktop\MMS.xlsm;" & _ "Extended Properties=""Excel 12.0 Xml;HDR=YES;"";" rst.Open "SELECT [LINE], [TASK], [Frequency] FROM button ORDER BY [TASK];", _ cnn, adOpenStatic lCols = ListBox1.ColumnCount - 1 lRows = ListBox1.ListCount - 1 'Ensure they have at least 1 row selected For lItem = 0 To lRows 'At least 1 row selected If ListBox1.Selected(lItem) = True Then 'Boolean flag bSelected = True 'Exit for loop Exit For End If Next At least 1 row selected If bSelected = True Then For lItem = 0 To lRows If ListBox1.Selected(lItem) = True Then 'Row selected 'Loop through columns of selected row For lColLoop = 1 To lCols 'Transfer selected row to relevant row of transfer range Val = ListBox1.List(lItem, lColLoop) rst.Find "TASK = '" & Val & "'" ListBox1.Selected(lItem) = False Next lColLoop End If Next End If End Sub`
所以现在如果我检查列表框中的任何值,它会发现这个值在不同的Excel文件。 我的问题是,我需要得到这个单元格的行索引和列索引今天的date。 如果有人给我指出正确的方向,我将非常感激。