我不知道是否可以在VBA中实现此问题,或者必须使用VB完成此问题。使用Visual Studio进行网络。
问题: Excel具有搜索功能,如果有许多可用值,或者您必须找到远离A列的值,则会很痛苦。
我想有类似的东西
我可以在其中指定我想通过其标题名称显示的列。按照我想要的方式重新排列列,以及复制和粘贴的能力。像Visual Basic中的datagrid一样? 有可能吗?
答案 0 :(得分:4)
我在下面给出了两种方法 - VBA和VB.net(随你选择):)
使用VB.NET
在VB.net表单上放置一个DataGridView,并放置一个Button。将此代码放在Button
中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)来复制数据 - 单行会很好,尽管复制多行是更理想的。我可以用textbox i49.tinypic.com/2ceq3yf.jpg替换“Test1” - 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