【发布时间】: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循环也可以替换为Match或Find。