Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA Excel-在列中查找值,粘贴到另一个工作表_Vba_Excel - Fatal编程技术网

VBA Excel-在列中查找值,粘贴到另一个工作表

VBA Excel-在列中查找值,粘贴到另一个工作表,vba,excel,Vba,Excel,我有一个excel工作表文件夹,还有一个工作表,其中有一列的条目对应于文件夹中工作表的文件名 工作表名称右侧的列有一个数字,我想将其粘贴到每个相应的工作表中。。。但它不起作用。。。以下是我目前的代码: Sub FraisRank() Dim folderPath As String Dim filename As String Dim filenameshort As String Dim wb As Workbook Dim fraislist As

我有一个excel工作表文件夹,还有一个工作表,其中有一列的条目对应于文件夹中工作表的文件名

工作表名称右侧的列有一个数字,我想将其粘贴到每个相应的工作表中。。。但它不起作用。。。以下是我目前的代码:

Sub FraisRank()

    Dim folderPath As String
    Dim filename As String
    Dim filenameshort As String
    Dim wb As Workbook
    Dim fraislist As Workbook
    Dim find As Range
    Dim sel As Range

    folderPath = "C:\Users\richard\Desktop\temp" 

    If Right(folderPath, 1) <> "\" Then folderPath = folderPath + "\"

    Set fraislist = Workbooks.Open("C:\Users\richard\desktop\frais list.xlsx")

    filename = Dir(folderPath & "*.*")

    Do While filename <> ""
         Application.ScreenUpdating = False
         Set wb = Workbooks.Open(folderPath & filename)
         filenameshort = Left(filename, Len(filename) - 4)

         Set sel = fraislist.Sheets(1).Range("A1:A164")

             Set find = sel.find(What:=filenameshort, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)

        If find Is Nothing Then
            MsgBox ("Cell " & filenameshort & " not found")

        Else
            find.Offset(, 1).Resize(1, 1).Copy
            ActiveSheet.Range("$H$5").PasteSpecial Paste:=xlPasteValues
        End If

         ActiveWorkbook.Save

         ActiveWorkbook.Close

        filename = Dir
     Loop

     End Sub
Sub-FraisRank()
将folderPath设置为字符串
将文件名设置为字符串
Dim filenameshort作为字符串
将wb设置为工作簿
作为工作簿的Dim fraislist
模糊查找范围
昏暗的选择范围
folderPath=“C:\Users\richard\Desktop\temp”
如果正确(folderPath,1)“\”则folderPath=folderPath+“\”
设置fraislist=Workbooks.Open(“C:\Users\richard\desktop\frais list.xlsx”)
filename=Dir(folderPath&“***”)
文件名“”时执行此操作
Application.ScreenUpdating=False
设置wb=Workbooks.Open(文件夹路径和文件名)
filenameshort=Left(文件名,Len(文件名)-4)
Set sel=FRAILIST.Sheets(1)范围(“A1:A164”)
设置find=sel.find(What:=filenameshort,After:=ActiveCell,LookIn:=xlFormulas_
查看:=xlother,搜索顺序:=xlByRows,搜索方向:=xlNext_
MatchCase:=False,SearchFormat:=False)
如果找不到什么,那么
MsgBox(“单元格”和filenameshort&“未找到”)
其他的
查找.偏移量(,1).调整大小(1,1).复制
ActiveSheet.Range(“$H$5”)。粘贴特殊粘贴:=xlPasteValues
如果结束
活动工作簿。保存
活动工作簿。关闭
filename=Dir
环
端接头

目前,我得到一个运行时错误“13”,在“Set find=…”部分的类型不匹配。一般来说,我不知道如何在“fraislist”工作簿中的选定单元格上运行“.find”…

ActiveCell的问题是它总是引用
Activesheet
,因此应该避免使用类似
ActiveCell/Select/Activate/Activesheet/Activeworkbook
的语句。始终创建相关对象并使用它们

在您的情况下,
ActiveSheet
不一定是
fraislist.Sheets(1)
所以
ActiveCell
可能没有引用正确的工作表,因此最好完全限定它


如果将
After:=ActiveCell
更改为
After:=fraislist.Sheets(1).Range(“A1”)
那么您的代码将引用正确的工作表,它将正常工作。

ActiveCell的问题是它总是引用
Activesheet
,因此应该避免使用类似
ActiveCell/Select/Activate/Activesheet/Activeworkbook
的语句。始终创建相关对象并使用它们

在您的情况下,
ActiveSheet
不一定是
fraislist.Sheets(1)
所以
ActiveCell
可能没有引用正确的工作表,因此最好完全限定它


如果您将
After:=ActiveCell
更改为
After:=fraislist.Sheets(1).Range(“A1”)
,则您的代码将引用正确的工作表,并且它将正常工作。

BIRDSVIEW:change
After:=ActiveCell
更改为
After:=fraislist.Sheets(1).Range(“A1”)
Siddharth感谢这就是问题所在!回答一下,我会选择birdsview:Change
After:=ActiveCell
After:=fraislist.Sheets(1.Range(“A1”)
Siddharth谢谢这就是问题所在!从中找出答案,我会选择