我不知道在VBA中是否可以实现此问题,或者它必须使用VB完成。使用Visual Studio的网络。在Excel中使用VBA搜索多个值
问题: Excel有它的搜索功能,这是一个痛苦,如果有许多可用的价值,或者你必须找到一个值,远离A列
我想有什么这样
在这我可以指定我想通过自己的头名,以显示哪些列。以我想要的方式重新排列列,并且可以复制和粘贴。像Visual Basic中的datagrid一样? 这可能吗?
我不知道在VBA中是否可以实现此问题,或者它必须使用VB完成。使用Visual Studio的网络。在Excel中使用VBA搜索多个值
问题: Excel有它的搜索功能,这是一个痛苦,如果有许多可用的价值,或者你必须找到一个值,远离A列
我想有什么这样
在这我可以指定我想通过自己的头名,以显示哪些列。以我想要的方式重新排列列,并且可以复制和粘贴。像Visual Basic中的datagrid一样? 这可能吗?
我已经给下面两种方法 - VBA和VB.net(随你挑):)
使用VB.NET
将一个DataGridView您VB.net表上,也发生一个按钮。将此代码放置在按钮
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim masterTable As New DataTable
Dim cnnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=""Excel 12.0 Xml;HDR=NO"";Data Source=""{0}"";"
Using da As New OleDb.OleDbDataAdapter("select * from [Sheet1$] Where F1 = 'Test1'", String.Format(cnnStr, "C:\Book1.xlsx"))
da.Fill (masterTable)
End Using
DataGridView1.DataSource = masterTable
End Sub
End Class
和你做:)
快照
我使用的数据有限。
你也可以改变你的字符串"select * from [Sheet1$] Where F1 = 'Test1'"
到"select F1 as Name,F2 as PN, F3 as [Inventory Loc] from [Sheet1$] Where F1 = 'Test1'"
如下
编辑
如果显示标题你想知道如何做到这一点的VBA
使用VBA
在窗体上放置一个列表框和一个命令按钮,然后使用此代码。
Option Explicit
Private Sub CommandButton1_Click()
Dim ws As Worksheet, ws1 As Worksheet
Dim rng As Range
Dim lastRow As Long
Dim Ar As Variant
Set ws = Sheets("Sheet1")
lastRow = ws.Cells.Find(What:="*", After:=ws.Range("A1"), _
Lookat:=xlPart, LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _
MatchCase:=False).Row
Set rng = ws.Range("A1:C" & lastRow)
Set ws1 = Sheets.Add
With rng
ws.AutoFilterMode = False
.AutoFilter Field:=1, Criteria1:="Test1"
.SpecialCells(xlCellTypeVisible).Copy ws1.Range("A1")
ws.AutoFilterMode = False
lastRow = ws1.Cells.Find(What:="*", After:=ws1.Range("A1"), _
Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, MatchCase:=False).Row
Ar = ws1.Range("A1:C" & lastRow)
Application.DisplayAlerts = False
ws1.Delete
Application.DisplayAlerts = True
End With
With Me.ListBox1
.Clear
.ColumnHeads = False
.ColumnCount = 3
.List = Ar
.ColumnWidths = "50;50;50"
.TopIndex = 0
End With
End Sub
快照
更多后续
亚洲时报Siddharth你好,非常感谢你的两个代码。对于VB。网络是美好的。对于Exel中的VBA,有没有什么方法可以复制(使用Ctrl + C)来复制数据 - 虽然复制多行是更可取的,但单行将会很好。我可以用文本框i49.tinypic.com/2ceq3yf替换“Test1”。jpg - user1370854 5小时前
是的,可以将单选或多选项从列表框复制到cliboard。要设计listobx多选,请在设计模式下将列表框的属性设置为fmMultiSelectMulti1
。下一步添加一个命令按钮并粘贴此代码。
此代码再次基于我上面使用的数据,因此将其修改为适用。当您按下Copy
按钮时,数据将被复制到剪贴板,然后您可以简单地使用CTL V
将数据粘贴到您想要的位置;例如在记事本中。
Private Sub CommandButton2_Click()
Dim MyData As DataObject
Dim i As Long
Dim strCopiedText As String
Set MyData = New DataObject
With Me.ListBox1
For i = 1 To .ListCount
If .Selected(i - 1) Then
strCopiedText = strCopiedText & _
.List(i - 1, 0) & vbTab & _
.List(i - 1, 1) & vbTab & _
.List(i - 1, 2) & vbCrLf
End If
Next i
If Len(strCopiedText) > 0 Then
MyData.Clear
MyData.SetText strCopiedText
MyData.PutInClipboard
MsgBox "Data copied to clipboard"
End If
End With
End Sub
它可以同时在VBA和VB.Net来完成。你想要哪一个? –
如果可以在VB中完成。作为一个选项卡网络(插件)http://i47.tinypic.com/tsoj.png - 这是最好的 – NCC