【问题标题】:Copy from one workbook to another with checking cells通过检查单元格从一个工作簿复制到另一个工作簿
【发布时间】:2020-02-06 22:40:05
【问题描述】:

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

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

【问题讨论】:

  • Cells 是工作表的属性,而不是工作簿的属性。
  • 顺便说一句,我认为您的功能可以用 MATCH 替换。
  • "所以我需要像 SrcWbk.Worksheets.cells 一样使用它吗?"在高层次上,是的。您需要识别工作表。您可以通过索引SrcWbk.Worksheets(1).Cells 或工作表名称SrcWbk.Worksheets("Sheet 1").Cells 或如果工作表位于ThisWorkbook 中,则使用代号Sheet1.Cells
  • 定义miesiac时的字符串是什么意思?如果它们真的是字符串,它们必须在双引号miesiac = Array("styczeń", "luty", ...) 之间。如果它们是可变的,让上帝知道什么,你必须向我们展示它们的真实面貌......
  • 按照@ProfoundlyOblivious 的评论使用索引。是的,重新匹配,将 m_i 声明为变体并检查它是否是数字(否则不匹配)。我认为您的i 循环也可以替换为MatchFind

标签: excel vba


【解决方案1】:

这涵盖了大多数 cmets。我认为它应该可以工作,但您可能需要检查工作簿/工作表名称,因为我在所有情况下都不是很清楚。

并检查我的wiersz_nazw 位是否正确。

最初的 438 错误是因为 Cells 需要工作表父级,而不是工作簿父级。

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

【讨论】:

  • 完美运行。现在这只是行的一个问题:m_i = Application.Match(Msc, miesiac, 0) Msc 是由几个单词组成的字符串,例如。它的 styczen 月。匹配返回错误。
  • 很高兴听到这个消息。好的,所以您的意思是在miesiac 中找不到它?在您的原始函数中,如果未找到,则将其值设置为 -1。可以在这里做同样的事情吗?
  • 可能是的,因为在原始功能中它还没有修复
  • 我在上面做了一个小改动。
  • m_i 仍然是错误 2042。正如我所说,Msc 由几个词组成,例如。月 styczeń。它无法将其与值为“styczeń”、“luty”等的 miesiac 数组匹配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多