我有一个包含160行和2列数据的excel文件 - 文章名称,价格。 我还有一个文件夹,其中包含这些文章的照片。
问题是图片名称与我的Excel工作表中的文章名称不完全相同。
例如在我的表格中我有文章名称:“3714-012-P140”但在文件夹中它将是“3714-012-P140- - - ****”。
然而,在最初3个代码块(3714; 012;示例中为P140)之后,搜索中总会只显示1张图片。
如何选择带有通配符的图片呢?
此外,我如何将图片锁定到excel中的特定单元格?我的意思是,当我调整大小或删除某些行/列时,图片会沿着分配给它们的单元格移动。
Dim ws As Worksheet
Dim articleCode As String, _
findStr As String
Set ws = Workbooks(1).Worksheets(1)
For i = 1 to ws.UsedRange.Rows.Count
articleCode = ws.Cells(i,1)
findStr = 'some code
ActiveSheet.Pictures.Insert( _
"C:\...path...\" & findStr & ".jpg").Select
Next i
编辑:我需要将照片插入每行数据的第三列。
答案 0 :(得分:1)
关于"锁定"将图片放入特定的单元格中。
有关如何将形状链接到单元格的信息,请参阅here。
基本上你需要:
将图片放在单元格上。这可以通过设置图片(即形状)来实现.Top和.Left属性与您将图片链接到的单元格相同。
将形状的公式设置为等于单元格引用(这也会将形状的大小调整为与单元格大小相同,并且如果更改单元格大小,则会使其大小调整)。请参阅here
以下从here获取的代码将帮助您在与" findstring"匹配的文件夹中查找文件。 (需要进行调整!)
Sub FindPatternMatchedFiles()
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objRegExp As Object
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.pattern = ".*xlsx"
objRegExp.IgnoreCase = True
Dim colFiles As Collection
Set colFiles = New Collection
RecursiveFileSearch "C:\Path\To\Your\Directory", objRegExp, colFiles, objFSO
For Each f In colFiles
Debug.Print (f)
'Insert code here to do something with the matched files
Next
'Garbage Collection
Set objFSO = Nothing
Set objRegExp = Nothing
End Sub
答案 1 :(得分:0)
让您现有的代码调用一个接受文章名称(articleCode
)的函数,并返回图像文件的路径:
strImage = FindImage(articleCode)
If Len(strImage) > 0 Then ActiveSheet.Pictures.Insert strImage
然后你可以像这样编写你的函数:
Function FindImage(strArticle As String) As String
Dim objFile As Object
With CreateObject("Scripting.FileSystemObject")
For Each objFile In .GetFolder("c:\path\to\images").Files
If StrComp(Left$(objFile.Name, Len(strArticle)), strArticle, vbTextCompare) = 0 Then
' Found an image file that begins with the article code.
FindImage = objFile.Path
Exit Function
End If
Next
End With
End Function
答案 2 :(得分:0)
下面的函数使用articleCode,它是应该输入图片的图片,行和列的名称。
Function picInsert(articleCode As String, row As Integer, column As Integer)
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim i As Integer
Dim ws As Worksheet
Set ws = Workbooks(1).Worksheets(2) 'your worksheet where the pictures will be put
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("...path...")
i = 1
For Each objFile In objFolder.Files
If objFile.name Like (articleCode & "*") Then 'finds a picture with similar name to the one searched
With ActiveSheet.Pictures.Insert(objFile.Path)
With .ShapeRange
.LockAspectRatio = msoTrue
.Width = 5
.Height = 15
End With
.Left = ActiveSheet.Cells(row, column).Left
.Top = ActiveSheet.Cells(row, column).Top
.Placement = 1 'locks the picture to a cell
End With
End If
i = i + 1
Next objFile
End Function
这是一个测试子,我尝试了上面的功能。基本上是一个遍历行的简单循环,从第一列获取articleCode并使用上面的函数将图片输入第三列。
Public Sub test()
Dim ws As Worksheet
Dim i As Integer
Dim articleCode As String
Set ws = Workbooks(1).Worksheets(2)
For i = 1 To ws.UsedRange.Rows.Count
articleCode = ws.Cells(i, 1)
Call picInsert(articleCode, i, 3)
Next i
End Sub