Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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
Excel 使用检查单元格从一个工作簿复制到另一个工作簿_Excel_Vba - Fatal编程技术网

Excel 使用检查单元格从一个工作簿复制到另一个工作簿

Excel 使用检查单元格从一个工作簿复制到另一个工作簿,excel,vba,Excel,Vba,我试图将一些数据从一个工作簿复制到另一个工作簿,并检查两个文件中的某些单元格内容。下面是我的代码: Sub GetFileCopyData() Dim Fname As String Dim SrcWbk As Workbook Dim DestWbk As Workbook Dim miesiac() As Variant Dim m_i, i, wiersz_nazw As Integer Dim Msc, nazw As String m

我试图将一些数据从一个工作簿复制到另一个工作簿,并检查两个文件中的某些单元格内容。下面是我的代码:

    Sub GetFileCopyData()
   Dim Fname As String
   Dim SrcWbk As Workbook
   Dim DestWbk As Workbook
   Dim miesiac() As Variant
   Dim m_i, i, wiersz_nazw As Integer
   Dim Msc, nazw As String

   miesiac = Array(styczeń, luty, marzec, kwiecień, maj, czerwiec, lipiec, sierpień, wrzesień, październik, listopad, grudzień)

   Set DestWbk = ThisWorkbook
   Set SrcWbk = ActiveWorkbook
   Fname = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls*), *.xls*", Title:="Select a File")
   If Fname = "False" Then Exit Sub
   Set SrcWbk = Workbooks.Open(Fname)
   Set DestWbk = ActiveWorkbook


   Msc = SrcWbk.Cells(2, 13).Text
   m_i = szukaj(miesiac, Msc)


   nazw = Cells(3, 4).Text
   For i = 1 To 100 Step 1
        If nazw Like "*" & SrcWbk.Cells(i, 24) & "*" Then
            wiersz_nazw = i: Exit For
        End If
   Next

   SrcWbk.Cells(wiersz_nazw, 2).Copy DestWbk.Cells(m_i + 7, 3)

End Sub

Function szukaj(ByRef lista As Variant, ByVal wartosc As String)
  Dim found As Integer, foundi As Integer ' put only once
  found = -1
  For foundi = LBound(lista) To UBound(lista):
   'If lista(foundi) = wartosc   Then
   If StrComp(lista(foundi), wartosc, vbTextCompare) = 0 Then
    found = foundi: Exit For
   End If
  Next
  szukaj = found
End Function
它在此行中获取运行时438错误:

Msc = SrcWbk.Cells(2, 13).Text

脚本必须从源工作簿单元格2,13获取文本参数,然后从数组中获取此文本的编号。然后scrip必须从目标工作簿单元格3,4获取文本参数,并在源工作簿中搜索它。然后我可以复制一些数据。

这涵盖了大部分评论。我认为应该可以,但你可能必须检查工作簿/工作表的名称,因为我不是在所有情况下都完全清楚

然后检查我的
wiersz_nazw
位是否正确

最初的438错误是因为
单元格
需要一个工作表父级,而不是工作簿父级

Sub GetFileCopyData()

Dim Fname As String
Dim SrcWbk As Workbook
Dim DestWbk As Workbook
Dim miesiac() As Variant
Dim m_i As Variant, i As Long, wiersz_nazw As Variant
Dim Msc As String, nazw As String 'each one needs to be specified

miesiac = Array(styczen, luty, marzec, kwiecien, maj, czerwiec, lipiec, sierpien, wrzesien, pazdziernik, listopad, grudzien)

Set DestWbk = ThisWorkbook 'file containing code
Fname = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls*), *.xls*", Title:="Select a File")
If Fname = "False" Then Exit Sub
Set SrcWbk = Workbooks.Open(Fname)

Msc = SrcWbk.Worksheets(1).Cells(2, 13).Text
m_i = Application.Match(Msc, miesiac, 0)

If Not IsNumeric(m_i) Then m_i = -1
nazw = SrcWbk.Worksheets(1).Cells(3, 4).Text 'change workbook/sheet as necessary
wiersz_nazw = Application.Match("*" & nazw & "*", SrcWbk.Worksheets(1).Range("X1:X100"), 0)
If IsNumeric(wiersz_nazw) Then
    SrcWbk.Worksheets(1).Cells(wiersz_nazw, 2).Copy DestWbk.Worksheets(1).Cells(m_i + 7, 3) 'change sheets as necessary
End If

End Sub

单元格
是工作表的属性,而不是工作簿的属性。顺便说一句,我认为您的函数可以替换为MATCH。“所以我需要像SrcWbk.Worksheets.Cells一样在高层使用它,是的。”。您需要识别工作表。您可以通过索引
SrcWbk.Worksheets(1).Cells
或工作表名称
SrcWbk.Worksheets(“工作表1”).Cells
或如果工作表位于
thiswoolk
中,则可以使用代码名
Sheet1.Cells
定义
miesiac
时的字符串是什么意思?如果它们确实是字符串,那么它们必须位于双引号
miesiac=Array(“styczeń”、“luty”…)
之间。如果它们是可变的,天知道是什么,你必须告诉我们它们到底是什么…只需按照@defoundlyoblivious的评论使用索引即可。是重新匹配,将
m_i
声明为变量,并检查它是否是一个数字(否则没有匹配)。我认为你的
I
循环也可以被
Match
Find
替换。它工作得非常好。现在,这只是行的一个问题:
m_i=Application.Match(Msc,miesiac,0)
Msc是由几个单词组成的字符串,例如它的styczen月。Match返回错误。很高兴听到这个消息。好的,那么你的意思是说在miesiac中找不到它?在原始函数中,如果未找到,则将其值设置为-1。这里也可以这样做吗?很可能是的,因为在原始函数中,它不是固定的。雪人在上面做了一个小小的改变。m_i仍然是错误2042。正如我所说,Msc由几个词组成,例如month styczen。它无法将其与miesiac数组相匹配,其中的值为“styczeń”、“luty”等。